지난 달 말에 한빛미디어에서 리뷰할 책으로 O’REILLY 사의 Optimizing Java를 번역한 자바 최적화 라는 책을 받았습니다. 회사에서 사용하는 대부분의 업무처리가 자바(Java)로 되어 있다보니 이 책을 읽고 싶었기에 속으로 ‘아싸’를 외쳤습니다.
자바(Java)는 자바 가상 머신(Java Virtual Machine, 이하 JVM)에서 실행됩니다. 자바 소스 코드를 컴파일 하면 Java Intermediate Language(이하 JIL)라는 일종의 Intermediate Representation(이하 IR) 형식의 파일을 만듭니다. 그리고 JVM은 이 JIL을 읽어서 CPU가 이해할 수 있는 기계어 코드로 변환을 합니다. 즉, 기계어와 소스 코드 사이에 IR이라는 추상층(Abstract Layer)을 하나 더 만들어 언어의 유연성(Flexibility)을 살렸습니다. Microsoft의 .NET Framework 도 OS에 관계없이 프로그램을 실행할 수 있는데 이 또한 C#이 IR을 사용하기 때문입니다.
하지만 세상에는 100% 좋기만 한 것은 없습니다. 모든 선택에는 장점과 단점이 혼합되어 있으니까요. C/C++ 같은 언어는 컴파일을 하면 CPU 명령어(=기계어)와 1:1 매칭되는 어셈블리어 코드를 생성하기 때문에 JVM 같은 별도의 프로그램 없이 OS에서 바로 실행할 수 있습니다. 즉, 실행환경이 자바(Java)보다 간단합니다. 그러나 자바(Java)로 만들어진 프로그램은 (앞에서 언급했듯이) 실행을 하려면 JVM이 필요합니다. 이러한 이유로 자바(Java)의 실행환경은 C/C++ 로 만들어진 프로그램보다 상대적으로 복잡합니다. 결국, 자바(Java)로 만들어진 프로그램을 잘 이해하려면 OS 뿐만 아니라 JVM에 대해서도 이해할 필요가 있습니다.
한빛미디어의 <자바 최적화>는 JVM에 대한 상세한 설명을 토대로 어떻게 자바 프로그램의 성능을 측정하고 개선할 수 있는지 소개합니다. 쉽게 읽히는 책은 아닙니다. 그러나 훌륭한 자바 프로그래머로서 성장하는데 필요한 내공을 쌓을 수 있는 훌륭한 책입니다.
특별히 책을 읽으며 유용했던 것은 6~7장의 쓰레기 수집기(Garbage Collector, 이하 GC) 작동 원리, 8장의 GC 로깅 분석 방법 그리고 11장의 자바 언어의 성능 향상 기법이었습니다. 예를 들어 8장에서는 아래와 같은 조언이 나옵니다.
GC로그는 더 없이 훌륭한 원천 정보입니다. 특히, 시스템이 내려간 원인의 단서를 찾는 ‘콜드 케이스(cold case)’ 분석을 할 때 매우 유용합니다. 파일에 씌여진 로그를 분석하는 작업이므로 애플리케이션 프로세스가 살아 있지 않아도 됩니다. 모든 중요한 애플리케이션에는 다음 두 가지를 설정해야 합니다.
* CG 로그를 생성한다.
* 애플리케이션 출력과는 별도로 특정 파일에 GC 로그를 보관한다.
223쪽, CHAPTER 8 GC 로깅, 모니터링, 튜닝, 툴 <자바 최적화>
프로그램이 단순히 돌아가는 것으로 만족하면 놓치는 게 많습니다. 문제가 발생하기 전에 미리 손을 써야 합니다. 예를 들어, 자바(Java) 프로그램을 실행할 때 GC 로그를 항상 남기도록 설정하여 실제 런타임에서 어떤 일이 발생하고 있는지 파악하고 이를 개선할 수 있는 방법이 있는지 검토해야 합니다.
11장에서 저자는 평범한 개발자와 고급 개발자를 구분할 수 있는 중요한 잣대를 소개합니다. 그리고 주요 자바 Collection 객체를 어떻게 최적화할 수 있는지 소개합니다.
자료 구조가 어떤 원리로 조회되고 수정되는지 모른 채 자료 구조를 선택하는 것처럼 위험한 일도 없습니다. 평소 즐겨 쓰는 클래스를 별생각 없이 바로 갖다 쓰는 개발자들이 참 많지요. 사려 깊은 개발자라면 데이터가 어떻게 질의 되고, 어떤 알고리즘이 가장 효율적인지 신중히 살펴볼 것입니다.
326쪽, CHAPTER 11 자바 언어의 성능 향상 기법 <자바 최적화>
이 책을 읽으면서 기본의 중요성을 절실히 깨달을 수 있었습니다. 저는 단순히 돌아가는 프로그램을 만들고 싶지 않습니다. 잘 돌아갈 뿐만 아니라 내부적으로 아름다운 프로그램을 만들고 싶습니다. 다루는 데이터의 특성을 고려하여 적절한 자료 구조를 선택하고, JVM의 작동원리와 OS가 프로그램을 실행하는 원리를 고려하여 프로그램을 작성하고 싶습니다.
한빛미디어의 <자바 최적화>는 처음 읽을 때는 뇌에 부하를 줍니다. 읽는 게 다소 고생스럽습니다. 그러나 운동을 편하게 하면 성장이 없는 것처럼 공부도 그렇다는 걸 생각해야 합니다. 어려움을 맞닥뜨릴 때 진정한 성장이 있습니다. 자바(Java)를 좀 더 깊이 이해하여 내공을 쌓고 싶은 개발자에게 이 책을 추천합니다.