자바 최적화 - 클라우드 시대의 자바 성능 튜닝을 위한 실용적인 기법, 2판
벤저민 J. 에번스 외 지음, 오지영 외 옮김 / 한빛미디어 / 2025년 5월
평점 :
장바구니담기


※ 한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.

이 책은 자바 애플리케이션을 좀 더 잘 운영하고 관리하기 위한 최적화된 기술을 배울 수 있는 책이다.

대다수의 자바 개발자들이 프로그래밍을 위한 언어 사용법을 배우지만 프로그래밍 외에 좀 더 안정적이고 최적화된 운영을 위한 방법을 직접적으로 배울 수 있는 방법은 드물다.

처리량과 지연 시간, 수용량과 활용도 뿐만 아니라 확장성과 효율성 그리고 성능 저하 같은 기본적인 성능상의 요소들이 왜 중요한지 파악하는 것이 중요하고 이 요소들이 동시에 최적화하기는 어렵기 때문에 성능 최적화를 위한 올바른 목표를 설정하고 추구하는 것이 중요하다.

이런 자바의 성능을 튜닝하는 실용적인 기법들을 이 책에서 다룬다.

총 15장으로 이루어진 총 5가지 주제를 다룬다.

가장 처음으로 다루는 주제는 여러 정의를 통한 자바 성능을 최적화하기 위한 개념을 다지고 성능을 논할 때 사용할 프레임워크를 수립하는 부분도 다룬다.

이후에는 자바 성능에 대한 내용을 다룰 때 자주 등장하는 문제와 함정을 살펴보는 과정도 다룬다.

특히 첫번째 장에서는 잘못된 자바 성능을 최적화하기 위한 기본 핵심을 다루기 때문에 더 좋은 성능을 위한 엔지니어링을 위한 여러 내용을 집중적으로 다루기 때문에 이러한 성능 문제가 발생했을 때 이를 폭넓게 이해하고 해결할 수 있는 기반의 내용을 다루기 때문에 첫장에서 다루는 내용은 꼼꼼히 읽고 이해할 수 있도록 해야한다.

이후에는 자바의 성능 테스트 방법론을 다루는데 이 부분은 실무를 하면서 많이 접할 수 있는 테스트의 종류이다.

각 테스트별로 어떠한 성능의 종류를 테스트하기 위한 것인지에 대해 다루기 때문에 특히나 실무에서 접할 수 있는 내용이므로 성능 테스트 방법론의 내용을 정리해보는 것도 추천한다.

이후에는 자바 개발자라면 알고 있을 내용인 JVM에 대한 내용을 다룬다.

JVM의 구성 요소들과 함께 이를 모니터링하기 위한 도구를 소개하며 이후에는 JVM의 구성요소인 GC, JIT의 각 요소에서 자바의 성능을 좌우하는 부분에 대한 내용과 함께 이를 잘 다루기 위한 방법을 다룬다.

이를 통해서 왜 성능이 느려지는 지에 대한 원인을 파악할 수 있고 이를 해결할 수 있는 방안들을 생각해볼 수 있다.

GC와 JIT를 다룬 이후에는 하드웨어의 관점에서의 하드웨어를 이루는 메모리와 캐시, 프로세서, OS에 대한 기본 이해를 통해 애플리케이션 성능에 영향을 미치는 하드웨어 측면에서의 안정된 사용 방법을 이해할 수 있다.

이후에는 클라우드 플랫폼 환경에서 자바의 성능을 효과적으로 관리하는 최적화 방법을 다룬다.

클라우드 플랫폼 환경에서 자바 애플리케이션을 잘 운영하기 위한 가상화 고려사항과 함께 클라우드 환경의 이미지와 컨테이너의 기초 내용도 다루고 있다.

또한 클라우드 네이티브의 스택의 중요 요소인 네트워킹은 서비스를 검색하고 트래픽을 라우팅하는 중요한 고려사항을 다루고 있다는 점에서 클라우드 플랫폼 환경에서 이해할 기본 내용과 핵심을 이해해야 이후에 다루는 내용을 이해할 수 있다.

이러한 기본 내용 이후에는 클라우드 환경에서 자바 애플리케이션을 배포하기 위한 구성요소들과 함께 배포의 원리와 방식을 소개한다.

클라우드 환경에서 블루/그린 배포, 카나리 배포는 한번쯤 들어보았을 배포 전략이다.

이런 배포 기술의 원리와 각각의 특징, 장/단점을 통해 서비스와 상황에 맞는 배포 전략을 이해할 수 있다.

이후에는 모니터링 시스템의 연장으로 더 확장되고 일반화된 모니터링 기술을 넘어 새로운 기능을 제공하는 관측성에 대한 내용을 다룬다.

관측성은 시스템의 내부 상태를 외부에서 얼마나 잘 추론하는 가라는 질문에서 시작이 되는데 이를 통해 장애 상황을 해결하는 과정 뿐만 아니라 다양한 활용 가능성을 가지고, 컨테이너 환경과 같은 새로운 운영 방식에서 시스템이 업그레이드 되거나 유지되기보다 문제의 상황이 발생되면 안정적인 버전으로 롤백하거나 새로운 빌드로 전환하는 방식에서 변화된 서비스의 운영 방식 뿐만 아니라 확장의 규모에서 문제를 해결하도록 하는 내용을 다룬다.

후반부에서는 가상 스레드와 분산 패턴을 통해 클라우드 규모의 동시성에 관한 내용을 다룬다.

동시성은 특히나 서비스가 확장되고 복잡해지면 더더욱 중요해진 기술이다.

동시성에 대한 개념과 함께 자바 영역에서 제공하는 동시성 라이브러리들은 실무에서 자주 다루는 부분들이다.

특히나 자바의 동시성과 비동기 실행 방식, 가상 스레드를 다루는 내용은 어려울 수 있지만 분명 실무에서 자주 다루는 서비스 로직의 한 부분이기 때문에 어렵더라도 이들의 사용 원리를 이해하기를 추천한다.

마지막 장에서는 자바의 JVM의 미래를 생각하는 내용으로 마무리를 짓는다.

복잡해지는 서비스를 개발/운영하기 위해 자바의 관점 뿐만 아니라 클라우드 환경에서 자바 애플리케이션을 안정적으로 운영하기 위한 기법들을 다룬다는 점에서 개인적으로 많은 도움을 받았다.

서비스를 운영하면서 성능 관점에서 최적화되지 않은 부분들을 접할 수 있었다.

그때마다 가장 먼저 프로그래밍 관점에서 최적화한 부분도 있지만 이외에 하드웨어와 인프라 관점에서도 성능을 개선한 부분도 있었다.

다양한 관점에서 자바 애플리케이션의 성능을 최적화하기 위한 특히나 클라우드 환경에서 최적화하는 방법을 다루고 여러 지표와 사례를 통해 상황별 해결 방안을 이해하고 최적화하는 방법을 익힐 수 있었다.

앞서 말했듯이 어려울 수 있는 내용들도 많지만 프로그래밍 관점 외에 더 확장된 영역에서 서비스를 안정적으로 운영하기 위한 방법을 이해할 수 있기 때문에 어렵더라도 완독하기를 추천한다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo