가입하고 포인트 받기
네이버를 만든 기술, 읽으면서 배운다 (자바편)
이상민 외 9명 지음
위키북스
 펴냄
20,000 원
18,000원 
앱에서 포인트받고 구매
304쪽 | 2015-03-05
분량 보통인책 | 난이도 보통인책
상세 정보
TECH@NAVER 시리즈. 이 책은 네이버 기술 블로그인 헬로월드(http://helloworld.naver.com)에 올라왔던 자바와 관련된 글을 엄선해서 엮은 책이다. 헬로월드는 네이버 사내 기술 지식을 외부 개발자에게 공유할 목적으로 2011년 12월에 개설된 블로그다. <BR> <BR> 국내 소프트웨어 개발 환경에서 자바 개발의 비중이 높고 다양한 언어와 플랫폼을 사용하는 네이버에서도 자바 개발은 개발의 큰 축을 담당하고 있다. 네이버 자바 개발자들이 축적한 개발 지식과 문제 해결 경험, 실험 결과를 담은 이 책은 자바 라이브러리를 설계하거나 사용자가 많은 시스템을 운영하는 등 자바를 더 깊이 이해하고 싶은 독자에게 도움이 될 것이다.<BR>
더보기
목차

[1부] 자바의 API 이해하기

▣ 01장: 자바의 날짜와 시간 API
__자바 클래스에 담긴 제도의 역사
____1582년 10월 4일의 다음 날은?
____서울 1988년 5월 7일 23시의 1시간 후는?
____서울 1961년 8월 9일 23시 59분의 1분 후는?
____협정세계시 2012년 6월 30일 23시 59분 59초의 2초 후는?
__JDK 기본 날짜 클래스의 문제점
____불변 객체가 아니다
____int 상수 필드의 남용
____헷갈리는 월 지정
____일관성 없는 요일 상수
____Date 클래스와 Calendar 클래스의 불편한 역할 분담
____오류에 둔감한 시간대 아이디 지정
____java util Date 하위 클래스의 문제
__자바의 개선된 날짜, 시간 API, Joda-Time
__JSR-310, 새로운 자바의 날짜 API
__마치며

▣ 02장: 자바의 HashMap은 어떻게 작동하는가?
__HashMap과 HashTable
__해시 분포와 해시 충돌
__자바 8 HashMap에서의 separate chaining
__해시 버킷의 동적 확장
__보조 해시 함수
__String 객체에 대한 해시 함수
__자바 7에서 String 객체에 대한 별도의 해시 함수
__마치며

▣ 03장: 자바에서 외부 프로세스를 실행할 때
__java lang Process 클래스를 생성하는 2가지 방법
__외부 프로세스가 전달하는 스트림 처리 문제
__특정 환경에서 발생하는 메모리 할당 실패 문제
____fork-exec 호출이 문제가 되는 경우
____대처 방안
__Security Manager 클래스를 이용한 실행 제한
____정책 설정 파일 위치와 실행 옵션
____정책 설정 방법
__마치며

▣ 04장: 람다가 이끌어 갈 모던 자바
__컬렉션 처리
__클래식 자바
____기본 컬렉션 처리 API
____자바의 기본 컬렉션을 개선한 라이브러리
__JVM에서 실행되는 다른 언어의 익명 함수
__모던 자바
____클로저와 람다 표현식을 둘러싼 논란
____람다 표현식과 Stream 인터페이스의 도입
____람다 표현식의 내부 구현
____애플리케이션 코드의 개선
____람다 표현식을 활용한 프레임워크
__마치며

[2부] 문제 분석과 사례

▣ 05장: JVM 이해하기
__가상 머신
__자바 바이트코드
____현상
____원인
__클래스 파일 포맷
__JVM 구조
____클래스 로더
____런타임 데이터 영역
____실행 엔진
__자바 SE 7의 JVM 명세
____String in switch Statements
__자바 SE 8의 JVM 명세
__마치며

▣ 06장: 스레드 덤프 분석하기
__자바 그리고 스레드
__자바 스레드 배경 지식
____스레드 동기화
____스레드 상태
____스레드의 종류
__스레드 덤프 생성
____jstack을 이용하는 방법
____자바 VisualVM을 이용하는 방법
____kill을 이용하는 방법
__스레드 덤프의 정보
__스레드 덤프 유형별 패턴
____잠금을 소유하지 못하는 경우(BLOCKED)
____교착 상태인 경우
____원격 서버로부터 메시지를 수신받기 위해 계속 대기하는 경우
____WAIT 상태에 있는 경우
____스레드 리소스를 정상적으로 정리하지 못하는 경우
__스레드 덤프를 이용한 문제 해결 사례
____상황1: CPU 사용률이 비정상적으로 높을 때
____상황2: 실행 성능이 비정상적으로 느릴 때
__스레드 덤프 분석을 쉽게 만드는 코딩
____스레드에 이름 부여하기
____MBean으로 더 자세한 정보 얻기
__마치며

▣ 07장: 자바 애플리케이션 분석을 위한 BTrace
__BTrace란?
__특정 메서드 호출 시의 스택 트레이스 확인
__실행 시간과 횟수 측정
__객체의 필드값 확인
__BTrace의 제약사항
__마치며

▣ 08장: 하나의 메모리 누수를 잡기까지
__장애 징조 - 상반기의 장애 처리 일지
__모니터링 개선
____나 혼자 죽을 수 없다
____문자 메시지 스트레스
__문제 원인 찾기
__문제 해결
____히스토그램 비교
____힙 덤프 분석
__마치며

▣ 09장: 고맙다 JVM, 사과해라 JVM 크래시
__JVM 오류 현상
__JVM의 명백한 버그
__버그 리포트와 릴리스 노트
__마치며

[3부] 가비지 컬렉션

▣ 10장: 자바 가비지 컬렉션의 작동 과정
__가비지 컬렉션 과정 - Generational Garbage Collection
__Young 영역의 구성
__Old 영역에 대한 가비지 컬렉션
____Serial GC(-XX:+UseSerialGC)
____Parallel GC(-XX:+UseParallelGC)
____Parallel Old GC(-XX:+UseParallelOldGC)
____CMS GC(-XX:+UseConcMarkSweepGC)
____G1 GC
__마치며

▣ 11장: 가비지 컬렉션 모니터링 방법
__가비지 컬렉션 모니터링이란?
__가비지 컬렉션을 모니터링하는 방법은?
__jstat
__-verbosegc 옵션
__VisualVM과 Visual GC
__HPjmeter
__마치며

▣ 12장 가비지 컬렉션 튜닝
__가비지 컬렉션 튜닝을 꼭 해야 할까?
____Old 영역으로 넘어가는 객체의 수 최소화
____Major GC 시간 줄이기
__가비지 컬렉션의 성능을 결정하는 옵션
__가비지 컬렉션 튜닝의 절차
____1.가비지 컬렉션 상황 모니터링
____2.모니터링 결과 분석 후 가비지 컬렉션 튜닝 여부 결정
____3.가비지 컬렉션 방식과 메모리 크기 지정
____4.결과 분석
____5.결과가 만족스러울 경우 전체 서버에 반영 및 종료
__가비지 컬렉션 상황 모니터링 및 결과 분석하기
__가비지 컬렉션 방식 지정과 메모리 크기 지정
____가비지 컬렉션 방식 지정
____메모리 크기 지정
__가비지 컬렉션 튜닝 결과 분석
__튜닝 사례
____튜닝 사례 1
____튜닝 사례 2
__마치며

▣ 13장 자바의 Reference 클래스와 가비지 컬렉션
__가비지 컬렉션과 접근 가능성
__soft reference, weak reference, phantom reference
__Reference 클래스와 접근 가능성
__접근 가능성의 세기
__softly reachable과 SoftReference
__weakly reachable과 WeakReference
__ReferenceQueue
__phantomly reachable과 PhantomReference
__마치며

▣ 14장 가비지 컬렉션과 Statement Pool
__HTTP 요청에서 응답까지 가비지 컬렉션 발생 과정
__Statement 객체의 크기
__Statement Pool의 캐시 적중률이 Major GC에 미치는 영향
__마치며

▣ 15장 아파치 MaxClients와 톰캣의 Major GC
__서비스 운영 환경
__stop the world와 503 오류
__MaxClients와 backlog
__MaxClients 설정 계산 방법
__마치며

[4부] 데이터베이스 연결 설정

▣ 16장 JDBC의 타임아웃 이해하기
__어느 날 발생한 DDoS 공격, 그 뒤로 먹통이 된 WAS
__왜 JDBC 드라이버에 대해 알아야 하는가?
__WAS와 DBMS의 통신 시 타임아웃 계층
____트랜잭션 타임아웃이란?
____Statement 타임아웃이란?
__JDBC 드라이버의 Statement 타임아웃 작동 방식
__JDBC 드라이버의 소켓 타임아웃이란?
__운영체제 수준의 소켓 타임아웃 설정
__마치며

▣ 17장 Commons DBCP 이해하기
__버전 선택과 속성 설정 방법
____JDK 버전과 Commons DBCP 버전
____Commons DBCP 속성 설정
__커넥션의 개수
____커넥션 풀의 저장 구조
____커넥션 개수 관련 속성
__커넥션을 얻기 전 대기 시간
____TPS(transaction per seconds)
____TPS와 커넥션 개수와의 관계
____적절한 maxWait 값은?
__커넥션의 검사와 정리
____유효성 검사 쿼리 설정
____Evictor 스레드와 관련된 속성
__statement pooling 관련 옵션
__기본값을 그대로 쓰기를 권장하는 옵션
____removeAbandoned 옵션
____defaultAutoCommit 속성
__마치며

더보기
저자 정보
이상민 외 9명
삼성 SDS에서 개발을 시작하여, Naver의 성능 엔지니어링 팀에서 일했다. 지금은 NHN엔터테인먼트에서 협업 도구인 두레이(Dooray!)를 개발하고 있다. <자바 성능 튜닝 이야기>, <자바 개발자와 시스템 운영자를 위한 트러블슈팅 이야기> 등 다수의 IT 서적을 집필하였다.
더보기
남긴 글 0
앱에서 바로 보기