저자

후지와라슌이치로,바바토시아키,나카니시켄토,나가노마사히로,카네코타츠야,쿠사

저자:후지와라슌이치로

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



저자:바바토시아키

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



저자:나카니시켄토

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



저자:나가노마사히로

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



저자:카네코타츠야

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



저자:쿠사노쇼

우주해적합동회사대표,주식회사해머키트(hammerkit)CTO,주식회사TechConsiglieCTO,프로모터(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-1private-isu
___private-isu사양및운영환경
___직접private-isu를동작
___AmazonEC2에서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-2k6로간단한부하테스트
4-3k6로시나리오작성
___시나리오에서공통으로사용하는함수를정의
___웹서비스초기화처리시나리오작성
___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-4N+1이란?
___쿼리수가증가하면응용프로그램이느려지는이유
___N+1을찾고해결하는방법
___데이터베이스이외에도있는N+1문제
5-5데이터베이스와자원을효율적으로사용
___FORCEINDEX와STRAIGHT_JOIN
___필요한열만취득해효율화
___프리페어드스테이트먼트와Go언어에서의연결설정
___데이터베이스와의연결지속성및최대연결수
5-6정리

6장:리버스프락시사용
6-1응용프로그램및프로세스스레드
6-2리버스프락시를이용하는장점
6-3nginx란?
6-4nginx구조
6-5nginx로전송할때데이터압축
6-6nginx에의한요청응답버퍼링
6-7nginx와업스트림서버의연결관리
6-8nginx의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-3HTTP클라이언트사용기법
___적절한타임아웃설정
___동일한호스트에대량의요청을보내는경우호스트의연결수제한확인
8-4정적파일을리버스프락시에서직접전달
8-5클라이언트측에서캐시를활용하기위해HTTP헤더를사용
8-6CDN상에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-6CPU사용률
___us-User:사용자공간에서CPU사용률
___sy-System:커널공간에서의CPU사용률
___ni-Nice:nice값(우선순위)이변경된프로세스의CPU사용률
___id-Idle:사용되지않는CPU
___wa-Wait:I/O처리를기다리는프로세스의CPU사용률
___hi-HardwareInterrupt:하드웨어인터럽트프로세스의사용률
___si-SoftInterrupt:소프트인터럽트프로세스의사용률
___st-Steal:하이퍼바이저가사용하는CPU사용률
9-7리눅스에서의효율적인시스템설정
___ulimit
9-8리눅스커널매개변수
___net.core.somaxconn
___net.ipv4.ip_local_port_range
9-9MTU(MaximumTransmissionUnit)
___기타커널매개변수
9-10정리

부록A:private-isu공략실천
A-1준비한대회용환경
A-2벤치마커실행방법
A-3각장에서소개한방법적용
___초기상태(약640점)
___comments테이블에인덱스추가(약5,500점)
___unicornworker프로세스를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-1ISUCON의벤치마커는무엇인가?
___부하테스트도구로서의벤치마커
___웹서비스구현에대한E2E테스트로서의벤치마커
___점수와에러를제공하는정보원으로서의벤치마커
___벤치마커에요구되는행동에주의할것
B-2자주사용되는벤치마커구현패턴
___context.Context
___time과context에의한루프패턴
___sync패키지사용
___sync/atomic패키지사용
___FunctionalOption패턴
B-3private-isu를대상으로한벤치마커구현
___입출력설계
___데이터갖기
___초기화처리구현하기
___로그인하는처리작성
___이미지를게시하는처리만들기
___최상위페이지검증
___점수계산
___실제로실행하고동작을확인
B-4정리