본문 바로가기

도서 소개

자바 잘 읽는 법

자바 버그와 성능 문제를 찾는 프로파일링, 디버깅, 로깅 기법

 

실무에서 개발자는 기존 코드를 읽고 이해하는 데 가장 많은 시간을 쓴다. 이 책은 익숙하지 않은 자바 코드를 파악하는 시간을 줄여주는 실용적인 기법들을 소개한다. 프로파일링과 디버깅, 나아가 JVM 애플리케이션이 실제로 어떻게 작동하는지 이해함으로써 디펜던시나 충돌의 근본 원인을 찾고, 예상치 못한 결과를 해석할 수 있다. 디버깅의 기초부터 마이크로서비스 아키텍처에서 문제를 찾기 위한 고급 방법까지, 딱딱하지 않은 그림과 흥미로운 실제 사례와 함께 자바 코드를 ‘잘 읽는 법’을 알려준다.

 

도서구매 사이트(가나다순)

  [교보문고]  [도서11번가]  [알라딘]  [예스이십사]  [인터파크]  [쿠팡

 

출판사 제이펍
저작권사 Manning
원서명 Troubleshooting Java (9781617299773)
도서명 자바 잘 읽는 법
부제 자바 코드를 이해하고, 디버깅하고, 최적화하는 요령
지은이 라우렌치우 스필커
옮긴이 이일웅
감수자 (없음)
시리즈 (없음)
출판일 2024. 05. 09
페이지 340쪽
판 형 46배판변형(188*245*16.8)
제 본 무선(soft cover)
정 가 28,000원
ISBN 979-11-93926-20-8 (93000)
키워드 JVM, 데드락, 스레드 덤프, 메모리 누수, 로깅, 디버깅, 프로파일링, 서비스 지향, 마이크로서비스, 트러블슈팅
분 야 프로그래밍 언어 / 자바

 

관련 사이트
아마존 도서 페이지
저작권사 도서 페이지

 

관련 시리즈

■ (없음)

 

관련 포스트

2024.04.17 - [출간 전 책 소식] - 개발자에게 가장 중요한 코드 독해력을 올리는 프로파일링, 디버깅, 로깅 기법

 

관련 도서

■ (없음)

 

관련 파일 다운로드

■ (없음)

 

강의 보조 자료(교재로 채택하신 분들은 메일(textbook@jpub.kr)을 보내주시면 다음 자료를 보내드립니다.)
■ 본문의 그림과 표

 

미리보기(옮긴이 머리말, 베타리더 후기, 시작하며, 감사의 글, 이 책에 대하여, 표지에 대하여, 1/2/3/4장 일부)

 

정오표 페이지
■ (등록되는 대로 링크를 걸겠습니다.)

 

도서구매 사이트(가나다순)

  [교보문고]  [도서11번가]  [알라딘]  [예스이십사]  [인터파크]  [쿠팡

 

도서 소개

코드 독해력을 높여 JVM 코드를 이해하고 디버깅하고 최적화하는 요령

 

커리어가 쌓일수록 코드를 작성하는 시간보다 코드를 읽는 시간이 훨씬 더 길어진다. 그 긴 시간을 효율적으로 쓰기 위한 코드 조사 기법을 다루는 게 바로 이 책이다. 디버깅이나 로깅의 기초부터 고급 프로파일링 기법과 JVM 애플리케이션의 작동 원리까지, 개발자 친화적인 시나리오 중심으로 트러블슈팅을 설명한다는 점이 큰 장점이다.

 

1부는 코드베이스를 파악하기 위한 조사 기법의 기초를 다룬다. 2~4장에서는 디버깅을 중심으로 간단히 브레이크포인트를 찍는 것부터 원격 디버깅까지 설명하고, 5장은 로그를 이용해 코드 구현과 관련된 필수 세부 정보를 조사하는 방법을 살펴본다.

 

2부는 프레임워크가 큰 비중을 차지하는 오늘날 개발에서 프로파일링이 얼마나 유용할 수 있는지 잘 보여준다. , VisualVM과 JProfiler 같은 프로파일러 도구를 이용한 6장에서는 CPU와 메모리 사용량을 분석하는 방법을 다루고, 7장에서는 레이턴시 문제를 조사하는 방법을 다룬다. 8, 9장에서는 멀티스레드 아키텍처를 자세히 파헤치고, 10장에서는 스레드 덤프를, 11장에서는 힙 덤프를 생성하여 메모리 문제를 진단하는 방법을 살펴본다.

 

3부 12장은 단일 앱이 아닌 여러 앱으로 이루어진 대규모 엔터프라이즈 시스템에서 문제를 조사하는 방법을 설명한다. 각 앱이 서로 ‘소통’하는 방식, 앱이 배포된 환경이 미치는 영향, 구현 시 고려 사항 등을 살펴본다. 끝으로 부록에서는 자바 개발자들에게 실질적인 도움이 되는 자바 스레드와 메모리 관리 체계를 정말로 자세히 설명한다.

 

JVM 애플리케이션이 실제로 어떻게 작동하는지 이해하면 문제의 근본 원인을 찾을 수 있다. 디버깅과 로깅을 올바르게 익힐 수 있는 것은 물론, 마이크로서비스 아키텍처에서 문제를 찾기 위한 고급 기법까지 포괄적으로 다루는, 흔치 않은 책이다.

 

주요 내용

  • 처음 본 코드가 어떤 기능을 하는지 파악하기
  • 코드 로직 문제 노출하기
  • 힙 덤프를 평가하여 메모리 누수 찾기
  • CPU 사용량을 모니터링하여 실행 최적화하기
  • 스레드 덤프를 사용하여 교착 상태 찾고 해결하기
  • 서비스 지향/마이크로서비스 시스템 이해하기
  • 로깅을 제대로 사용하여 자바 앱 실행을 깊이 이해하기
  • 자바 디버거를 효율적으로 사용하기

지은이 소개

라우렌치우 스필커(Laurențiu Spilcă)

엔다바(Endava)의 개발 리드로서 유럽, 미국, 아시아 등 여러 지역에서 다수의 프로젝트를 리드하고 컨설팅하는 일을 맡고 있다. 2007년부터 소프트웨어 개발 분야에 종사했다. 고품질의 소프트웨어를 제공하는 것뿐만 아니라 지식을 공유하고 타인의 기술 향상을 돕는 일도 중요하다고 믿고, 이러한 신념을 바탕으로 자바 기술 관련 강좌를 기획하며 각종 프레젠테이션과 워크숍을 진행하고 있다. 다른 저서로는 《스프링 시큐리티 인 액션》(위키북스, 2022)과 《Spring Start Here》(Manning, 2021)가 있다.

 

옮긴이 소개

이일웅

20년 가까이 국내외 엔터프라이즈 현장에서 자바 전문 풀스택 개발자, 소프트웨어 아키텍트로 프로젝트에 참여해왔다. 어느덧 50대를 바라보는 중년 아재가 되었지만 아직도 기술이 궁금한 엔지니어다. 20여 종의 IT 전문서를 번역하며 동료, 후배 개발자들과 지식과 경험을 나누는 일에도 힘쓰고 있다. 집에서는 세 여인의 분에 넘치는 사랑을 받고 사는, 세상에서 제일 행복한 딸바보 아빠다.

 

차례

옮긴이 머리말 x

베타리더 후기 xi

시작하며 xiv

감사의 글 xvi

이 책에 대하여 xviii

표지에 대하여 xxi

 

PART I 트러블슈팅 기본 테크닉

 

CHAPTER 1 앱에서 모호한 부분 밝히기 3

1.1 앱을 더 쉽게 이해하는 방법 4

1.2 일반적인 코드 조사 시나리오 8

__1.2.1 예상과 다른 아웃풋의 원인을 밝힌다 9

__1.2.2 특정 기술을 습득한다 14

__1.2.3 속도 저하 이유를 알아낸다 15

__1.2.4 앱 크래시가 발생하는 이유를 이해한다 16

1.3 이 책에서 배울 내용 19

요약 20

 

더보기

CHAPTER 2 디버깅 기법으로 앱 로직 이해하기 21

2.1 코드 분석만으로는 불충분한 경우 23

2.2 디버거를 이용한 코드 조사 26

__2.2.1 실행 스택 트레이스란 무엇이고 어떻게 사용해야 할까? 31

__2.2.2 디버거로 코드 탐색하기 36

2.3 디버거로도 충분하지 않다면 43

요약 45

 

CHAPTER 3 고급 디버깅 기법으로 문제의 근본 원인 찾기 47

3.1 조건부 브레이크포인트로 조사 시간 최소화 48

3.2 실행을 중단시키지 않고도 브레이크포인트를 사용하는 방법 52

3.3 조사 시나리오를 동적으로 변경하기 55

3.4 조사 케이스를 되감기 58

요약 64

 

CHAPTER 4 원격 앱 디버깅 65

4.1 원격 디버깅이란? 66

4.2 원격 환경에서 조사하기 69

__4.2.1 시나리오 70

__4.2.2 원격 환경의 문제 조사하기 71

요약 81

 

CHAPTER 5 로그를 활용하여 앱 동작 감시하기 83

5.1 로그를 이용하여 조사하기 87

__5.1.1 로그에 기록된 예외 식별 88

__5.1.2 예외 스택 트레이스로 어디서 메서드를 호출했는지 식별 89

__5.1.3 멀티스레드 아키텍처에서 커맨드의 실행 시간 측정 91

__5.1.4 멀티스레드 아키텍처에서 커맨드 실행 문제 조사 92

5.2 로깅을 구현하는 방법 94

__5.2.1 로그 메시지 저장 94

__5.2.2 로깅 레벨을 정의하고 로깅 프레임워크를 사용하는 방법 95

__5.2.3 로깅 때문에 발생하는 문제와 예방 조치 102

5.3 로그와 원격 디버깅 107

요약 108

 

PART II 트러블슈팅 고급 테크닉

 

CHAPTER 6 프로파일링 기법으로 리소스 사용 문제 파악하기 111

6.1 프로파일러는 어떤 경우에 유용할까? 112

__6.1.1 비정상적인 리소스 사용량 식별 112

__6.1.2 실행되는 코드 찾기 113

__6.1.3 앱 실행 속도가 느려지는 원인을 파악 114

6.2 프로파일러 사용 방법 114

__6.2.1 VisualVM 설치 및 구성 115

__6.2.2 CPU와 메모리 사용량 관찰 117

__6.2.3 메모리 누수 현상 식별 127

요약 132

 

CHAPTER 7 프로파일링 기법으로 숨겨진 이슈 찾기 133

7.1 샘플링으로 실행되는 코드 관찰 134

7.2 프로파일링으로 메서드의 실행 횟수 파악 142

7.3 프로파일러로 앱이 실제로 실행하는 SQL 쿼리 파악 144

__7.3.1 프로파일러로 프레임워크에서 생성되지 않은 SQL 쿼리 식별 144

__7.3.2 프로파일러로 프레임워크에서 생성된 SQL 쿼리 식별 150

__7.3.3 프로파일러로 프로그램에서 생성된 SQL 쿼리 식별 153

요약 157

 

CHAPTER 8 프로파일링한 데이터에 고급 시각화 도구 적용하기 159

8.1 JDBC 접속 문제 감지 160

8.2 호출 그래프를 보고 앱의 코드 설계 파악 173

8.3 플레임 그래프를 그려 성능 문제 밝히기 175

8.4 NoSQL DB에서의 쿼리 분석 179

요약 180

 

CHAPTER 9 멀티스레드 아키텍처의 락 문제 조사하기 183

9.1 스레드 락 모니터링 184

9.2 스레드 락 분석 189

9.3 대기 중인 스레드 분석 198

요약 205

 

CHAPTER 10 스레드 덤프로 데드락 문제 조사하기 207

10.1 스레드 덤프 수집하기 208

__10.1.1 프로파일러로 스레드 덤프 수집 210

__10.1.2 커맨드 라인에서 스레드 덤프 수집 212

10.2 스레드 덤프를 읽는 방법 215

__10.2.1 일반 텍스트 스레드 덤프 216

__10.2.2 도구를 활용하여 스레드 덤프 읽기 222

요약 225

 

CHAPTER 11 앱 실행 중 메모리 관련 이슈 찾기 227

11.1 샘플링과 프로파일링으로 메모리 이슈 진단 228

11.2 힙 덤프를 수집하여 메모리 누수가 발생하는 곳 찾기 235

__11.2.1 힙 덤프 수집 236

__11.2.2 힙 덤프 읽는 방법 240

__11.2.3 OQL 콘솔에서 힙 덤프 쿼리 245

요약 251

 

PART III 대규모 시스템의 트러블슈팅

 

CHAPTER 12 대규모 시스템에 배포된 앱의 동작 조사하기 255

12.1 서비스 간 통신 문제 조사 256

__12.1.1 HTTP 서버 프로브로 HTTP 요청 관찰 257

__12.1.2 HTTP 클라이언트 프로브로 앱이 보낸 HTTP 요청 관찰 259

__12.1.3 소켓의 로 레벨 이벤트 조사 261

12.2 통합 로그 모니터링의 중요성 263

12.3 배포 도구를 조사에 활용하는 법 270

__12.3.1 결함 주입으로 재현하기 곤란한 문제를 비슷하게 모방 272

__12.3.2 미러링 기법을 테스트 및 에러 감지에 활용 273

요약 274

 

APPENDIX A 이 책에서 사용한 도구 275

 

APPENDIX B 프로젝트 열기 277

 

APPENDIX C 기타 참고 도서 279

 

APPENDIX D 자바 스레드 이해 281

D.1 스레드란 무엇인가? 282

D.2 스레드의 수명 주기 284

D.3 스레드 동기화 286

__D.3.1 동기화 블록 286

__D.3.2 wait(), notify(), notifyAll() 사용 289

__D.3.3 스레드 조인 290

__D.3.4 정해진 시간 동안 스레드 차단 291

__D.3.5 스레드와 블로킹 객체 동기화하기 292

D.4 멀티스레드 아키텍처의 일반적인 문제 293

__D.4.1 경쟁 상태 293

__D.4.2 데드락 294

__D.4.3 리브락 295

__D.4.4 기아 296

D.5 추가 자료 297

 

APPENDIX E 자바 메모리 관리 체계 299

E.1 JVM이 앱의 메모리를 구성하는 방법 300

E.2 스레드가 로컬 데이터를 저장하는 데 사용하는 스택 302

E.3 앱이 객체 인스턴스를 저장하는 데 사용하는 힙 308

E.4 데이터 유형을 저장하기 위한 메타스페이스 메모리 위치 311

 

찾아보기 313

 

제이펍 소식 더 보기(제이펍의 소통 채널에서 더욱 다양한 소식을 확인하세요!)

  포스트  유튜브  인스타그램  트위터  페이스북