메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

자바 최적화

가장 빠른 성능을 구현하는 검증된 10가지 기법

한빛미디어

번역서

판매중

  • 저자 : 벤저민 J. 에번스 , 제임스 고프 , 크리스 뉴랜드
  • 번역 : 이일웅
  • 출간 : 2019-04-29
  • 페이지 : 500 쪽
  • ISBN : 9791162241776
  • 물류코드 :10177
  • 초급 초중급 중급 중고급 고급
4.5점 (22명)
좋아요 : 5

자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기 

 

성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다.

 

성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을 이야기한다.

 

 

자바 최적화_상세이미지[900].jpg

 

벤저민 J. 에번스 저자

벤저민 J. 에번스

데브옵스 팀을 위한 성능 툴 개발사인 jClarity의 공동 창업자이자 기술 위원이다. 자바 커뮤니티 프로세스 집행 위원회에서 런던 자바 커뮤니티 대표로 활동하며 자바 생태계의 표준을 제정하는 일을 했다. 자바 챔피언, 자바원 록스타인 그는 『The Well-Grounded Java Developer』(매닝, 2012)를 공동 집필했고 자바 플랫폼, 동시성, 기타 관련된 주제로 강연을 계속해오고 있다.

제임스 고프 저자

제임스 고프

자바 개발자 및 저자이다. 워릭 대학교에 다니던 중 처음 자바에 매료되어, 졸업 후 런던 자바 커뮤니티에 가입했고 그때부터 이 커뮤니티를 중심으로 수년간 JSR-310 설계/테스트를 담당하며 JCP 집행 위원회에서 활동해왔다. 콘퍼런스 상임 연사이기도 한 그는 현재 모건 스탠리에서 고객응대 기술 구축에 매진하고 있으며, 세계 각지를 돌며 다양한 나라에서 오랫동안 자바, C++를 가르치고 있다.

크리스 뉴랜드 저자

크리스 뉴랜드

자바 기술을 응용해 실시간 주식 데이터를 처리하는 ADVFN 사이트의 선임 자바 개발자다. 핫스팟 JVM 내부에서 이루어지는 JIT (적시) 컴파일 결정을 시각화하는 오픈 소스 로그분석기, JITWatch 프로젝트의 저작자다. 자바 챔피언인 그는 여러 콘퍼런스에서 JIT 컴파일 기술 강연을 한다.

이일웅 역자

이일웅

20년 가까이 국내외 엔터프라이즈 현장에서 자바 전문 풀스택 개발자, 소프트웨어/애플리케이션 아키텍트로 프로젝트를 수행했다. 어느덧 50대를 바라보는 중년 아재가 됐지만 아직도 궁금한 기술이 많은 엔지니어이고, 20여 권의 IT 전문서를 번역하며 동료, 후배 개발자들과 지식과 경험을 나누는 일에도 힘쓰고 있다.
 

CHAPTER 1 성능과 최적화

1.1 자바 성능: 잘못된 방법

1.2 자바 성능 개요

1.3 성능은 실험과학이다

1.4 성능 분류

1.5 성능 그래프 읽기

1.6 마치며

 

CHAPTER 2 JVM 이야기

2.1 인터프리팅과 클래스로딩

2.2 바이트코드 실행

2.3 핫스팟 입문

2.4 JVM 메모리 관리

2.5 스레딩과 자바 메모리 모델(JMM)

2.6 JVM 구현체 종류

2.7 JVM 모니터링과 툴링

2.8 마치며

 

CHAPTER 3 하드웨어와 운영체제

3.1 최신 하드웨어 소개

3.2 메모리

3.3 최신 프로세서의 특성

3.4 운영체제

3.5 단순 시스템 모델

3.6 기본 감지 전략

3.7 가상화

3.8 JVM과 운영체제

3.9 마치며

 

CHAPTER 4 성능 테스트 패턴 및 안티패턴

4.1 성능 테스트 유형

4.2 기본 베스트 프랙티스

4.3 성능 안티패턴 개요

4.4 성능 안티패턴 카탈로그

4.5 인지 편향과 성능 테스트

4.6 마치며

 

CHAPTER 5 마이크로벤치마킹과 통계

5.1 자바 성능 측정 기초

5.2 JMH 소개

5.3 JVM 성능 통계

5.4 통계치 해석

5.5 마치며

 

CHAPTER 6 가비지 수집 기초

6.1 마크 앤 스위프

6.2 핫스팟 런타임 개요

6.3 할당과 수명

6.4 핫스팟의 가비지 수집

6.5 병렬 수집기

6.6 할당의 역할

6.7 마치며

 

CHAPTER 7 가비지 수집 고급

7.1 트레이드오프와 탈착형 수집기

7.2 동시 GC 이론

7.3 CMS

7.4 G1

7.5 셰난도아

7.6 C4(아줄 징)

7.7 밸런스드(IBM J9)

7.8 레거시 핫스팟 수집기

7.9 마치며

 

CHAPTER 8 GC 로깅, 모니터링, 튜닝, 툴

8.1 GC 로깅 개요

8.2 로그 파싱 툴

8.3 GC 기본 튜닝

8.4 Parallel GC 튜닝

8.5 CMS 튜닝

8.6 G1 튜닝

8.7 jHiccup

8.8 마치며

 

CHAPTER 9 JVM의 코드 실행

9.1 바이트코드 해석

9.2 AOT와 JIT 컴파일

9.3 핫스팟 JIT 기초

9.4 코드 캐시

9.5 간단한 JIT 튜닝법

9.6 마치며

 

CHAPTER 10 JIT 컴파일의 세계로

10.1 JITWatch란?

10.2 JIT 컴파일 개요

10.3 인라이닝

10.4 루프 펼치기 

10.5 탈출 분석

10.6 단형성 디스패치

10.7 인트린직

10.8 온-스택 치환

10.9 세이프포인트 복습

10.10 코어 라이브러리 메서드

10.11 마치며

 

CHAPTER 11 자바 언어의 성능 향상 기법

11.1 컬렉션 최적화

11.2 List 최적화

11.3 Map 최적화

11.4 Set 최적화

11.5 도메인 객체 

11.6 종료화 안 하기

11.7 메서드 핸들 

11.8 마치며

 

CHAPTER 12 동시 성능 기법

12.1 병렬성이란?

12.2 JMM의 이해

12.3 동시성 라이브러리 구축

12.4 동시 라이브러리 정리

12.5 실행자와 태스크 추상화

12.6 최신 자바 동시성

12.7 마치며

 

CHAPTER 13 프로파일링

13.1 프로파일링 개요

13.2 샘플링과 세이프포인팅 편향

13.3 개발자용 프로파일링 툴

13.4 최신 프로파일러

13.5 할당 프로파일링

13.6 힙 덤프 분석

13.7 마치며

 

CHAPTER 14 고성능 로깅 및 메시징

14.1 로깅

14.2 성능에 영향이 적은 로거 설계하기

14.3 리얼 로직 라이브러리를 이용해 지연 줄이기

14.4 마치며

 

CHAPTER 15 자바 9와 미래

15.1 자바 9에서 소소하게 개선된 성능

15.2 자바 10과 그 이후 버전

15.3 자바 9 Unsafe 그 너머

15.4 발할라 프로젝트와 값 타입

15.5 그랄과 트러플

15.6 바이트코드의 향후 발전 방향

15.7 동시성의 향후 발전 방향

15.8 마치며


자바 최적화라는 책은 참 친절하게 쓰여진 책이라는 생각이 든다. (일단 정말 쉽게 쓰여져 있다. 상세하게 하나부터 단계 단계 설명하고 있는 책이다.)

그리고 이 책은 자바를 주로 쓰는 사람들에게 필수적으로 읽어야 할 만한 내용들이 정말 많이 있다. (물론, 버전 차이에 따른 부분들은 감안하고 읽자.)

 

내가 잘 몰랐던 부분 중에서 자바8은 함수형 관련 API들을 쓰려고 공부를 아등바등 했던 기억이 있는데, 자바 9 이후의 자바 JVM의 코어 시스템들의 동작 방식이나 구성 원리를 알려고 하진 않았던 것 같다.

 

그런 점에서 이 책이 도움이 많이 되었다. ‌

우선, 가비지 콜렉터가 자바 언어에 가장 주요한 성능을 튜닝을 담당하게 되는데, 이 책에서는 가비지 수집 기초, 고급을 통해서 흔히 사용했던 자바7 까지의 GC CMS, 그리고 자바 8 이후 G1 GC에 대한 부분 그리고 deprecated 된 GC옵션들에 대해서도 상세하게 정리를 하고 있다.

이 책과 더불어서 다른 자바 성능 튜닝에 대한 책들이 있는데, 참고하면 어떨까? 싶은 생각이 있다. 이 책은 다른 책들에 비해 쉽고 간결하게 쓰여 있여진 책이라 입문 하기에 더할나위 없는 책이 아닐까? 싶은 생각을 하게 된다.

 

 

 

undefined

 

이번 달의 리뷰를 위해 책의 목차들을 살피고 이번엔 이 책이다!하는 느낌이 왔다. 

Java에 대한 고급주제를 다루고 있고 성능+최적화와 관련된 다양한 주제를 다룬다.  

 

1장에서는 기본적인 성능 지표에 대해 살펴보고 2장은 JVM에 대한 이야기를 휘리릭 다룬다. 주로 이론적인 배경에 대한 소개인데 처음 접하는 내용이 많아 유익했다. (9-10장에서 JVM에서의 바이트코드 실행, JIT 컴파일에 대해 더 자세히 다룬다.)  

3장에서는 하드웨어와 운영체제에서 얼마나 성능을 위해 노력해왔는지 그 변화와 흐름에 대해, 4-5장에서는 성능테스트 패턴+안티패턴과 성능측정에 대해 설명한다. 

이후로는 GC(가비지 수집), 로깅, collection API성능, 멀티스레딩, 자바9 등등 정말 다양하고 넓은 주제들이 나온다. (그만큼 책이 두껍다.. ㅎㅎ)  

 

자바 개발자(기본)에서 한 걸음 더 나아가기에 도움이 되는 좋은 책이다. 좀 더 시야가 넓어진 기분이 들었다.  

 

자바 최적화 ( Optimizing Java )

 

매력적인 제목이다. 개발자에게 성능이란 늘 따라다니는 숙제이자 고민거리인데, 마치 이 책을 읽으면 작성한 프로그램의 성능을 능숙하게 끌어 올릴 수 있을 거 같은 생각이 들게 만든다. 그러나 이 책을 덮을 때에도 역시나 마법은 없었다. 마치 요술봉처럼문제가 한 번에 해결될 거라고 믿는다면 이 책은 답이 아니다. 하지만 다다르고자 하는 그 이상의 세계에조금 더 가깝게 만들어주는 가이드북이라고 여기면 좋겠다. ( 언제나 그렇듯 답은 없다. )

 

KakaoTalk_20200927_220609880.jpg

 

 

개발 업무를 처음 배우던 시절, 차트와 그래프가 여럿 나오고 무언가심각한 표정을 짓고 있던 선임이 그렇게 대단해 보이던 시절이 있었다. 지금이야 대쉬 보드 일 뿐이고성능 지표들을 나타내는 것 뿐이지만, 그 안을 살펴 볼 수 있는 여러 용어들을 이 책은 첫 부분에 상세히설명해준다. 당신이 대단해 보이는 시간의 연장을 위하여 후임에게는 쉽게 보여주지 말자.

 

재미있는 것은 자바 최적화를 목표로 한 책이지만, 자바가 태생하게된 이전 상태에 제로-오버헤드 원칙에 대해서 설명하고, 자바컴파일러와 클래스 로더로 읽어 실행을 하는 과정을 상세히 기술한다. 책을 읽다 보면 다른 기술 책과다르게 쉽게 눈에 들어온다는 느낌을 받게 되는데 책이 컬러로 인쇄되어 있다는 사실을 깨닫게 된다. 프로그래밍기술서가 컬러다. 내용도 알차지만 눈도 즐겁다.

 

성능 이야기라면 CPU 이야기를 빼 놓을 수 없을 것이다. 책은 순서대로 CPU 뿐 아니라 Memory부분에 대해서도 상세히 설명하고, 기존 언어와 다른 자바의 특성인 GC 부분에 대해서도 상세히 언급한다. 아울러 평소에도 궁금했던 부분인컬렉션에 대하여 어떻게 많은 데이터를 처리하는지 최적화 기법에 대하여 설명한다.

 

아울러, 이번 책에서 정말 감격한 부분은 상당히 많은 단어들이 용어로서의기능에 충실하고, 독자로 하여금 재차 검색 혹은 유추해야 하는 과정을 배려하도록 영어 용어를 병기했다는사실이다. 책을 읽는 내내 분명 우리 말임에도 전혀 기술 용어들이 막힘이 없다는 느낌이었다. 특히 영어 용어를 병기하지 않은 채, 차음만으로 용어를 사용한 책들을보면 가끔 짜증이 유발 되는 경우가 있다. 예를 들면  스틸차음의형태로 적으면, 훔치다는 의미의 Steal 과 쇠()이라는 의미의 Steel, 움직이지않는다는 의미이거나 아직은 이라는 부사로서의 still 등으로 혼란을 유발시킬 수 있는데, 대부분의 번역서가 차음의 형태로 용어를 적고 원문을 누락하거나 병기를 게을리 하는 경우가 많다. 얼마 전 메신져에서 스틸이라고 적었다가, 스톨른이라고 적을 걸.. 하고 후회한 적이 있다. 그만큼 우리 말과 전혀 다른 언어를 차음으로적는 다는 것은 죄악이다.

 

자바 문법을 배운 단계 이후의 개발자라면 누구나 읽어 보길 추천하고 싶은 책이다. 다른 사람은 모르고 나만 이 책을 보고 싶을 만큼 좋은 책이다. 최근새로 일하게 된 현장에서 기술에 대한 목마름이 가득한데, 이 책이 상큼한 과일처럼 다가와서 새로운 힘을준다.

 

가을이다. 독서의 계절한빛미디어에서큰 맘 먹고 컬러를 질러(?)버린 이 책에 감사를 표한다.

 

SE-40632511-e274-42f8-9ae1-e6bfea9a098a.jpg

 



chapter 1. 성능과 최적화

chapter 2. JVM 이야기

chapter 3. 하드웨어와 운영체제

chapter 4. 성능 테스트 패턴 및 안티패턴

chapter 5. 마이크로벤치마킹과 통계

chapter 6. 가비지 수집 기초

chapter 7. 가비지 수집 고급

chapter 8. GC 로깅, 모니터링, 튜닝, 툴

chapter 9. JVM의 코드 실행

chapter 10. JIT 컴파일의 세계로

chapter 11. 자바 언어의 성능 향상 기법

chapter 12. 동시 성능 기법

chapter 13. 프로파일링

chapter 14. 고성능 로깅 및 메시징

chapter 15. 자바 9와 미래

 

중고급으로 분류된 책이다. 어렵다.

자바 성능이나 최적화에 대해 깊게 고민해본 적이 없어 도전하듯 골라든 책인데

술술 읽지 못하고 꽤나 시간을 들여야 했다.

아직 거기까지 인사이트가 없어서 잘 안 와닿는 내용도 있었고.

뼈가 되고 살이 되리라 하면서 꾸역꾸역 읽었지만

책장에 꽂아두고 두고두고 봐야하는 책이라는 생각이 들었다.

 

 

챕터 4 성능 테스트 패턴 및 안티패턴이 꽤나 재미있었다.



4.1 성능 테스트 유형

4.2 기본 베스트 프랙티스

4.3 성능 안티패턴 개요

4.3.1 지루함

4.3.2 이력서 부풀리기

4.3.3 또래 압박

4.3.4 이해 부족

4.3.5 오해와 있지도 않은 문제

4.4 성능 안티패턴 카탈로그

4.4.1 화려함에 사로잡히다

4.4.2 단순함에 사로잡히다

4.4.3 성능 튜닝 도사

4.4.4 민간 튜닝

4.4.5 안되면 조상 탓

4.4.6 숲을 못 보고 나무만 보다

4.4.7 내 데스크톱이 UAT

4.4.8 운영 데이터처럼 만들기는 어려워

4.5 인지 편향과 성능 테스트



목차만 봐도 알겠지만 흥미롭다.

개발자들이 왜 잘못된 기술 선택을 밥 먹듯이 하는지에 대해 이야기하며 갖가지 안티패턴을 소개한다.

사람 사는 곳은 다 똑같구나 싶으면서도

저런 이야기들조차 다른 나라 이야기 같아서 한숨을 잠깐.

 

 

가비지 컬렉터에 대한 부분은 어려웠지만 흥미로웠다.

가비지 컬렉터가 뭐하는 놈인지 알고만 있었지, 실제로 어떤 알고리즘을 활용하여 돌아가는지까지는 전혀 궁금해하지 않았었다.

오호.. 하며 읽었지만 역시 어려움.

 

 

11장 자바 언어의 성능 향상 기법에서는 컬렉션 최적화에 대해 소개한다.

이 책 전체 중에서 가장 나와 가까운 챕터였다.

 

데이터를 저장할 때 어떤 옵션을 사용 가능할 수 있는지 이해하려면 여러분 스스로 자바 컬렉션 API가 지원하는 자료 구조 및 구현 세부를 꿰고 있어야 합니다.

 

 

자료 구조가 어떤 원리로 조회되고 수정되는지 모른 채 자료 구조를 선택하는 것처럼 위험한 일도 없습니다. 평소 즐겨 쓰는 클래스를 별생각 없이 바로 갖다 쓰는 개발자들이 참 많지요. 사려 깊은 개발자라면 데이터가 어떻게 질의 되고, 어떤 알고리즘이 가장 효율적인지 신중히 살펴볼 것입니다.

 



"별생각 없이 바로 갖다쓰는" 나는 명치 호되게 후려맞고 11장 경건하게 정독했다.

사려 깊은 개발자가 되기 위해 얼마나 많은 공부를 해야 할지.

아는 것이 힘이다. 아는 만큼 보인다. 공부하자.

 

자바 최적화.jpg

 

 

 

자바로 개발하기만 바빠 자바 최적화에 대해선 필요성만 느끼고 최적화를 해 볼 엄두를 내보지 못했습니다.
JVM 내부의 동작원리에 대해서 지식이 부족하기도 했고, 어떤 성능테스트를 통해 최적화를 해야될지도 감이 안왔었습니다.

최근 몇년간은 하드웨어 성능을 통해 최적화를 하지 않아도 어느 정도 성능을 끌어올릴 수 있었지만, 하드웨어만으로 성능을
끌어올릴 수 없기 때문에 자바 최적화를 통한 성능 향상과 최적화를 통한 에러를 줄이기 위해 배울 필요가 있어 보입니다.
 
1. 성능과 최적화
2. JVM 이야기
3. 하드웨어와 운영체제
4. 성능테스트 패턴 및 안티패턴
5. 마이크로벤치마킹과 통계
6. 가비지 수집 기초
7. 가비지 수집 고급
8. GC 로깅, 모니터링, 튜닝, 툴
9. JVM의 코드 실행
10. JIT 컴파일의 세계로
11. 자바 언어의 성능 향상 기법
12. 동시 성능 기법
13. 프로파일링
14. 고성능 로깅 및 메시징
15. 자바 9와 미래
 
솔직히 자바 최적화에 대해 관심을 안가졌기에 한번에 내용이 이해가 안가는 부분도 있어 몇번 읽어보면 많은 도움이 될 것 같습니다.
위의 목차에서도 알 수 있듯이, 목차 1을 보고 목차 11을 먼저 보게 되었습니다.
 
자바 언어의 성능 향상 기법이라는 내용에 맞게 Collection과 Map에 대해서 간단하게 어떤걸 사용해야될지 성능적인 관점에서
예시가 나와있습니다. 그리고 이 책의 장점이라 할 수 있는 바이트 코드 예시는 컴파일러를 이해하는데 조금 도움이 되는것 같습니다.

실제 JAVA로 코딩을 하며, 원시언어로 변환되기 위한 BYTE 코드의 컴파일에 대해서 등한시 하고 있었는데, BYTE 코드 예시를
통해 어떻게 컴파일 되서 실행되는지 알 수 있어 좋았었습니다.
 
중급 자바 개발자에서 고급 개발자로 가기 위해서는 '자바 최적화'에 대한 이해는 필수 인것 같습니다.
이 책을 기반으로 고급 개발자로 나아가는데 좋은 밑거름이 될 것 같습니다.

 

 

 

 


한빛 미디어 "나는 리뷰어다" 를 통해서 "자바 최적화(Java Optimizing)" 책을 읽게 되었다. 


실제 개발을 하면서 최적화나 성능에 관련 된 부분을 생각을 하게 되면 상당히 어렵다. 

어떤 부분을 어떻게 확인 해 봐야 하는지, 또 성능 측정은 어떻게 해야 하는지 간단하지는 않다. 

그런 면에서 이 책은 자바 최적화라는 내용에 대한 기본적인 이론부터 자세히 설명을 해주고 있다.


이론에 대한 설명을 돕기 위해서 위와 같이 자세히 그림으로 설명을 해주기도 한다.


성능에 대한 내용을 알기 위해서 실제 코드들이 바이트 코드 단위에서 어떻게 해석이 되는지.

그리고 자바를 사용하면서, 특히 Collection 을 사용하면서 어떤 부분들이 최적화를 해야 하는지에 대한 내용들을 자세히 설명을 해준다.

이것 이외에도 많은 내용들이 담겨져 있는데 내용이 어려운 부분들도 있었다. 


아마도 이 책은 내가 만든 자바 코드의 성능을 실제로 테스트 해보면서 활용하는게 가장 좋을것 같다.



 

KakaoTalk_Photo_2020-09-27-17-19-03.jpeg

 

 
단순히 자바 문법이 아니라 조금 더 어려운 주제를 공부하고 싶어서 이 책을 읽게 되었었다. 물론 작성자의 경우에 자바를 현재 메인으로 사용하지 않지만 그래도 어떤식으로 성능 최적화를 할 수 있는지 개인적으로 궁금했다.
 
책은 솔직하게 말해서 술술 읽히는 그런 내용은 아니다. 처음부터 JVM 으로 시작해서 하드웨어, 운영체제, GC 등 하드한 내용들을 주로 다루고 있다. 그래서인지 개인적으로 JAVA 를 많이 써보지 않은 입장에서는 다소 어려웠던 책이였다. 
 
하지만 어려운 책임에도 불구하고 번역이 정말 깔끔하게 잘 되어있다. 어려운 내용들에 대해서도 용어도 먼저 설명해주고 있어 그래도 이해할 수 있도록 도와주곤 한다. 또한 다행히 컬러로 되어 있어 책을 읽는데 조금 더 집중할 수 있도록 해주었었던 것 같다.
 
결론적으로 자바를 문법적인 것만을 공부하다가 조금 어려운 내용을 공부하고 싶은 분들에게 추천하고 싶다. 저번에 읽은 __실전 자바 소프트웨어 개발__ 과는 달리 오히려 이 책은 어느정도 공부를 해 본 사람들이 봐야 이해할 수 있지 않을까 싶다. 작성자 또한 현재는 솔직히 많은 부분이 이해가 된다고 할 수는 없지만 나중에 더 익숙해 졌을때 꼭 다시한번 봐보고 싶은 책이였다. 
 
번외적으로 여기 나오는 내용은 취업 면접에도 도움이 되지 않을까 생각도 하기는 했다.
 
 

KakaoTalk_Photo_2020-09-27-17-19-10.jpeg

 

 
책에서는 처음에 자바 성능과 최적화가 뭔지에 대해서 정말 간략하게 설명해준다. 당연히 이 책이 전체적으로 설명하는 내용이므로 무엇을 미리 알고 가야하는지에 대해서 알려준다고 생각하면 될 듯 싶다. 2장도 마찬가지로 자바에서 성능의 큰 부분을 차지하고 있는 JVM 내용인 많큼 이 부분도 꼭 알아야 할 부분인 듯 싶다. 3장은 어떻게 보면 2장의 연장선에 있다고 생각하면 좋을 듯 싶다. JVM 으로 해서 간단한 GC 내용을 설명해준다.
 
그 다음장에서는 이제 성능 테스트 기법을 알려주면서 성능 튜닝을 시작한다. 5장은 4장의 연장선상이라 생각해도 좋을 듯 싶다. 6장에서부터는 GC 에 대한 이야기로 시작해서 8장까지 이야기가 이어지고 있다. 그 뒷장에서도 계속해서 자바의 단순한 문법이 아니라 성능에 있어서 중요한 부분들에 대해서 다루고 있다.
 
개인적으로는 책을 읽으면서 이렇게까지 성능 튜닝을 해야하나? 혹시 성능튜닝하다가 오히려 프로그램을 망치지는 않을까? 하는 생각이 들기도 했다. 하지만 언젠가는 반드시 해야 할 작업이라 생각하고, 미리미리 준비해 두는 것도 좋을 것이라고 생각한다. 
 
"만약 자바가 느리다" 라는 말을 혹시나 많이 들어본 사람들은 이 책을 읽으면서 성능 튜닝을 어떻게 할 수 있는지 한번 확인해 보면 좋을 것 같다. 작성자의 경우에는 이 책을 읽으면서 그래도 자바에 대한 많은 궁금증이 해소되었었던 것 같다.

자바로 웹 어플리케이션을 구현할 때 모든 프로그래밍 작업이 끝난 후 항상 프로그램 리팩토링 과정과 디버깅 하면서 사용된 코드들, 레거시 코드들을 정리하고 최종적으로 검수후에 서비스를 합니다. 하지만 “최적화”라는 것을 염두에 두지 않고 잘 작동되면 된다는 생각을 하면 작업을 해왔습니다. “최적화”라는 것을 하여 프로그램의 성능을 향상시키기엔 실력도 부족하고 개념도 많이 부족했습니다. 섣불리 최적화에 나섰다가 코드를 더 망치는 게 아닌가라는 생각도 하였습니다.

시중에 자바 개념서들을 많이 나와있지만 자바 최적화에 대해 잘 모르는 개발자들이 볼 수 있는 서적은 쉽게 찾아보지 못한 것 같습니다. 그러던 중 한빛미디어에서 출판한 자바 성능 최적화라는 번역서로 된 책이 있기에 읽어보고 그 느낌을 얘기해보고자 합니다.

 

이 책은 전 세계에서 내노라 하는 자바 개발자들이 직접 펴내었고 이중에는 자바 챔피언도 있다고 합니다. 13여 년동안 자바/스칼라 개발자, 애플리케이션 아키텍트로 활동하며 엔터프라이즈 프로젝트 현장을 누벼온 정보 기술자께서 옮긴 번역서 입니다. 2014년 이후로 십 수 권의 IT 전문서를 번역하였다고 하니 믿을 수 있겠습니다.

 

그럼 간단히 책 전반에 대해서 살펴보겠습니다.

 

 

 

KakaoTalk_20200927_083109440.jpg

 

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 플랫폼에 대해서 꼭 알고 있어야 하는 신규/변경 사항을 살펴봅니다.

 



마치며

 

이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려줍니다. 초보 개발자보다는 어느정도 자바 성능에 최적화 두고 개발해야 하는 개발자에게 좋은 지침서가 되리라고 생각됩니다. 책의 내용이 사실 좀 어렵습니다!

 



 

 

 

자바 최적화

실무에서 개발언어로 자바를 사용하고 있다.

자바를 사용하면서 최적화에 대한 고민을 크게 하지 않는 것이 사실이다.

그렇지만 항상 꾸준히 관심은 가지고 있었다.

대부분 프로젝트를 하면서 어느정도 개발이 된 상태에서 성능 테스트를 하면서 어떤 문제가 발생했을 때 그에 대한 대처로 자바에 대한 메모리 옵션 등을 고민하게 된다.

그 동안 수 많은 언어가 나왔지만 자바가 탄생한지도 시간이 다소 흘렀음에도 아직도 많은 개발자들이 사용하는 것을 보면 그 동안 자바 스스로도 많은 발전을 했을 것이라고 짐작은 했었다.

이 책은 보면 그 동안 자바가 얼마나 많은 발전을 했는지 살펴 볼 수 있게 된다. 책의 첫 부분에 많은 발전으로 인해서 단순하게 생각할 구 없을 만큼 복잡하게 동작하기 때문에 최적화를 위해서는 알아야 할 께 많을 것이라고 써져 있다.

그런 면에서 이 책은 실무에서 적절히 활용할 수 있게 구성이 잘 되어 있는 듯 하다.

성능이나 자바에 대한 깊은 관심을 가지고 있는 사람이라면 책을 것을 추천 드린다.

 

Optimizing Java 자바 최적화 한빛미디어 oreilly 오렐리 (7).jpg

 

Optimizing Java 자바 최적화 한빛미디어 oreilly 오렐리 (6).jpg

 

500페이지의 두껍지 않은 책 안에 많은 내용의 핵심들을 다루고 있다. 

[자바 성능과 최적화 · JVM · 최신 하드웨어와 운영체제 · 성능테스트 유형 · 안티패턴 · 마이크로벤치마킹 · 통계 · 가비지 수집 · GC로깅 · JIT 컴파일 · 자바 언어의 성능 향상 기법 · 동시 성능 · 프로파일링 · 고성능 로깅...]

 

이 책의 필자는 바로 써먹을수 있는 최적화 팁을 콕 찍어 알려주지 않는 대신, 우수한 성능 목표를 달성하기 위해 필요한 여러 가지 단면을 종합적으로 집중해 보여주겠으니 최종 최적화를 위해서는 모든 적용원리를 차근차근 잘 파악하고 넘어가는것이 좋다고 말하고 있다. 

 

최적화를 위한 방법들을 알려주고 있는 책이기에 코드를 따라적는 책이 아닌, 백과사전처럼 정말 '읽는 책'이다.

이해하며 읽어내려가야 하는 책 답게 차분하게 정리가 잘 되어있다. 

 

필요에 따라 예제 코드를 읽어내려가며 설명해주기도 하며, 글로 표현하기 한계가 있는 부분을 도식화하여 컬러 그림으로 보여주고 있어 한층 더 이해하기 편했던것 같다. 

 

하지만 자바 초보 개발자에겐 어려운 책. 조금 더 내공을 쌓아서 자세히 읽어봐야겠다.

 

KakaoTalk_Photo_2020-09-26-23-33-56.jpeg

 

자바 최적화 책은 책에서도 언급하듯이 성능을 위한 '마법스위치, 팁, 트릭'를 제시하지 않는다. 성능이란 무엇인지 설명하고 성능 분석에 필요한 기반지식(JVM, 하드웨어, 운영체제)을 설명 한다.  GC, GC 로깅, 모니터링, 튜닝, 툴, JIT 컴파일을 설명하며 성능 측정에 필요한 부분과 최적화 포인트들을 알려준다.

 

좋았던점

번역서라는 사실을 잊고 읽을 수 있을만큼 번역이 무척 매끄럽다. 

- 각 장에 필요한 용어들을 나열하여 설명한다. 학습에 있어 용어들이 매우 중요하다고 생각하기 때문에 이부분이 참 마음에 든다. 

- 하드웨어, 운영체제와 같은 기본지식을 최적화 관점에서 필요한 지식들을 담고 있어 좋다.

- 컬..컬러다.

 

아쉬운점

- 책이 얇은 만큼 깊이보단 넓다.

> 진행에 앞서

자바는 객체지향에 있어서만큼은 오랜 역사를 지니고 있는 언어인만큼 응용서비스를 하고자 하는 많은 이들에게 관심이 되어 준 언어이다. 이 자바를 이용하여 일반적인 개발을 하는 개발자는 엄청나게 많지만, 그 자바에 대해서 성능을 고려하며 세밀한 부분까지 세심하게 살피며 모든 특성을 고려하며 개발하는 개발자는 많지 않다. 많은 부분이 알아서 동작하는 언어이기 때문에, 우리가 알지 못하는 바닥으로 내려갈 수록 그 세계는 너무도 깊고도 넓다. 이 책은 그러한 부분을 궁금해 하던 차에 접하게 된 최적화와 관련된 책이다.

 

> 책에 대한 간단한 정보

이 책에서 다루고 있는 주제와 소재들은 실로 엄청나다. 자바를 조금 깊게 들어가 본 사람은 접했을 수많은 용어들이 즐비하다. 최적화와 JVM은 기본이며, JIT컴파일, 각종 성능테스트 유형들, 안티패턴과 가비지 컬렉터, GC로깅과 List, Map, Set에 관한 이야기들. 그리고 동시성과 프로파일링 등 자바에 대해 고급으로 진입하고자 했던 사람은 반드시 들어봤을 법한 주제들이다. 이것들을 칼라로 제공하고 있다.

순록인줄 알았는데, 마코르 염소란다. 멸종위기종...ㅜ 표지는 어울린다..
테스트도 단순히 해야한다는 것을 언급하는 것을 넘어서, 각 목적에 맞는 목록을 상세히 알려준다.
자바 컬렉션의 계보를 보여준다. 그리고 컬러다.
뭔가 상당히 어려운 책이라는 것을 뒷표지만 보고도 알 수 있다.

 

 

> 괜찮은 부분


1. 컬러다.


이것은 일반 기술서적에서 보기 힘든정도의 장점이다. 이 책에서는 특성상 많은 캡쳐화면과 그래프, 소스코드 등을 다루고 있는데, 좀 더 시각적으로 한번에 와 닿을 수 있도록 도와주는 역할을 한다. 그것도 4색 제한 같은 정도가 아닌, 풀 컬러이다. 또한 단순히 현란한 컬러를 자랑하는 듯한 느낌을 주는 것이 아닌 편안한 색이라는 느낌이 들었다.


2. 다양한 고급 주제에 대해서 다뤘다.


취업 인터뷰가 아닌 이상 그렇게 깊은 관심을 가지기는 어려운 주제들이 많이 나열되어 있다. 제대로 공부하고자 마음먹는다면 이정도만 익혀도 자바 고급개발자로서 충분히 발돋움 할 수 있을 정도의 수준이라고 보여진다. 당장 무슨 키워드라도 알아야, 연구를 시작하기 위한 접근이 가능하다고 보기 때문에 이러한 고급 주제들을 많이 접하는 것은 중요하다.


3. 스터디에 적절한 구성이다.

 

1주에 한 챕터씩 학습하기에 적절한 구성이다(15강) 중간에 버퍼를 잡는다 쳐도 20주면 충분히 한 사이클로 책을 완독할 수 있다. 내용이 워낙 어렵기 때문에 완벽하게 파악하기에는 어렵다 하더라도, 함께하는 사람들 4~5명이 한 조를 이루어 스터디를 하기 위해 이 책을 선정한다면 충분히 좋은 가이드가 될 것으로 보인다.


> 아쉬운 부분


1. 수준이 상당히 높다.


단순히 최적화 하는 방법을 잘 정리해 놓은 책으로 접근하고 이 책을 접했다면 오산이다. 이 책은 최적화를 하기 위한 수많은 지식을 펼쳐놓았기 때문에 결코 쉬운 방법으로 안내하지는 않는다. 그래서 적절한 수준의 지식을 가지고 이 책을 접한다면 좌절할 가능성이 매우 높다고 보여진다. 끝까지 책장을 넘기는 것 또한 어려워보인다.


2. 원하는 내용 찾기가 쉽지 않다.

 

적절한 챕터의 배분이라고는 생각했지만, 이 챕터를 몇개의 파트로 그룹화하여 묶어서 표현한 것도 아니기 때문에, 어떤 흐름으로 이 책을 진행하고 있는지 파악이 어렵다. 또한 원하는 내용을 찾기를 원한다면 그 내용을 찾기도 어렵다. 내용의 스펙트럼이 넓은만큼 비슷한 주제로 묶어서 흘러가도록 해 놓았다면, 내가 하고자 하는 방향을 바로 찾기가 쉽지 않았을까 하는 아쉬움이 남는다.


> 개인적인 평점

- 가격: 7 / 10

- 내용: 9 / 10

- 디자인: 8 / 10

- 구성: 8 / 10

 

> 정보

저자: 벤저민 J. 에번스, 제임스 고프, 크리스 뉴랜드

옮긴이: 이일웅

출판사: 한빛미디어

가격: 39,000원

전체 페이지: 500페이지

 

** 이 리뷰는 "한빛미디어"를 통해 도서를 제공받아 작성하였습니다.

 

optimizingjava.jpg

 

너무 옛날 얘기가 많은거 아닌가? 정말 초판인가? 오래된 책을 번역한 것인가? 하는 생각이 자꾸만 들었습니다. 

머릿말과 제목은 아름다웠으나 읽고 나서 이 내용을 실무에 어떻게 적용할지 그림은 떠오르지 않았습니다. 

 

JVM에 대한 지식을 얻는 정도로 접근하면 좋을것 같아요. 

 

 

한빛미디어, 자바 최적화

 

책 소개

자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기

성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다.

성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을 이야기한다.

한빛미디어 제공: http://www.hanbit.co.kr/store/books/look.php?p_code=B7707787549

 

Java 또는 jvm 기반의 언어(jRuby, Jython 등)를 사용하는 개발자라면 혹은 Java 기반의 프레임워크(Srping, Elasticsearch 등)를 사용하고 있는 개발자라면 Jvm, GC 모니터링을 해본 경험이 한번 쯤은 있을 것 입니다.

신규 기능을을 개발하고 서비스에 배포하기 전 부하 테스트를 하면서 Jvm 성능 모니터링을 하거나, 운영 중인 시스템에 급작스런 부하가 많이 걸려 속도가 느려진다던지 혹은 최악의 경우로 시스템이 전면 장애 상황을 맞이하는 경우 모니터링을 넘어 분석 및 튜닝을 하는 경우도 생깁니다.

이 책은 자바 최적화라는 제목답게 자바 성능 최적화를 위한 jvm, GC에 대한 개념지식과 로깅과 모니터링 방법 등 전반적인 지식에 대해 잘 설명해주고 있습니다.

운영 중인 시스템이 규모가 크지 않아 "나는 아직 성능 최적화를 할 필요가 없어"라고 생각하시더라도 자바로 밥 벌이하시는 개발자라면 한 번쯤은 읽어볼만한 책인 것 같습니다.

 

지난 달 말에 한빛미디어에서 리뷰할 책으로 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)를 좀 더 깊이 이해하여 내공을 쌓고 싶은 개발자에게 이 책을 추천합니다.

 

이 책은 일단 애플리케이션을 실행 시에 어떤 일이 일어나는지~ 아주 자세히 더욱더 자세히 설명이 되어있다.

 

 

KakaoTalk_20190609_114214492.jpg

 

 

 

학부 시절에 주로 C,C++ 언어를 배우면 메모리 해제를 한 적이 있을 것이다. 아마 개발자가 직접 메모리를 관리를 하면서 코딩했던 기억이.

지금은 자바로 먹고 살지만 메모리 등 전적으로 자바의 가비지 컬렉션을 믿고 코딩을 했던 거 같다.

 

이책은 전반적으로 클래스 로더, 자바 컴파일러가 바이트 코드를 어떻게 처리하는지?

 

그리고 가비지수집에 대한 기초를 좀 더 심화 학습할 수 있을 것이다.

그리고 다양한 컴파일러와 특히 재미있게 읽었던 부분은 성능 테스트 부분

그리고 이해를 돕기 위한 그림 및 팁으로 설명이 친절하게 되었던 거 같다.

 

또한 유명한 개발자들의 블로그 링크 또한 있으므로 참조하면 좋을 것 같다.

 

평소에는 접하지 못했던 내용으로 가득하였다.

 

확실히 이 책은 나에게는 좀 아주 어려웠다.

 

하지만 그래도 요즘 아무리 하드웨어 및 클라우드 베이스로 개발을 한다고 하더라도

오히려 이런 기본을 더욱더 심화적로 학습을 해야 할 때가 올 것이다.

 

아 그리고 이책은 개발자들의 명언 같은 해당 책 속의 내용을 선대 개발자들이 이야기한 짤막한 명언으로 더욱더 이해심을 돕는다.

 

이 책은 나중에 연말 다시 한번 정독을 해야 할 것이다.

 

<이 책의 리뷰는 한빛미디어 '나는 리뷰어다'로 부터 책을 지원받아 작성된 글입니다>

 

이번 시간에는 자바 애플리케이션의 성능을 최적화하는 방법을 소개하는 한빛미디어의 신간인 <Optimizing Java: 자바 최적화>에 대해 소개합니다. 자바 애플리케이션의 성능 최적화는 어려운 주제이며, 실제로 관련 자료를 찾아 시스템에 적용하기에는 많은 노력이 필요합니다.

실제 애플리케이션 성능 튜닝을 시도하거나 수행했었다면, 다양한 시행착오를 경험했을 것입니다. 또한, 애플리케이션 최적화는 쉬운 분야가 아닙니다. <Optimizing Java>는 이 분야에서 필요한 지식을 잘 정리해 놓은 매력적인 책입니다. 

 

이 책에서 다루는 내용은?

처음 이 책을 만났을 때의 첫 느낌은 인상적이었습니다.  꽤 어려운 주제를 다루고 있는 책이어서 전통적인 느낌으로 편집되어 있을 것으로 판단했는데, 주요 요소마다 다양한 컬러를 활용하여 독자가 이해하기 쉬우면서도 가독성이 훌륭한 느낌을 받았습니다. 

이 책은 첫인상뿐만 아니라, 이 책에 담긴 콘텐츠 역시 훌륭합니다. 특히, 국내에서는 경험하기 어려운 심오한 주제를 다룬 책이니 많은 사람의 관심을 가졌던 책이었습니다. 다만 한 가지 우려스러웠던 점은 <Optimizing Java>는 번역서입니다. 이 책은 어려운 주제라서 다소 걱정했었는데, 역자는 이 어려운 내용을 매력적으로 풀어냈습니다. 

<Optimizing Java>는 성능 최적화에 필요한 기본 지식을 요약하고, 애플리케이션 최적화를 진행할 때, 필요한 다양한 도구를 소개합니다. 이뿐만 아니라 성능 테스트에서 사용하는 다양한 패턴과 안티 패턴을 소개해 성능 최적화를 진행하며 실수할 수 있는 부분을 최소화할 수 있을 것으로 생각합니다.

이 책에서 아쉬운 점은 Java Virtual Machine(JVM), Garbage Collector(GC), 프로파일링 등을 소개하기에 500페이지의 지면은 부족하다고 생각합니다. 다만, 이 책을 지침서로 삼아 주제별로 깊이 있게 공부할 수 있는 발판으로 활용한다면 <Optimizing Java>에서 다루는 내용은 여러분에게 매력적으로 다가올 것입니다.

마지막 장에서는 자바 9 이후의 이야기를 다루는데, 필자가 매력적으로 바라보는 다양한 서브 프로젝트들을 소개하고 있어 신선했습니다. 비록 지면 관계상 각 프로젝트에 관해 설명이 충분하진 않았지만, 주제별로 흥미를 느낀 독자들에게 신선함을 알려주기에는 충분하다고 생각합니다.

 

마치면서

<Optimizing Java>는 자바 애플리케이션 튜닝을 위한 지식뿐만 아니라, 다양한 팁과 트릭을 제공하여 실용적인 측면을 강화한 책입니다. 자바는 국내에서 가장 많이 사용하는 프로그래밍 언어이고 많은 사랑을 받은 만큼 다른 프로그래밍 언어보다 시중에 출간된 서적이 매우 많고 다양합니다. 그렇지만 이 책만큼 자바 성능 최적화에 대해 소개하고 있는 책은 찾아보기 어렵다고 생각합니다. 이 분야에 대해 학습해야 한다면, 꼭 한 번 읽고 검토하길 바랍니다. 많은 도움이 될 것으로 확신합니다.

 

 

책소개

 

 

자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기 

 

성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다.

 

성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을 이야기한다.

 

출처 : http://www.hanbit.co.kr/store/books/look.php?p_code=B7707787549

 

 

자바 최적화

성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고급 자바 개발자에게 정량적이고 검증 가능한 접근 방식으로 자바 애플리케이션 성능을 튜닝하는 방법을 알려준다. 성능 튜닝은 원하는 결과를 정의하고 결정하는 과정이다. 자바 성능에 관한 대부분 자료는 자바 가상 머신 이론과 내부의 모습을 살펴보는 데 그치지만, 이 책은 레시피, 팁/트릭, 알고리즘 등 다양한 부문을 살펴보며 성능 튜닝의 실용적 측면을

www.hanbit.co.kr

 

 

 

 

이번에 리뷰하게 된 책은

'자바 최적화 - 벤저민 J. 에번스 , 제임스 고프 , 크리스 뉴랜드' 입니다.

 

프로젝트 진행 시에 주로 자바를 활용하는데, 최적화는 없어서는 안되는 필수적인 부분이라고 할 수 있습니다.

다만, 처음부터 최적화까지는 신경쓸 수 없겠지만 한번 쯤은 꼭 공부하면 좋을 것 같다는 생각이 들었습니다.

 

 

 

 

 

 

여러 목차가 있었지만, 가장 눈에 띄는 목차는 챕터11. 자바 언어의 성능 향상 기법이었습니다.

앞의 내용들은 주로 JVM, 가비지 컬렉션 등에 대해서 다루지만 실제로 자주 쓰는 컬렉션, List, Set, Map 최적화가 정말 중요한 부분이기 때문입니다.

 

 

 

 

책을 읽다보면

 

'모든 성능 문제가 그렇듯이, 어떤 기술이건 일장일단이 있으니 자신의 코드를 분석하듯이 꼼꼼하게, 데이터 중심으로 접근하세요.' 

 

라는 문구가 등장합니다. 책 내용 전체를 하나로 요약하는 문장이 아닐까 싶습니다.

많은 최적화 방법이 있겠지만 가장 중요한 부분은 데이터의 관점에서 생각하는 것이 중요하기 때문이죠.

 

 

어떤 방식으로 최적화를 해야하는지 공부해보고 싶은 분들께 권하고 싶은 책입니다.

자바에 대해서 어느정도 공부를 하고, 실무에 사용하시는 분들이 읽을 만한 책인것 같네요.

 

<이 책의 리뷰는 한빛미디어 '나는 리뷰어다'로 부터 책을 지원받아 작성된 글입니다.>

 

20190607_230800.jpg

 

프로그래밍 패러다임이 빠르게 변하고 있는 현재 JAVA 이에 맞춰 빠르게 변하고 있습니다. 

 

새로운 개념, 기능들이 빠르게 추가되고 있지만 JAVA 사용하기 위해서는 JVM, GC, 프로파일링 핵심적인 내용들을 알고 있어야 합니다.

 

막연하게 목표로 했던 성능 향상을 어떻게 분류하고 측정해야 하는지, JVM에서 어떤 일이 일어나고 있는지, 병목 구간을 어떻게 찾고 수정해야 하는지 다양한 정보들이 책에 정리되어 있습니다.

 

JAVA 오랫동안 많은 사람들에게 사용되어 왔습니다. 그래서 많은 정보들이 주변에 있지만 동안 변경된 내용을 담지 못하는 잘못된 정보도 많이 있습니다. 최근 JAVA 기준으로 많은 중고급 내용들을 한번에 담고 있기에 책은 의미가 있습니다.

 

JVM, 성능, GC, 컴파일, 프로파일링 복잡한 내용들을 500 페이지 정도에 담고 있어 설명이 자세하거나 친절하지 않습니다. 하지만 주제들의 중요한 내용만 담고 있어 어떤 부분을 찾아보고 공부해야 하는지 알려주는 길잡이 같은 책이라고 생각합니다.

 

JAVA 어느 정도 경험이 있는 중급 이상 개발자 분들에게 추천합니다.

 

IMG_1486.jpg

 

요즘 내 관심사는 서비스 성능 개선, 안정화이다. 
대량의 데이터를 처리하면서 트래픽이 몰리는 순간에 시스템이 불안정하다면 서비스의 신뢰가 떨어질 수 있고, 이는 회사의 매출에 직결될 수 있다. 
고객 경험은 서비스가 단 한 번 실 수해도 안 좋게 받아들일 수 있다.
 
자바로 서비스하는 중이 자바 튜닝에 관한 자료들을 찾아보아도 인터넷의 자료는 매우 편협하고 파편화된 자료라 책을 찾아보았지만 지금 흐름에 맞지 않는 오래된 책들뿐이었다. 그런 책이라도 사볼까 하던 참에 자바 최적화 책이 새롭게 나와 너무너무 정말 반가웠다. 
 
자바 개발자라면 모를 수 없는 JVM, 가비지 수집/로깅/튜닝, 성능 테스트 및 안티 패턴(많이 사용하지만 지양해야 할 패턴) 등 정말 깨알 같은 무엇 하나 버릴 것이 없는 목차이다. 
원래 성능이란 주제 자체가 광범위하기에 다양한 토픽들을 집약한듯하지만, 이 책을 시발점 삼아 자바 튜닝에 입문하면 좋을 것 같다. 
 
더불어 그동안 문법 위주의 개발만 해왔던 나와 같은 개발자들은- 
자바 해부학에 입문해 미시적인 세계에 관심을 가지게 할 흥미로운 내용이 가득하다. 바이트코드, JVM, 가비지 수집기 등의 고급 주제는 시중에 출간된 대부분의 자바 도서에서 거의 다루지 않는 내용이므로 자바 기본기를 익힌 중/고급자 개발자분들께는 희소성의 가치가 높은 책이다. (옮긴이 이일우) 



IMG_1490.jpg

 


내 마음이 읽힌 것 같다. 
다급함에 영어 사전을 찾아보듯 뒷장부터 읽어보려 했는데, 적용 원리를 잘 모르고는 어떤 기법도 득보다는 실이 더 많을 것이라는 조언을 해준다. 
 
- JVM을 더 빨리 작동시키는 마법의 스위치 같은 건 없습니다. 
- 자바를 더 빨리 실행하게 만드는 팁, 트릭은 없습니다.
- 여러분이 못 보게 꼭꼭 숨겨둔 비밀 알고리즘 같은 것도 없습니다. 

요행을 바라지 말고 차근히 원리를 익히라는 선배님의 말씀 같다. 


IMG_1494.jpg

 


깔끔하게 정리된 그림은 이해를 돕는다. 
글로만 보다 보면 뇌리에 잘 남지 않는데, 도식화된 내용은 기억에 잘 남고 직접 그려가며 공부하다 보면 장기 기억으로 전환되기에도 유리하다. 

 

IMG_1498.jpg

 

 
현상에 대한 이해가 부족한 채 인터넷에 난무하는 파편화된 정보에 기대 
의미도 모른 채 설정 바꾸기를 했던 지난날들이 어찌 여기 이렇게 적나라하게 쓰여있는 것인지..

저자는 마치 내 옆에서 나를 지켜봤던 걸까.. 부끄러운 내 모습이 그대로 쓰여 있어 놀랬다. 
겪을 수 있는 현상에 대해 자세히 기술하고 있고 어떻게 진단하는지 알려주고 있어 이 챕터에서는 레시피 북 같은 느낌이 들었다. 
 
 

IMG_1501.jpg

 

역시 아직은 코드로 보는 게 심신 안정이 된다.
테스트해볼 수 있는 예제 코드도 함께 있으니 직접 디버깅도 해볼 수 있어 이점도 이 책의 메리트인 것 같다. 
 
일부 번역서들은 번역이 매끄럽지 못해 책을 읽는데 불편하여 공부에 종종 방해가 되지만
자바 최적화 책은 번역이 매우 자연스럽고 한국식 언어문화를 잘 녹여서 마치 처음부터 한국 저자가 쓴 책일 정도라는 느낌까지 있었다. 
이 책은 자바 초급차가 보기보다는 중급 / 고급자에게 추천하고 싶은 책이기에 어느 정도 자바에 대한 이해가 있는 개발자가 보면 좋은 책이다. 
 
이제 나도 그동안 기도하듯 옵션을 수정했던 지난날을 딛고 자바 성능의 세계로 뛰어들 수 있게 되었다. 

자바 최적화에 큰 관심이 있지는 않지만, 그 안이 어떤 형태로 움직이는 지는 관심이 많다.

예전에는 Unsafe클래스라던가, ASM이라던가 정말 주위 사람들이 쓸모없는 기술이라 자신하는 것들을 많이 탐했었다.

그것들을 잘 이해하지 못하면서 탐했던 이유는 역시나... 재미라는 것이다.

 

내가 하는 일이 무엇인지 제대로 알고 싶은 마음 때문이다. 

 

이 책이 나의 그런 마음을 어느 정도는 정리되게 해준다. 

 

모든 내용을 다 읽지는 못했지만, 이런 최적화 방법에 대한 이야기를 여타 다른 선임 개발자들에게 들어본 적도 없고 대부분 경시하는 내용이기 때문에.

이 책은 나의 배고픔에 적당한 배부름을 줄 거라고 생각한다.

 

이 책은 확실하게 알려준다. 무엇이 어떻게 돌아가는지, 어떻게 확인하는지, 이해가 안되는 것같으면 조용히 그림을 보여준다. 게다가 컬러로!

컬러 그림이 들어간 자바책이라니, 그건 입문서에나 있는 것이다.

꽤나 사람들에게 생소한 이야기를 좀 더 재미있는 놀이처럼 보이게 하려는 저자의 마음이 들어 있는게 아닐까 생각된다.

 

맞다 이것은 자바 최적화 입문서다. 그리고 최적화를 할 필요가 없더라도, 최적화를 하는 방법을 읽다보면, 내가 자바를 더 잘 이해하게 되는 것 같아진다.

그리고 꼭 이런 내용이 자바에만 국한될까. 자바와 비슷한 언어도 비슷한 방식으로 최적화 할 것이다. 혹은 JVM을 사용하는 언어도 비슷한 방식으로 돌아갈 것이다.

 

이 책을 구매하기 전에 꼭 알아야 할 점이 있다.

1. 떠먹여 주는 책은 아니다.

위 글에서 컬러그림 같은 것들이 있다고 아주 쉽게 설명되어 있다고 생각하면 안된다. 이 내용은 쉬운 내용이 아니다. 그리고 그것을 어린아이 가르치듯 설명해서는 안된다. 이 주제는 진지한 주제이며, 쉽게 흥얼흥얼 거리면서 읽을 수 있는 책의 성질을 가지고 있지 않다.

 

2. 자습서가 아니라 사전이다.

이 책은 1장을 읽고 2장을 읽고... 뭐 이런 순서가 있는 책이 아니다. 필요할 때 차례를 보고 나에게 필요해 보이는 몇 개를 메뉴처럼 선택해서 읽는 것이 가능하다. JVM이라는 주제는 JAVA라는 언어를 공부하는 것과 다른 것일까? 자바라는 언어를 배우듯이 만들어졌으면 더 좋았을 것 같다는 생각이 든다.

 

이 정도가 나의 사견이다. 누누히 말하지만 이 책은 떠먹여 주는 책이 아니다. 기어이 떠먹으려는 사람들을 위한 책이다.

이 책은 자바개발자에게 유용하다. 자바 개발자로서 삶의 여분의 시간이 있다면 이 책을 읽기 딱 좋은 시간일 것이다.

 

평소 프로그램을 개발할 때, 기능 구현이 모두 완료된 후 반드시 리팩토링 과정을 거치곤 합니다. 디버깅 할 때 삽입되었던 코드 또는 레거시 코드들을 정리하기 위해서죠. 하지만 '최적화' 하여 프로그램의 성능을 향상시키기엔 실력도, 개념도 많이 부족했습니다. 섣불리 최적화를 하겠다고 나섰다가 다시 코드 버전을 되돌렸던 적도 있어서, 이후로 최적화를 시도할 엄두를 내지 못했습니다. 또한 자바 개념서들은 많이 출판되어 있지만 저처럼 최적화에 대해 잘 모르는 개발자들이 볼 수 있는 국문 서적은 쉽게 찾아볼 수 없었습니다. 그러던 중, 이번에 한빛미디어에서 자바 최적화 번역서를 펴냈기에 바로 읽어보았습니다.

 

[이 책은]

이 책은 저명한 자바 개발자들이 직접 펴내고, 수 년 간 자바/스칼라 개발자께서 옮긴 믿을 수 있는 번역서입니다.

어떤 번역서들은 영어 단어를 읽은 발음을 국어로 옮겨 적어 쉽게 읽히지 않지만 이 책은 자바 용어를 제외하고는 매끄럽게 읽혀 좋았습니다.

먼저 NOTE 부분은 본문에 보충할 부분이나 본문과 연관된 팁들이 적혀 있는 란입니다.

책을 읽으며 학습할 때 쉬어가는 부분도 되어 주고, 여러 꿀팁들도 얻을 수 있습니다.

개인적으로는 관련 정보를 얻을 때 유용하게 사용하고 있는 부분입니다.



개념을 가시화해 준 부분은 수명 주기나 코드 작동 순서, 작성한 코드가 어떤 순서로 어디에 영향을 주며 실행되는지를 가시화해주어 훨씬 이해하기 편했습니다.

추가로, 사실 이번 책에서 좋았던 점은 과하지 않은 컬러였습니다.

제가 접했던 개발 도서들은 보통 흑백이었는데 이 책은 컬러가 입혀져 있어 좀 더 강조되는 부분을 확실히 알 수 있었습니다.

 

하드웨어 메모리 지원과 같은 부가 정보를 표로 잘 정리해 두어 내용을 한눈에 파악할 수 있게 된 점이 좋았습니다. 

여러 줄의 줄글보다도 위의 모식도나 표로 간략하게 표현된 것이 머릿속에 이미지로 확 들어오는 듯한 느낌입니다.

또한 번역한 단어 또는 용어를 각주와 주석으로 한번 더 기재해 주어 정확한 표현과 용어를 숙지할 수 있습니다.

 

성능 테스트 관련된 부분은 증상, 현실, 진단, 처방 등의 단계를 눈에 띄게 나눠 두어 이해하기 쉬웠습니다.

어떤 순서로 현상을 숙지하고, 어떻게 해결해야 하는지 아이디어를 얻을 수 있었습니다.


[책을 덮으며]

책을 정독한 후 코드 최적화로 프로그램의 메모리 사용량, 구동 속도를 개선할 수 있다는 자신감이 생겼습니다.

자바 기본 개념에서 파생된 최적화 방법이 잘 설명되어 있어 이해하기 편했습니다.

또한 여는 말에도 썼듯이 번역서임에도 불구하고 문장이 매끄러워 자연스럽게 읽어나갈 수 있었습니다.

이 책은 개발을 시작한 지 얼마 되지 않은 개발자보다는 자바라는 언어에 대한 기본 지식이 있고 이를 이용해 개발을 해 본 개발자들을 위한 도서라고 생각됩니다. 기본 개념을 알고 있어야 이해할 수 있는 내용들이 일부 있었고, 책의 난이도가 아주 쉽고 내용이 단순한 편은 아니었다고 생각합니다. 


결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
자바 최적화
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
자바 최적화
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
자바 최적화
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실