HOME / CATALOG / 오픈소스 & 웹
오픈소스 & 웹

전문가가 알려주는 웹 퍼포먼스 튜닝

빠르고 가벼운 웹 서비스를 위한 성능 최적화 기법
지은이 후지와라 슌이치로, 바바 토시아키, 나카니시 켄토, 나가노 마사히로, 카네코 타츠야, 쿠사노 쇼
옮긴이 김민호
도서 정보
출간일
2024년 1월 3일
쪽수
364쪽
판형
188*240*15mm
ISBN
9791158394752
시리즈
오픈소스 & 웹 시리즈_112
정가
28,000원
난이도
도서 소개
저자 소개
역자 소개
목차
예제 코드
정오표

도서 소개

웹 서비스 고속화를 위한 성능 개선 방법과 노하우를 알기 쉽게 설명합니다!

《전문가가 알려주는 웹 퍼포먼스 튜닝》은 일상적으로 사용되는 웹 서비스의 성능 개선 방법을 소개하는 실용적인 안내서입니다. 이 책은 LINE 주식회사(현재 LINE야후 주식회사로 변경)가 주최하는 ‘ISUCON’이라는 웹 서비스 성능 개선 대회를 중심으로, 실제로 사용되는 문제들을 통해 웹 서비스의 성능 문제를 해결하는 방법을 깊이 있게 다룹니다.

웹 응용 프로그램이 사용자의 요청에 빠르게 반응하고, 데이터베이스와 효율적으로 상호작용하는 것은 웹 서비스의 성능 향상에 결정적인 역할을 합니다. 이 책은 코드 최적화, 미들웨어 설정, 운영체제 설정 변경 등과 같은 다양한 성능 개선 전략을 제시하며, 필요에 따라 웹 응용 프로그램의 프로그래밍 언어 변경과 같은 고급 기술도 다룹니다.

또한, 웹 서비스의 개발 및 운영에 종사하는 모든 전문가에게 유익한 내용을 담고 있습니다. 특히 성능 개선의 필요성을 느끼는 개발자와 엔지니어에게 필수적인 지침서로, ISUCON 대회 참가를 고려하고 있거나 성능 문제 해결에 어려움을 겪고 있는 이들에게 매우 유용할 것입니다. 저자들은 자신들의 실제 현장 경험과 ISUCON 대회에서의 성공 사례를 바탕으로, 웹 서비스의 성능을 효과적으로 개선하는 데 필요한 실질적인 조언을 제공합니다.

 

도서 상세 이미지

저자 소개

후지와라 슌이치로

주식회사 KAYAC의 SRE팀에 소속된 이후로 2011년부터 ISUCON 대회에서 우승 4회와 출제 3회의 경험이 있다. 최근 매니지드 서비스의 취약점을 해결하기 위한 도구를 만들어서 오픈소스로 공개하는 취미를 가지고 있다.

바바 토시아키

X-Tech 및 그룹 5사의 CTO와 함께 iCARE의 기술 고문을 맡고 있으며, ISUCON 1회에서 프로젝터를 가져와 SELinux=Enforcing 모드로 입상한 경험이 있다. 본선에 진출하거나 운영을 돕는 등 다양한 역할을 수행하고 있다.

나카니시 켄토

2019년 주식회사 사이버 에이전트에 신입으로 입사하여 CloudMaker로서 폐쇄형 클라우드의 개발과 운영을 담당하고 있다. ISUCON8에서는 대학생 최초로 종합 우승을 했으며 ISUCON10에서는 폐쇄형 클라우드로 인프라를 제공하고 운영하는 일에 처음으로 도전했다.

나가노 마사히로

2021년부터 사쿠라 인터넷 주식회사에서 근무하고 있다. 믹시(mixi), livedoor, LINE, 메루카리(Mercari)에서 웹 서비스 운영에 종사했다. ISUCON1, ISUCON2, ISUCON9 예선 출제자로 참가했으며 참가자로서 우승과 예선 탈락도 경험했다.

카네코 타츠야

PR TIMES 주식회사 개발 본부장과 CTO를 겸임하고 있다. 픽시브(pixiv), 메루카리(Mercari)를 거쳐 현직에 종사 중이다. ISUCON9 예선 및 ISUCON6 본선 출제자로 참가했으며 ISUCON9 예선에서 문제와 벤치마커를 구현했다.

쿠사노 쇼

우주해적 합동회사 대표, 주식회사 해머 키트(hammerkit) CTO, 주식회사 Tech Consiglie CTO, 프로모터(PROMOTAL) 주식회사 상담역, IPTech 특허 업무 법인 기술 고문으로 있다. ISUCON9에서 우승했으며 ISUCON4와 ISUCON10은 출제자로 참가했다.

역자 소개

김민호

소프트뱅크의 보안팀 멤버로서 다양한 사이버 사고에 대한 심층 분석과 대응 전략에 참여하고 있다. 또한, 클라우드 환경에서의 침입 탐지 및 로그 분석을 위한 시스템 구축 프로젝트에도 적극 참여하고 있다. 최근에는 생성형 AI를 활용한 보안 도구 개발에 관심이 있어 이 분야에 대한 연구와 학습에 몰두하고 있다.

목차

  • ▣ 1장: 튜닝의 기초 지식
  • 1-1 현재 웹 서비스의 필수 요건인 ‘속도’
  • ___웹 서비스의 경쟁력과 직결되는 ‘속도’
  • ___SEO에도 영향을 주는 ‘속도’
  • 1-2 속도가 빠른 웹 서비스
  • ___비용 절감에도 영향을 미치는 ‘속도’
  • ___속도가 빠른 웹 서비스란?
  • ___웹 서비스 속도 단위
  • ___웹 서비스의 구조 이해
  • 1-3 웹 서비스 부하
  • ___웹 서비스의 부하가 높은 상태
  • ___속도와 용량
  • ___성능 튜닝
  • 1-4 웹 서비스 용량
  • ___필요 충분한 용량
  • ___필요 충분한 용량을 예측하는 방법
  • 1-5 성능 튜닝의 시작(1)
  • ___추측하지 않고 계측
  • ___공정한 비교
  • ___하나씩 비교
  • 1-6 성능 튜닝의 시작(2)
  • ___병목 현상 해소
  • ___병목을 식별할 때는 바깥쪽에서 안쪽으로
  • ___병목 현상에 대처하는 3가지 방법
  • 1-7 성능 튜닝의 시작(3)
  • ___부하 테스트의 과정 개요
  • 1-8 정리
  •  
  • ▣ 2장: 모니터링
  • 2-1 모니터링이란 - 인프라에서의 테스트
  • 2-2 모니터링 개념
  • 2-3 모니터링 종류
  • ___외형 감시
  • ___내부 감시
  • 2-4 수동 모니터링
  • 2-5 모니터링 도구
  • 2-6 모니터링 도구의 구조
  • ___에이전트 node_exporter
  • ___node_exporter로 얻을 수 있는 메트릭
  • 2-7 모니터링 실시
  • 2-8 모니터링 시 주의점
  • ___올바른 측정 결과 확인
  • ___2개의 그래프를 비교할 때 다른 조건 맞추기
  • ___부하가 높은 상태 모니터링
  • ___모니터링 해상도
  • 2-9 로그 모니터링
  • 2-10 정리
  •  
  • ▣ 3장: 부하 테스트의 기초
  • 3-1 private-isu
  • ___private-isu 사양 및 운영 환경
  • ___직접 private-isu를 동작
  • ___Amazon EC2에서 private-isu 시작
  • ___Docker에서 private-isu 시작
  • ___private-isu 실행
  • 3-2 부하 테스트 준비
  • ___부하 테스트 환경 준비
  • ___nginx의 액세스 로그 집계
  • ___액세스 로그를 JSON 형식으로 출력
  • ___JSON 형식의 액세스 로그 집계
  • ___alp를 설치하는 방법
  • ___alp를 사용한 로그 해석 방법
  • 3-3 벤치마커로 부하 테스트 실시
  • ___ab 명령 설치
  • ___ab 명령 사용법
  • ___ab의 결과와 alp의 결과 비교
  • ___액세스 로그 로테이션
  • 3-4 성능 튜닝 시작
  • ___부하 테스트 실시 – 첫 번째 결과 확인
  • ___부하 테스트 중 부하 모니터링
  • ___MySQL 병목을 발견할 준비
  • ___슬로우 쿼리 로그 구문 해석
  • ___튜닝 결과를 확인하는 부하 테스트
  • ___새로운 병목 찾기
  • 3-5 벤치마커의 병렬성
  • ___서버의 처리 능력을 전부 사용할 수 있는지 확인
  • ___왜 CPU를 사용하지않는가?
  • ___여러 CPU를 효과적으로 사용하기 위한 설정
  • ___서버 병렬성을 높여 부하 테스트 실시
  • 3-6 정리
  •  
  • ▣ 4장: 시나리오 부하 테스트
  • 4-1 부하 테스트 도구 k6
  • ___k6 설치
  • 4-2 k6로 간단한 부하 테스트
  • 4-3 k6로 시나리오 작성
  • ___시나리오에서 공통으로 사용하는 함수를 정의
  • ___웹 서비스 초기화 처리 시나리오 작성
  • ___sleep() 함수: 일정시간 대기
  • ___사용자가 로그인해 댓글을 작성하는 시나리오 작성
  • ___check() 함수: 응답 내용 확인
  • ___parseHTML() 함수: HTML 내의 요소를 취득
  • ___파일 업로드가 포함된 양식 제출
  • ___시나리오에서 사용할 외부 데이터 준비
  • 4-4 여러 시나리오를 결합한 통합 시나리오 실시
  • ___통합 시나리오 실행 결과 예
  • 4-5 부하 테스트에서 얻은 액세스 로그 해석
  • 4-6 정리
  •  
  • ▣ 5장: 데이터베이스 튜닝
  • 5-1 데이터베이스의 종류 및 선택
  • ___일관성을 강조하는 RDBMS
  • ___응용 프로그램 요구에 맞춘 NoSQL
  • ___일관성과 분산을 모두 충족하는 NewSQL
  • ___데이터베이스 선택
  • 5-2 데이터베이스 부하 측정
  • ___OS에서 부하를 모니터링
  • ___MySQL 프로세스 목록
  • ___pt-query-digest로 슬로우 쿼리 로그 분석
  • ___query-digester를 사용한 프로파일링 자동화
  • ___pt-query-digest 결과 확인
  • 5-3 인덱스로 데이터베이스를 고속화
  • ___데이터베이스에서 결과를 빠르게 얻으려면
  • ___데이터베이스에서 인덱스의 역할
  • ___인덱스로 인해 검색이 빨라지는 이유
  • ___MySQL에서 인덱스 사용
  • ___복합 인덱스 및 정렬에 사용되는 인덱스
  • ___클러스터 인덱스 구성 및 클러스터 인덱스에서 인덱스 튜닝
  • ___너무 많은 인덱스 생성으로 인한 안티 패턴
  • ___MySQL이 지원하는 기타 인덱스
  • 5-4 N+1이란?
  • ___쿼리 수가 증가하면 응용 프로그램이 느려지는 이유
  • ___N+1을 찾고 해결하는 방법
  • ___데이터베이스 이외에도 있는 N+1 문제
  • 5-5 데이터베이스와 자원을 효율적으로 사용
  • ___FORCE INDEX와 STRAIGHT_JOIN
  • ___필요한 열만 취득해 효율화
  • ___프리페어드 스테이트먼트와 Go 언어에서의 연결 설정
  • ___데이터베이스와의 연결 지속성 및 최대 연결 수
  • 5-6 정리
  •  
  • ▣ 6장: 리버스 프락시 사용
  • 6-1 응용 프로그램 및 프로세스 스레드
  • 6-2 리버스 프락시를 이용하는 장점
  • 6-3 nginx란?
  • 6-4 nginx 구조
  • 6-5 nginx로 전송할 때 데이터 압축
  • 6-6 nginx에 의한 요청 응답 버퍼링
  • 6-7 nginx와 업스트림 서버의 연결 관리
  • 6-8 nginx의 TLS 통신 속도 향상
  • 6-9 정리
  •  
  • ▣ 7장: 캐시 활용
  • 7-1 캐시 데이터 저장에 사용되는 미들웨어
  • 7-2 캐시를 KVS에 저장할 때의 주의점
  • 7-3 언제 캐시를 사용할까?
  • ___TTL을 충분히 짧게 설정
  • 7-4 구체적인 캐시 구현 방법
  • ___캐시에 데이터가 없으면 캐시를 생성해 생성 결과를 저장하는 방법
  • ___캐시가 없다면 기본값이나 이전의 캐시를 반
  • ___비동기적으로 캐시 갱신 처리를 실시
  • ___일괄 처리 등으로 정기적으로 캐시를 갱신
  • ___Private-isu에서 실제로 캐시 사용
  • 7-5 캐시 모니터링
  • 7-6 정리
  •  
  • ▣ 8장: 알아 두면 좋은 고속화 방법
  • 8-1 외부 명령 실행이 아닌 라이브러리 사용
  • 8-2 개발용 설정에서 불필요한 로그를 출력하지 않는다
  • 8-3 HTTP 클라이언트 사용 기법
  • ___적절한 타임아웃 설정
  • ___동일한 호스트에 대량의 요청을 보내는 경우 호스트의 연결 수 제한 확인
  • 8-4 정적 파일을 리버스 프락시에서 직접 전달
  • 8-5 클라이언트 측에서 캐시를 활용하기 위해 HTTP 헤더를 사용
  • 8-6 CDN상에 HTTP 응답을 캐시
  • ___CDN은 전 세계 어디서 액세스하더라도 빠른 서비스를 제공
  • ___Cache-Control을 사용해 CDN 또는 Proxy에 캐시
  • 8-7 정리
  •  
  • ▣ 9장: OS 기초 지식과 튜닝
  • 9-1 흐름 파악하기
  • 9-2 리눅스 커널의 기초 지식
  • 9-3 리눅스의 프로세스 관리
  • 9-4 리눅스의 네트워크
  • ___네트워크 메트릭
  • ___리눅스 커널에서 패킷 처리 효율성
  • 9-5 리눅스의 디스크 I/O
  • ___스토리지 종류
  • ___스토리지 성능이란 - 처리량, 지연 시간, IOPS
  • ___스토리지 성질 조사
  • ___디스크 마운트 옵션
  • ___I/O 스케줄러
  • 9-6 CPU 사용률
  • ___us - User: 사용자 공간에서 CPU 사용률
  • ___sy - System: 커널 공간에서의 CPU 사용률
  • ___ni - Nice: nice 값(우선순위)이 변경된 프로세스의 CPU 사용률
  • ___id - Idle: 사용되지 않는 CPU
  • ___wa - Wait: I/O 처리를 기다리는 프로세스의 CPU 사용률
  • ___hi - Hardware Interrupt: 하드웨어 인터럽트 프로세스의 사용률
  • ___si - Soft Interrupt: 소프트 인터럽트 프로세스의 사용률
  • ___st - Steal: 하이퍼바이저가 사용하는 CPU 사용률
  • 9-7 리눅스에서의 효율적인 시스템 설정
  • ___ulimit
  • 9-8 리눅스 커널 매개변수
  • ___net.core.somaxconn
  • ___net.ipv4.ip_local_port_range
  • 9-9 MTU(Maximum Transmission Unit)
  • ___기타 커널 매개변수
  • 9-10 정리
  •  
  • ▣ 부록A: private-isu 공략 실천
  • A-1 준비한 대회용 환경
  • A-2 벤치마커 실행 방법
  • A-3 각 장에서 소개한 방법 적용
  • ___초기 상태(약 640점)
  • ___comments 테이블에 인덱스 추가(약 5,500점)
  • ___unicorn worker 프로세스를 4로 설정(약 13,000점)
  • ___정적 파일을 nginx로 전달(약 17,000점)
  • ___업로드 이미지를 정적 파일화(약 22,000점)
  • ___GET /을 분석
  • ___posts와 users를 JOIN해 필요한 행 수만 취득(약 90,000점)
  • ___벤치마커가 사용하는 파일 디스크립터 상한을 증가
  • ___프리페어드 스테이트먼트를 개선(약 110,000점)
  • ___comments 테이블에 인덱스 생성 (약 115,000점)
  • ___posts에서 N+1 쿼리 결과 캐시(약 180,000점)
  • ___적절한 인덱스를 사용할 수 없는 쿼리를 해결(약 200,000점 )
  • ___외부 명령 호출 중지(약 240,000점)
  • ___MySQL 설정 변경 (약 250,000점)
  • ___memcached에 대한 N + 1 제거 (약 300,000 점 )
  • ___Ruby의 YJIT를 활성화(약 320,000점)
  • ___처음에 생성한 인덱스를 삭제(약 10,000점)
  • A-4 정리
  •  
  • ▣ 부록B: 벤치마커 구현
  • B-1 ISUCON의 벤치마커는 무엇인가?
  • ___부하 테스트 도구로서의 벤치마커
  • ___웹 서비스 구현에 대한 E2E 테스트로서의 벤치마커
  • ___점수와 에러를 제공하는 정보원으로서의 벤치마커
  • ___벤치마커에 요구되는 행동에 주의할 것
  • B-2 자주 사용되는 벤치마커 구현 패턴
  • ___context.Context
  • ___time과 context에 의한 루프 패턴
  • ___sync 패키지 사용
  • ___sync/atomic 패키지 사용
  • ___Functional Option 패턴
  • B-3 private-isu를 대상으로 한 벤치 마커 구현
  • ___입출력 설계
  • ___데이터 갖기
  • ___초기화 처리 구현하기
  • ___로그인하는 처리 작성
  • ___이미지를 게시하는 처리 만들기
  • ___최상위 페이지 검증
  • ___점수 계산
  • ___실제로 실행하고 동작을 확인
  • B-4 정리
  •  

예제 코드

정오표

  • ix쪽, 저자 소개 중 '카네코 타츠야' 항목의 첫 번째 줄

    PR TIME 주식회사 개발 본부장과 CTO를 겸임하고 있다. 픽시브(Pixiv), 메루카리(Mercari)를 거쳐

    ==>

    PR TIMES 주식회사 개발 본부장과 CTO를 겸임하고 있다. 픽시브(pixiv), 메루카리(Mercari)를 거쳐

WHERE TO BUY · 정가 28,000원
WHERE TO BUY · 정가 28,000원