정상혁정상혁
cover

네이버의 개발자 블로그인 헬로월드 ( http://helloworld.naver.com )에 공개되었던 글을 중심으로 책이 출판됩니다. 자바의 핵심영역을 다룬 17개의 글을 묶었습니다. 출판을 위해 새로 쓰여진 글도 있고, 사내에서만 공유되었던 글들도 재발굴했고, 이미 공개된 글도 최신 내용을 반영해 다듬었습니다.

자바개발의 A부터 Z까지 다 다루는 책은 아니지만, API를 설계할 때 고민해야할 요소, 반복해서 문제를 겪을 만한 부분, 장애 해결/분석 경험의 액기스를 담았습니다. 네이버의 주요 서비스를 개발한 담당자가 문제를 해결한 사례를 정리한 글도 있고, 플랫폼개발, 기술 지원조직인 웹플랫폼개발랩, 성능엔지어링랩, 생산성혁신랩의 개발자들이 반복해서 전파해야할 지식을 효율적으로 공유하기 위해 쓴 글도 있습니다.

처음에는 조엘이 엄선한 소프트웨어 블로그 베스트 29선처럼, 온라인의 글을 오프라인으로 옮기는 성격의 책이 될것이라고 예상했었습니다. 그런데 생각보다 출판에 이르기까지는 많은 노력이 들어갔습니다. 글이 쓰여진 시점이 제 각각 이였기 때문에 현시점에 맞춰서 고칠 내용도 많았고, 사내에서만 공유되던 글은 서비스명, 담당자명, 부서명등이 들어간 문장은 바꿔야했습니다. 다양한 저자가 쓴 글이였지만 용어를 일관되게 맞추려고 노력했습니다. 기술문서팀의 담당자분께서 많은 수고를 해주셨습니다.

오류가 있어도 바로 고치면 되는 인터넷 페이지가 아닌, 종이로 찍혀나오는 책에 들어갈 글을 쓰는 부담은 생각보다 컸습니다. 이미 공개된 글도 여러 번 더 신중하게 검토를 했습니다. 블로그에 올릴 때는 '아직 정확한 답은 찾지 못했다.' 정도로 대충 쓰고 넘어갔었던, 타임존데이터베이스에서 우리나라 시간대 정보가 역사적 사실과 맞지 않았던 문제를 더 깊이 파악한 것이 그 예입니다. 책을 쓰면서 IANA ( Internet Assigned Numbers Authority)에 이 오류를 수정한 패치를 전달해서 JDK에도 반영되었습니다.

결국 종이로 찍혀나오게 되었으니, Helloworld의 글들을 좋아하셨던 많은 분들에게 소장할 가치가 있는 책으로 남았으면 좋겠습니다. 그 바램을 담아서 서문와 아래와 같이 적었습니다.

앞으로 자바 10, 자바 11이 나오고 시간이 흐르면 더 최신 정보를 담은 책이 나올 것이다. 그래도 이 시대의 자바 기술과 네이버에서 일한 개발자의 노력을 담은 타입캡슐이 돼 오랜 시간이 지난 후에도 누군가의 책장에 이 책이 꽂혀 있으면 좋겠다. 그것이 인터넷에 있던 글을 종이로 옮긴 가장 큰 의미가 아닐까 생각한다.

이 책이 호응이 얻는다면, 바쁜 시간을 쪼개어서 글을 썼던 저자에게 응원이 되고, 예비 저자에게도 용기를 주어 앞으로 더 좋은 글을 외부로 공개하는데 힘을 보탤 것이라 믿습니다.

목차

글 하나하나가 독립적이기 때문에 관심있는 주제부터 읽으셔도 되지만, 가장 겉으로 들어난 영역인 API부터 시작해서 JVM내부, 분석도구, Garbarge Collection, DB연결까지 이어지는, 더 안쪽과 JVM 뒤쪽의 영역으로 흐름이 이어지도록 목차를 잡았습니다.

1부 : 자바의 API 이해하기

  • 01장: 자바의 날짜와 시간 API - 정상혁

  • 02장: 자바의 HashMap은 어떻게 작동하는가? - 송기선

  • 03장: 자바에서 외부 프로세스를 실행할 때 - 정상혁

  • 04장: 람다가 이끌어 갈 모던 자바 - 정상혁

2부 : 문제 분석과 사례

  • 05장: JVM 이해하기 - 박세훈

  • 06장: 스레드 덤프 분석하기 - 구태진

  • 07장: 자바 애플리케이션 분석을 위한 BTrace - 이상민, 정상혁

  • 08장: 하나의 메모리 누수를 잡기까지 - 김민수, 김택수

  • 09장: 고맙다 JVM, 사과해라 JVM 크래시 - 강경태

3부 : 가비지 컬렉션

  • 10장: 자바 가비지 컬렉션의 작동 과정 - 이상민

  • 11장: 가비지 컬렉션 모니터링 방법 - 이상민, 송기선

  • 12장: 가비지 컬렉션 튜닝 - 이상민

  • 13장: 자바의 Reference 클래스와 가비지 컬렉션 - 박세훈

  • 14장: 가비지 컬렉션과 Statement Pool - 최동순

  • 15장: 아파치 MaxClients와 톰캣의 Major GC - 최동순

4부 : 데이터베이스 연결 설정

  • 16장: JDBC의 타임아웃 이해하기 - 강운덕

  • 17장: Commons DBCP 이해하기 - 최동순, 강운덕, 정상혁