개발 경력이 13년되는 개발자 입니다. 사실 저는 프로그램 성능 최적화에 대해 이미 많은 지식을 갖고 있고 잘 활용도 하고 있습니다. UNIX계열에서 서버도 개발했고, 윈도우즈 환경에서 서버/클라이언트도 개발 했습니다. 책을 1/3 가량 읽으니 이 책, 참 좋다. 우리 팀원들에게 꼭 읽으라고 추천해야 겠다. 라는 생각이 들더군요.프로그램을 완성한 후에 안정성 및 성능 테스트를 진행하게 되는데요. 성능을 테스트하다 보면 서버 프로그램이든 클라이언트 프로그램이든 성능이 기대했던 것 만큼 나오지 않거나, 잘 운용되고 있다가도 사용자가 급증해 성능 최적화가 필요가 필요한 순간이 오기도 합니다. 실무에선 최소한의 노력으로 최대한의 효과를 보는 것이 중요한 요소 중 하나입니다. 그러려면 프로그램의 어느 부분을 수정하는 것이 최적일지 파악해야 합니다. 많이 초보 개발자들의 실수중 하나가 어디가 문제인지 정확히 파악하지 못한 상태에서 성능 최적화를 해서 시간을 많이 소비하고도 큰 효과를 보지 못하는 것인데요. 이 책은 어디가 주요 성능 보틀넥인지 파악하는 방법을 알려주고, 자주 접할 수 있는 문제들에 대한 해결법도 예를 들어줍니다. 목차를 보시면 아시겠지만, 단순 소스코드 수준 뿐만 아니라 DB나 통신이나 프로세스 수준이나 HTTP같은 상위 수준등에서 고민해야 할 것들에 대해서도 다루고 있어 굉장히 폭넓게 다루고 있습니다.프로그램 최적화에 전혀 모르거나, 어느정도 잘 알고 있는 사람에게도 추천하고 싶은 좋은 책입니다. 책 내용이 좋아서 유명한 책의 번역서 일거라고 생각했는데, 한국분이 직접 저서하신 거에 또 한번 놀랐습니다.
시스템 최적화 전문가의 15년 노하우를 4년간 정리!
이 책은 시스템 최적화 전문가가 15년간의 실무 경험을 바탕으로 4년간의 노력 끝에 완성한, 시스템 운영자와 애플리케이션 개발자를 대상으로 한 성능 개선에 대한 종합적이고 체계적인 가이드이다. 저자가 실제 경험한 성능 개선 사례를 통해 프로젝트에서 발생하는 성능 저하 유형과 분석 기법을 설명한다.
[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 와이어샤크를 이용한 성능 분석
카테고리 없음