자바 잘 읽는 법 : 자바 코드를 이해하고, 디버깅하고, 최적화하는 요령

자바 잘 읽는 법 : 자바 코드를 이해하고, 디버깅하고, 최적화하는 요령

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

저자

로렌티우스필카

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

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

목차

옮긴이머리말x
베타리더후기xi
시작하며xiv
감사의글xvi
이책에대하여xviii
표지에대하여xxi

PARTI트러블슈팅기본테크닉

CHAPTER1앱에서모호한부분밝히기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

CHAPTER2디버깅기법으로앱로직이해하기21
2.1코드분석만으로는불충분한경우23
2.2디버거를이용한코드조사26
__2.2.1실행스택트레이스란무엇이고어떻게사용해야할까?31
__2.2.2디버거로코드탐색하기36
2.3디버거로도충분하지않다면43
요약45

CHAPTER3고급디버깅기법으로문제의근본원인찾기47
3.1조건부브레이크포인트로조사시간최소화48
3.2실행을중단시키지않고도브레이크포인트를사용하는방법52
3.3조사시나리오를동적으로변경하기55
3.4조사케이스를되감기58
요약64

CHAPTER4원격앱디버깅65
4.1원격디버깅이란?66
4.2원격환경에서조사하기69
__4.2.1시나리오70
__4.2.2원격환경의문제조사하기71
요약81

CHAPTER5로그를활용하여앱동작감시하기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

PARTII트러블슈팅고급테크닉

CHAPTER6프로파일링기법으로리소스사용문제파악하기111
6.1프로파일러는어떤경우에유용할까?112
__6.1.1비정상적인리소스사용량식별112
__6.1.2실행되는코드찾기113
__6.1.3앱실행속도가느려지는원인을파악114
6.2프로파일러사용방법114
__6.2.1VisualVM설치및구성115
__6.2.2CPU와메모리사용량관찰117
__6.2.3메모리누수현상식별127
요약132

CHAPTER7프로파일링기법으로숨겨진이슈찾기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

CHAPTER8프로파일링한데이터에고급시각화도구적용하기159
8.1JDBC접속문제감지160
8.2호출그래프를보고앱의코드설계파악173
8.3플레임그래프를그려성능문제밝히기175
8.4NoSQLDB에서의쿼리분석179
요약180

CHAPTER9멀티스레드아키텍처의락문제조사하기183
9.1스레드락모니터링184
9.2스레드락분석189
9.3대기중인스레드분석198
요약205

CHAPTER10스레드덤프로데드락문제조사하기207
10.1스레드덤프수집하기208
__10.1.1프로파일러로스레드덤프수집210
__10.1.2커맨드라인에서스레드덤프수집212
10.2스레드덤프를읽는방법215
__10.2.1일반텍스트스레드덤프216
__10.2.2도구를활용하여스레드덤프읽기222
요약225

CHAPTER11앱실행중메모리관련이슈찾기227
11.1샘플링과프로파일링으로메모리이슈진단228
11.2힙덤프를수집하여메모리누수가발생하는곳찾기235
__11.2.1힙덤프수집236
__11.2.2힙덤프읽는방법240
__11.2.3OQL콘솔에서힙덤프쿼리245
요약251

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

CHAPTER12대규모시스템에배포된앱의동작조사하기255
12.1서비스간통신문제조사256
__12.1.1HTTP서버프로브로HTTP요청관찰257
__12.1.2HTTP클라이언트프로브로앱이보낸HTTP요청관찰259
__12.1.3소켓의로레벨이벤트조사261
12.2통합로그모니터링의중요성263
12.3배포도구를조사에활용하는법270
__12.3.1결함주입으로재현하기곤란한문제를비슷하게모방272
__12.3.2미러링기법을테스트및에러감지에활용273
요약274

APPENDIXA이책에서사용한도구275

APPENDIXB프로젝트열기277

APPENDIXC기타참고도서279

APPENDIXD자바스레드이해281
D.1스레드란무엇인가?282
D.2스레드의수명주기284
D.3스레드동기화286
__D.3.1동기화블록286
__D.3.2wait(),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

APPENDIXE자바메모리관리체계299
E.1JVM이앱의메모리를구성하는방법300
E.2스레드가로컬데이터를저장하는데사용하는스택302
E.3앱이객체인스턴스를저장하는데사용하는힙308
E.4데이터유형을저장하기위한메타스페이스메모리위치311

찾아보기313

출판사 서평

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

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

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

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

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

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

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

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