기본 콘텐츠로 건너뛰기

글

JVM Garbage Collector 종류와 동작방식

시스템이 운영되다 보면 성능개선을 해야 할 때가 생긴다. 새로 코드를 구현하는 방법이 제일 좋겠지만 가비지 컬렉터(Garbage Collector)를 튜닝 하는 것도 성능개선에 많은 도움이 된다. 튜닝을 경험해볼 일은 없어보이지만 평소 모호하게 알고있었던 내용이기도 해서 JVM가비지 컬렉터 종류와 어떤 일을 하는지 정도를 정리해 둠. GC 개요 GC는 더이상 사용되지 않는 객체를 찾는 작업과 메모리에서 제거하는작업으로 나뉘는데, JVM은 더는 참조되지 않는객체를 찾아 메모리에서 제거하는 작업을 할 때 힙(heap)을 주기적으로 검색한다. 그런 후 GC 대상이 되는 객체가 차지했던 메모리를 다른 객체가 쓸 수 있게 메모리에서 비우게 된다. 이때 Compacting이라는 작업도 함께 이루어진다. Compacting은 메모리 파편화(memory fragmentation)가 생기지 않게 남은 공간을 잘 합쳐두는것을 말한다. Compacting (출처: dynatrace.com) Stop-the-world 자바는 멀티 쓰레드 환경인데 쓰레드는 어플리케이션에서만 쓰는것이 아니라 GC도 특정 쓰레드에서 실행이 된다. GC 쓰레드가 동작할 때는 모든 애플리케이션 쓰레드는 동작을 멈춘다. 때문에 Full GC가 생기면 시스템이 멈추게 된다. 그렇기 때문에 GC가 동작될때 애플리케이션 쓰레드가 멈추는 시간을 최소화하는 것이 GC 튜닝의 기본이라고 한다. Young Generation과 Old Generation 가비지 컬렉터는 Young Generation과 Old Generation으로 나눠서 작업한다.(Young Generation은 또 edan영역과 survivor영역으로 나뉜다) 이렇게 나누는 이유는 GC 시간을 최소화 하는것과 관련이 있다. 처음에 객체는 Young Generation에 할당된다. Young Generation이 가득차면 가비지 컬렉터가 애플리케이션 쓰레드를 멈추고 사용되지 않는 객체를 찾아 Young generation에서 제거한...

Spring Cloud Config

Spring Cloud Config는 분산된 환경에서 서버간 환경설정을 공유하는 방법을 제공하고 있다. 유사한 솔루션들이 있지만 Git과 연동해서 사용할 수 있고, 서버 재시작 없이 설정을 적용하는 방법을 제공하고 있다. 기본적인 컨셉과 사용법을 정리해 둔다. 목차 1. Spring Cloud Config Server   1. 요청 URL 형식과 응답포멧      2. Plain text 지원과 Placeholder    3. Spring Cloud Config Server 설정  4. 동작확인  2. Spring Cloud Config Client 1. Spring Cloud Config Client 설정  2.환경변수 확인  3. 설정변경과 Context Refresh  3. 여러서버에 설정 동기화 하기 1. spring-cloud-starter-bus-redis  2. Spring Cloud Bus 설정  3. 설정파일 수정과 설정파일 동기화  4. 결론 5. 예제파일 6. 참고 1. Spring Cloud Config Server "Spring Cloud Config Server"는 설정을 읽어 갈 수 있는 몇 가지 endpoint를 제공하고 있다. Spring framework만 사용한다면 "Spring Cloud Config Server"와 "Spring Cloud Config Client"간 통신 방법을 알 필요가 없겠지만, Node.js같은 이기종 플랫폼에서 사용하려면 요청 URL 형식과 응답 포맷을 알아 둘 필요가 있다. 그리고 yml이나 properties가 아닌 설정파일도 읽을 수 있어서 요청 방법과 응답 형식에 대해서도 알아본다.    > 부가적으로 암복호화 기능도 있다. 예를 들어 설...