heoh***
2020-09-27

성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다. 성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을
자바로 웹 어플리케이션을 구현할 때 모든 프로그래밍 작업이 끝난 후 항상 프로그램 리팩토링 과정과 디버깅 하면서 사용된 코드들, 레거시 코드들을 정리하고 최종적으로 검수후에 서비스를 합니다. 하지만 “최적화”라는 것을 염두에 두지 않고 잘 작동되면 된다는 생각을 하면 작업을 해왔습니다. “최적화”라는 것을 하여 프로그램의 성능을 향상시키기엔 실력도 부족하고 개념도 많이 부족했습니다. 섣불리 최적화에 나섰다가 코드를 더 망치는 게 아닌가라는 생각도 하였습니다.
시중에 자바 개념서들을 많이 나와있지만 자바 최적화에 대해 잘 모르는 개발자들이 볼 수 있는 서적은 쉽게 찾아보지 못한 것 같습니다. 그러던 중 한빛미디어에서 출판한 자바 성능 최적화라는 번역서로 된 책이 있기에 읽어보고 그 느낌을 얘기해보고자 합니다.
이 책은 전 세계에서 내노라 하는 자바 개발자들이 직접 펴내었고 이중에는 자바 챔피언도 있다고 합니다. 13여 년동안 자바/스칼라 개발자, 애플리케이션 아키텍트로 활동하며 엔터프라이즈 프로젝트 현장을 누벼온 정보 기술자께서 옮긴 번역서 입니다. 2014년 이후로 십 수 권의 IT 전문서를 번역하였다고 하니 믿을 수 있겠습니다.
그럼 간단히 책 전반에 대해서 살펴보겠습니다.
Chapter1. 성능과 최적화
- 자바 성능이란 무엇인지에 대해 살펴봅니다. 경험과 과학, 측정에 관한 기본적인 토픽들을 살펴보고 성능 활동을 멋지게 수행하는데 꼭 필요한 기본 용어들과 측정값을 설명하였습니다.
Chapter2. JVM 이야기
- 2 장에서는 JVM 내부의 전체 모습을 빠르게 흝어봅니다. 중요한 내용들이 많았습니다. JVM을 이해하기 위해서는 운영체제와 하드웨어의 작동 세부에 대해서도 알아야 된다고 합니다. 다음장에서 그 내용들이 살펴봅니다.
Chapter3. 하드웨어와 운영체제
- 지난 20년간 프로세서 설계 및 최신 하드웨어는 놀라울 정도로 변화했습니다. 무어의 법칙이 사그라들며 사람들의 관심은 다시 소프트웨어의 상대적 성능으로 향했습니다. 성능을 중시하는 엔지니어는 적어도 최신 하드웨어와 OS의 기본 지식을 갖추어야 하드웨어와 씨름하지 않고 적절히 잘 활용할 수 있습니다.
Chpater4. 성능 테스트 패턴 및 안티패턴
- 성능테스트는 여러 가지 이유로 수행합니다. 이번 장에서는 다양한 종류의 테스트를 소개하고 유형별 베스트 프랙티스를 안내합니다.
Chapter5. 마이크로 벤치마킹과 통계
- 이 장에서는 자바 성능 수치를 직접 측정하는 내용을 자세히 살펴봅니다. JVM은 워낙 자유분방한 특성탓에 성능 수치를 다루기가 의외로 만만치 않습니다. 특히, 작은 자바 코드 한 조각의 성능을 정확히 측정(마이크로벤치마킹)하기란 매우 미묘하고 어려운 일입니다. 마이크로 벤치마킹이랑 무엇인지, 그리고 올바른 사용법은 무엇인지 알아보겠습니다.
Chapter6. 가비지 수집 기초
- 가비지 수집은 자바가 탄생한 이래, 자바 커뮤니티에서 아주 활발하게 논의된 주제입니다. 이장에서는 성능 엔지니어가 JVM의 GC 서브시스템을 효과적으로 다루기 위해 꼭 알아야 핵심 개념에 대해서 알아봅니다.
Chapter7. 가비지 수집 고급
- 7장에서는 앞선 배운 자바 가비지 수집의 이론에 더해 한 걸음 더 나아가 현재 자바의 가비지 수집 이론에 대해 알아봅니다.
Chapter8. GC 로깅, 모니터링, 튜닝, 툴
- 8장에서는 GC로깅 및 모니터링이라는 광범위한 주제를 다룹니다. 자바 성능 튜닝에서 가장 중요하고 가시적이면서도, 가장 오해를 많이 사는 부분입니다.
Chapter9. JVM의 코드 실행
- JVM의 원조 코드 실행 환경은 바이트코드 인터프리터 입니다. JVM이 코드를 어떻게 실행하는지 이해하는데 꼭 필요한 바이트코드와 인터프리터에 관한 기본적인 내용을 배웁니다.
Chapter10. JIT컴파일의 세계로
- 이번장에서 다룰 주제가 다소 추상적이고 기술적으로 복잡하기 때문에 이해 하기 쉽게 툴을 이용해 JVM의 내부 작동원리를 시각화하고 구체적인 JIT최적화 알고리즘과 각각의 특성을 살펴보고 이런 기법들이 어떤 작용을 하는지 JITWatch로 관찰해봅니다.
Chapater11. 자바 언어의 성능 향상 기법
- 표준 자바 컬렉션 API의 성능에 관한 내용을 소개하며, 도메인 객체를 다루는 핵심점인 내용에 대해서 다룹니다. 플랫폼 수준에 더 깊숙이 연관된 애플리케이션 성능 요소 두가지, 종료화와 메스드 핸들에 대해 살펴봅니다.
Chapter12. 동시 성능 기법
- 최신 하드웨어를 오롯이 활용하려면 자바 개발자는 최소한 동시성이란 무엇인지, 그것이 애플리케이션 성능에 끼치는 영향은 무엇인지 최소한의 배경지식은 갖고 있어야 합니다. 이 장에서는 기본적인 내용에 대해서만 알아봅니다.
Chapter13. 프로파일링
- 프로파일링은 많은 개발자가 잘 모르는 주제입니다. 실행/메모리 프로파일링 모두 필요하지만 성능 엔지니어는 프로파일링이 뭘하는 작업인지, 그리고 그 일을 왜 해야하는지 숙지해야 합니다. 그냥 별생각 없이 툴을 쓰다간 공연히 분석 시간만 낭비하고 부정확한/상관없는 결과만 얻는 경우가 많습니다.
Chapter14. 고성능 로깅 및 메시징
- 이 장에서는 가장 저수준부터 시작해서 전체 메시징 구현까지, 몇가지 간단한 저지연 라이브러리를 예로 듭니다. 저지연 시스템에서는 가장 저수준의 큐부터 고수준의 소프트웨어 스택에 이르기까지 그 목표와 원리가 일관되게 적용되야 합니다.
Chapter16. 자바 9와 미래
- 이 장의 성능 엔지니어가 자바 9 플랫폼에 대해서 꼭 알고 있어야 하는 신규/변경 사항을 살펴봅니다.
마치며
이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려줍니다. 초보 개발자보다는 어느정도 자바 성능에 최적화 두고 개발해야 하는 개발자에게 좋은 지침서가 되리라고 생각됩니다. 책의 내용이 사실 좀 어렵습니다!