본문 바로가기

관심사/독후감

권문수 <실무로 배우는 시스템 성능 최적화> - 강추!


성능 최적화, 인프라 안정화에 관심있는 분들에게 강추하는 책이다 ★


성능 문제가 발생할 수 있는 사례와 문제 해결 방법이 구체적으로 적혀있다.

그리고 성능 문제에 어떻게 접근해야하는지, 어떤 부분에서 실수할 수 있는지 또한 적혀있다. 


이전에 트래픽이 늘어나게 되면서 성능 최적화를 했던 경험이 있는데, 

이 때 삽질을 하면서 성능 최적화 문제에 접근하는 방법, 해결 방법 등을 체험적으로 익혔다. 

그런데 나도 모르게 알고 있는 이러한 지식들이 책에 디테일하게 정리되어있어서, 놀랐다.


문제 상황을 겪기 전에 미리 이 책을 알아뒀으면 좋았겠단 생각도 들었지만,  

삽질을 한번 해보고 나서 이 책을 읽으니 더 잘 읽힌다. 


아무튼! 이 책은 슈퍼 그레잇이다. 

주변 사람들에게 추천해주고 싶은 책이다. YES24 리뷰 공감 쩐다!

42000원짜리이지만, 800페이지나 되니까... 분량으로 뽕 뽑는다! ㅎㅅㅎ  


목차는 아래와 같다. 

목차

[1부] 성능 기초

▣ 1장: 성능이란?
1.1 동시 사용자
1.2 처리량
1.3 응답시간
1.4 자원
___1.4.1 적정성
___1.4.2 효율성
___1.4.3 안정성
___1.4.4 가용성
___1.4.5 확장성

▣ 2장: 성능 특성
2.1 성능 곡선
2.2 성능에 대한 이해

▣ 3장: 성능 이론
3.1 기초 성능 이론
3.2 사용률 이론
3.3 비율 분석

▣ 4장: 성능 테스트
4.1 성능 테스트 유형
4.2 성능 테스트 구성 요소
4.3 성능 테스트 시 주의사항
___4.3.1 테스트 데이터
___4.3.2 화면 처리시간
___4.3.3 네트워크
___4.3.4 가상 사용자 특성
___4.3.5 업무 시나리오
___4.3.6 대상 업무와 성능 개선

[2부] 성능 개선 

▣ 1장: 기본 자세

▣ 2장: 성능 분석 시작하기
2.1 애플리케이션 서버 응답시간 분석
2.2 클라이언트 응답시간 분석

▣ 3장: 상황별 분석 단계
3.1 화면 응답시간 저하
3.2 시스템 내 응답시간 저하
3.3 서비스 멈춤 현상
3.4 시스템 전반에 걸친 성능 개선
3.5 서버 자원 사용량 확인
3.6 CPU 과다 사용 분석
3.7 메모리 과다 사용 분석
3.8 디스크 과다 사용 분석

▣ 4장: 개선 방향성

[3부] 화면 응답시간 분석

▣ 1장: 기본 방향

▣ 2장: HTTP의 이해
2.1 프로토콜 구조
2.2 HTTP 요청
2.3 HTTP 응답
2.4 데이터 송수신

▣ 3장: 화면 응답시간 모니터링
3.1 화면 응답시간 모니터링 도구
3.2 인터넷 익스플로러 프로파일링
3.3 피들러
3.4 HTTP 분석 접근

▣ 4장: 웹 기반 시스템 성능 개선
4.1 화면 콘텐츠 구성
___4.1.1 콘텐츠 수 축소
___4.1.2 크기별 이미지 준비
___4.1.3 이미지 콘텐츠 파일의 크기 축소
___4.1.4 CDN 사용
___4.1.5 텍스트 콘텐츠의 크기 축소
___4.1.6 압축 적용
___4.1.7 웹 가속기
4.2 캐시 동작
___4.2.1 브라우저 캐시
4.3 병렬/비동기 처리
___4.3.1 네트워크 연결 증가
___4.3.2 AJAX와 DOM을 이용한 비동기 처리
4.4 기타 성능 개선
4.5 웹 서버 설정
___4.5.1 최대 병렬 처리 수
___4.5.2 Keepalive

▣ 5장: 웹 서버 모니터링
5.1 웹 요청 응답시간 모니터링
5.2 웹 서버 성능 모니터링

▣ 6장: HTTPS

[4부] 프로세스 이해하기

▣ 1장: 기본 방향

▣ 2장: 수행 중인 코드
2.1 스택에 대한 이해
2.2 스택 정보를 이용한 성능 분석
___2.2.1 스택 대기 분석
___2.2.2 교착상태
___2.2.3 스택 성능 분석
2.3 스택 수집
2.4 프로세스 스택 분석 도구 
___2.4.1 환경설정
___2.4.2 주요 기능 설명
___2.4.3 SDPA를 이용한 성능 분석

▣ 3장: 통신/파일 상태
3.1 파일 지시자의 이해
3.2 연계 통신/파일 상태 정보를 수집하는 방법

▣ 4장: 통신/파일 간 동작
4.1 시스템 콜에 대한 이해
4.2 통신/파일 상태와 동작 연계 분석
4.3 스택 정보와 통신/파일 간 동작 연계 분석
4.4 통신/파일 간 동작 모니터링 방법

▣ 5장: 기타
5.1 프로그램 소스코드 보기
5.2 바이너리 코어 덤프에서 자바 스택이나 힙 정보를 추출하는 방법
5.3 프로세스의 현재 작업 디렉터리를 확인하는 법
5.4 프로그램에서 사용하는 공유 라이브러리 확인
5.5 프로세스 생성 관계 보기
5.6 프로세스의 수행 환경 확인

[5부] 소스코드 최적화

▣ 1장: 기본 방향

▣ 2장: 불필요한 작업 제거
2.1 로깅
___2.1.1 잘못 사용된 로깅 수준
___2.1.2 로깅을 위한 불필요한 메시지 생성
___2.1.3 로깅을 효율적으로 하기 위한 개선
___2.1.4 트랜잭션 저널 로그
2.2 불필요한 로직
2.3 반복 로직

▣ 3장: 로직 최적화
3.1 락 최소화
___3.1.1 락 범위 최소화
___3.1.2 락 제거
3.2 문자열 처리 개선
___3.2.1 String.format 메서드
___3.2.2 String.replaceAll 메서드
___3.2.3 문자열 합치기
3.3 리플렉션 호출 제거
3.4 채번
3.5 날짜 연산
3.6 시간 문자열 처리
3.7 순차 검색 제거
3.8 파일 입출력 단위
3.9 SQL
3.10 BigDecimal
3.11 비대기 입출력 사용
3.12 기타 성능 개선
3.13 코드 성능 측정

▣ 4장: 적극적인 캐시 사용

▣ 5장: 효율적인 아키텍처 구성
5.1 병렬 처리
5.2 통신전문
5.3 고객정보 조회 이력 로깅과 마스킹
5.4 대량 조회 프레임워크 구성
5.5 내부 연계시스템
5.6 수직확장과 수평확장

[6부] SQL 튜닝

▣ 1장: 기본 방향

▣ 2장: SQL 튜닝을 위한 지본 지식
2.1 데이터베이스의 기본 구조
2.2 블록 단위 처리
2.3 캐시 IO 대 물리 IO

▣ 3장: 성능 개선 대상 식별
3.1 SQL 수행 통계
3.2 실행 중인 세션 상태
3.3 수행 중인 SQL의 수행 상태 확인
3.4 락 대기
3.5 AWR 보고서
3.6 StatsPack

▣ 4장: SQL 실행계획
4.1 SQL 실행계획과 수행 결과
___4.1.1 SQL 실행계획 보기
___4.1.2 SQL 수행 결과 확인
4.2 실행계획의 이해
___4.2.1 조인
___4.2.2 SQL 실행계획의 동작
4.3 인덱스
___4.3.1 인덱스 구조
___4.3.2 인덱스 종류
___4.3.3 인덱스 사용 원칙
___4.3.4 인덱스 탐색 방식
___4.3.5 인덱스 수와 성능
4.4 테이블
___4.4.1 Direct-Path와 Conventional-Path
___4.4.2 파티션 테이블
4.3 테이블 통계 보기

▣ 5장: SQL 성능 개선
5.1 힌트 사용
5.2 SQL 성능 개선
___5.2.1 인덱스 부재
___5.2.2 인덱스 항목 순서
___5.2.3 LIKE에 의한 성능 저하
___5.2.4 테이블 조인 이상
___5.2.5 실행 횟수와 조인

[7부] 애플리케이션 입장에서의 SQL 튜닝

▣ 1장: 기본 방향

▣ 2장: 중복 SQL 수행 제거
2.1 애플리케이션 캐시의 종류
___2.1.1 블록 캐시
___2.1.2 요청 캐시
___2.1.3 사용자 세션 캐시
___2.1.4 프로세스 캐시
___2.1.5 프로세스간 공유 캐시
___2.1.6 캐시 특성 분류
2.2 요청 캐시 구현 코드
2.3 캐시 적용

▣ 3장: 불필요한 SQL 수행 제거

▣ 4장: 최적 수행
4.1 Rownum 추가
4.2 파티션 키 추가
4.3 조회 항목 사용 여부(테이블 조인 제거)

▣ 5장: 쿼리 통합
5.1 메인/서브 쿼리
5.2 병렬 쿼리 통합

▣ 6장: DB 집합 처리

▣ 7장: 트랜잭션 처리

▣ 8장: 기타
8.1 복합적인 기능을 수행하는 쿼리 제거
8.2 스칼라 서브 쿼리 사용 시 주의사항
8.3 페이징 처리

▣ 9장: 배치 성능 개선
9.1 전체 테이블 탐색
9.2 파티션
9.3 해시 조인
9.4 병렬 처리
9.5 쿼리 통합
___9.5.1 메인리더와 건별 처리 쿼리 통합
___9.5.2 메인리더와 Insert 통합
___9.5.3 Select / Insert / Update 통합
9.6 자바 배치 모니터링 방안

▣ 10장: APM 활용
10.1 스카우터

[8부] 서버 OS 모니터링

▣ 1장: 기본 방향

▣ 2장: CPU
2.1 사용량 분석
2.2 CPU 확인
2.3 동시 다중 스레딩
2.4 CPU를 많이 사용하는 스레드 식별하기
2.5 프로세스의 누적 CPU 사용량 확인하기
2.6 CPU를 많이 사용하는 모듈(코드) 식별하기

▣ 3장: 메모리
3.1 가상 메모리
3.2 메모리 관련 주요 용어
3.3 사용량 분석
3.4 메모리 확인

▣ 4장: 디스크
4.1 사용량 분석
4.2 유닉스/리눅스 디스크 관리
4.3 파일시스템의 입출력 방식
___4.3.1 비동기 입출력
___4.3.2 직접 입출력
___4.3.3 동시 입출력
4.4 스토리지
4.5 레이드
___4.5.1 레이드 0 - 스트라이핑
___4.5.2 레이드 1 - 미러링
___4.5.3 레이드 0+1 - 스트라이핑과 미러링
___4.5.4 레이드 4 - 스트라이핑과 전용 패리티
___4.5.5 레이드 5 - 스트라이핑과 분산 패리티

▣ 5장: 통합 모니터링 도구
5.1 nmon
5.2 topas
5.3 GlancePlus
5.4 top

[9부] 프로세스의 메모리 구조

▣ 1장: 기본 방향

▣ 2장: 바이너리 메모리 관리
2.1 프로세스 메모리 구조
2.2 메모리 누수 조사
___2.2.1 윈도우
___2.2.2 AIX
___2.2.3 솔라리스
___2.2.4 HPUX
___2.2.5 리눅스
___2.2.6 기타

▣ 3장: 자바 메모리 관리
3.1 JVM 메모리 구조
3.2 가비지 컬렉션
3.3 오라클/HP JVM의 힙 메모리 구조
3.4 오라클/HP JVM의 GC 방식
___3.4.1 Serial GC
___3.4.2 Incremental GC
___3.4.3 Parallel GC
___3.4.4 Parallel Old GC
___3.4.5 Concurrent Mark and Sweep(CMS) GC GC
___3.4.6 Garbage First(G1) GC
___3.4.7 GC 선정 기준
3.5 IBM JVM의 메모리 구조
___3.5.1 단일 공간 메모리 구조
___3.5.2 Generation space 메모리 구조
3.6 IBM JVM의 GC 방식
3.7 자바 힙 메모리 누수
3.8 자바 힙 메모리 모니터링
___3.8.1 jstat
___3.8.2 모니터링 콘솔
___3.8.3 GC 로깅
3.9 자바 힙 덤프 수집
___3.9.1 jmap
___3.9.2 이벤트 설정
___3.9.3 HPROF
3.10 메모리 분석(이클립스 MAT 1.2.1 버전)
___3.10.1 시작하기
___3.10.2 화면 구성
___3.10.3 주요 용어 설명
___3.10.4 주요 메뉴

[10부] 네트워크 모니터링

▣ 1장: 기본 방향

▣ 2장: 네트워크 기초
2.1 OSI 7 계층
2.2 TCP/IP와 UDP/IP
2.3 스위치
2.4 운영체제별 네트워크 설정 확인

▣ 3장: IP
3.1 기본 개념
___3.1.1 IP 주소
___3.1.2 IP 주소의 클래스
___3.1.3 IP 주소의 사이더
___3.1.4 서브넷 마스크
___3.1.5 게이트웨이
___3.1.6 점보 프레임
3.2 IPv6
3.3 IP 프로토콜 네트워크 체크 명령
___3.3.1 호스트 IP 설정 확인
___3.3.2 Ping 명령
___3.3.3 호스트의 라우팅 테이블 확인
___3.3.4 Trace route 명령
___3.3.5 nbtstat 명령

▣ 4장: TCP
4.1 기본 개념
4.2 TCP 전송 보장
___4.2.1 전송 보장 알고리즘
___4.2.2 선별적인 ACK
4.3 전송 제어
___4.3.1 수신 윈도우
___4.3.2 송신 윈도우
___4.3.3 슬라이딩 윈도우
4.4 네이글 알고리즘
4.5 TCP KeepAlive
4.6 TCP 프로토콜 네트워크 체크
___4.6.1 telnet [IP address] [port] 명령
___4.6.2 netstat -an 명령
___4.6.3 netstat -s -p [protocol] 명령

▣ 5장: UDP

▣ 6장: 기타 프로토콜
6.1 DNS
6.2 FTP

▣ 7장: 네트워크 데이터 수집 방법
7.1 유닉스/리눅스 공통
7.2 HP-UX
7.3 IBM AIX
7.4 오라클 솔라리스
7.5 윈도우

▣ 8장: 네트워크 패킷 분석 (와이어샤크 1.10.6 버전)
8.1 화면 구성
___8.1.1 패킷 목록
___8.1.2 패킷 프로토콜 정보
8.2 필터링
8.3 기초 분석 메뉴
8.4 응답시간 분석
___8.4.1 네트워크 시간
___8.4.2 서버 시간
___8.4.3 클라이언트 시간
8.5 전문 분석
8.6 재전송 분석
8.7 와이어샤크를 이용한 성능 분석