책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/http2-in-action
요약
HTTP/2 프로토콜을 상세하게 소개하고 HTTP/1.1에서 웹 개발자들이 사용하던 최적화 기법을 HTTP/2 환경에서는 어떻게 바꿔야 할지 실제 예제로 이해하기 쉽게 설명한다. HTTP/2를 적용하고 싶은 웹사이트 관리자나 최적화를 원하는 웹 개발자에게 좋은 길잡이가 될 것이다.
추천의 글
새로운 HTTP/2 표준에 대한 탁월한 입문서로, 통찰력 있는 설명과 아주 유용한 예제를 제공한다.
- 알랭 쿠누(Alain Couniot), STIB-MIVB
20년 동안에 이 프로토콜에 일어난 가장 중요한 변화를 철저히 설명한다. 웹 운영자와 웹 개발자를 위한 중요한 읽을거리다.
- 로날드 크랜스턴(Ronald Cranston), 스카이(Sky) UK
HTTP/2의 미묘한 차이와 그것이 장차 개발에 어떤 영향을 미칠지 알 수 있는 훌륭한 교재다.
- 톰 맥커니(Tom McKearney), Applied Information Sciences
지금까지 본 HTTP/2의 설명 중 가장 알기 쉽다. 강력히 추천한다.
- 에드윈 쿽(Edwin Kwok), Red Soldier
이 책에서 다루는 내용
■ 웹 개발자를 위한 HTTP/2
■ 업그레이드와 문제 해결법
■ 예제와 사례 연구
■ QUIC과 HTTP/3
이 책의 대상 독자
웹 개발자, 웹사이트 관리자, 인터넷 기술의 동작 방식을 이해하는 데 관심이 있는 사람을 대상으로 작성됐다. 이 책은 HTTP/2와 그에 관련된 모든 세부사항을 완전히 다루는 것을 목표로 한다. HTTP/2에 대한 블로그 게시물이 많지만, 대부분은 특정한 주제에 대한 고수준 혹은 세부 수준만을 다루고 있다. 이 책은 프로토콜 전체를 포함해 그와 관련된 많은 복잡성을 다루는 것을 목표로 한다. 이는 여러분이 더 읽어 보려는 사양이나 특정한 블로그 게시물을 읽고 이해할 수 있게 도와줄 것이다. HTTP/2는 기본적으로 성능을 향상시키기 위해 만들어졌으므로 웹 성능 최적화에 관심이 있는 누구나 유용한 이해와 통찰력을 얻을 수 있다. 또한 이 책은 추가로 읽어 볼 수 있는 많은 참고 문헌을 포함한다.
이 책의 구성
1장, ‘웹 기술과 HTTP’는 이 책을 이해하는 데 필요한 배경 지식을 제공한다. 인터넷에 대한 기본 지식만 있는 사람도 이해할 수 있을 것이다.
2장, ‘HTTP/2를 향한 여정’은 HTTP/1.1의 문제와 HTTP/2가 필요한 이유를 살펴본다.
3장, ‘HTTP/2로 업그레이드’는 웹사이트에 HTTP/2를 활성화하는 업그레이드 옵션과 이 과정에 관련된 몇 가지 복잡한 사항을 논한다. 이 장의 내용은 유명한 웹 서버 Apache, nginx, IIS에 대한 설치 지시를 제공하는 부록에서 보충한다.
4장, ‘HTTP/2 프로토콜 기초’는 HTTP/2 프로토콜의 기초, HTTP/2 연결 설정 방법과 HTTP/2 프레임의 기본 형식을 설명한다.
5장, ‘HTTP/2 푸시의 구현’은 프로토콜의 새로운 부분으로 웹사이트 소유자가 브라우저가 요청하지 않은 리소스를 선행적으로 보낼 수 있게 허용하는 HTTP/2 푸시를 다룬다.
6장, ‘HTTP/2 최적화’는 HTTP/2가 웹 개발 관행에 의미하는 바를 살펴본다.
7장, ‘고급 HTTP/2 개념’은 HTTP/2 사양의 상태, 흐름 제어, 우선 순위 등 나머지 부분을 다루고 구현에서 HTTP/2 적합성의 차이를 살펴보겠다.
8장, ‘HPACK 헤더 압축’은 HTTP/2의 HTTP 헤더 압축에 사용되는 HPACK 프로토콜을 자세히 살펴본다.
9장, ‘TCP, QUIC, HTTP/3’는 TCP, QUIC, HTTP/3를 살펴본다. 기술은 결코 잠들지 않으며, 이제 HTTP/2를 사용할 수 있으므로 개발자들은 벌써 HTTP/2를 개선할 방법을 찾고 있다. 이 장은 HTTP/2가 풀지 못한 비효율성과 그것들이 후임자인 HTTP/3에서 어떻게 개선될 수 있을지를 논한다.
10장, ‘HTTP가 나아가는 방향’은 HTTP/2 표준화 과정 중 제기된 문제에 대한 반성과 이러한 문제가 실제 문제가 된 것으로 증명됐지 여부를 포함해 HTTP/3 이후 HTTP를 개선할 수 있는 다른 방법을 살펴본다.
목차
목차
- 1부. HTTP/2로의 전환
- 1장. 웹 기술과 HTTP
- 1.1 웹의 동작 방식
- 1.1.1 인터넷과 월드 와이드 웹
- 1.1.2 웹을 돌아다닐 때 일어나는 일
- 1.2 HTTP란 무엇인가?
- 1.3 HTTP의 문법과 역사
- 1.3.1 HTTP/0.9
- 1.3.2 HTTP/1.0
- 1.3.3 HTTP/1.1
- 1.4 HTTPS 개론
- 1.5 HTTP 메시지를 보고 보내고 받는 용도로 쓰이는 도구
- 1.5.1 웹 브라우저의 개발자 도구 사용
- 1.5.2 HTTP 요청 전송
- 1.5.3 HTTP 요청을 보고 전송하기 위한 기타 도구
- 요약
- 2장. HTTP/2를 향한 여정
- 2.1 HTTP/1.1과 현재의 월드 와이드 웹
- 2.1.1 HTTP/1.1의 근본적인 성능 문제
- 2.1.2 HTTP/1.1에 대한 파이프라이닝
- 2.1.3 웹 성능 측정에 대한 폭포수 다이어그램
- 2.2 HTTP/1.1 성능 문제의 회피책
- 2.2.1 여러 HTTP 연결 사용
- 2.2.2 요청 수 줄이기
- 2.2.3 HTTP/1 성능 최적화 요약
- 2.3 HTTP/1.1의 기타 이슈
- 2.4 실세계 예제
- 2.4.1 예제 웹 사이트 1: amazon.com
- 2.4.2 예제 웹 사이트 2: imgur.com
- 2.4.3 이것은 정말로 얼마나 큰 문제인가?
- 2.5 HTTP/1.1에서 HTTP/2로의 이동
- 2.5.1 SPDY
- 2.5.2 HTTP/2
- 2.6 HTTP/2의 웹 성능
- 2.6.1 HTTP/2의 파워에 대한 극단적인 사례
- 2.6.2 HTTP/2 성능 개선에 대한 기대치 설정
- 2.6.3 잠재적인 안티패턴으로서의 HTTP/1.1에 대한 우회적 성능 해법
- 요약
- 3장. HTTP/2로 업그레이드
- 3.1 HTTP/2 지원
- 3.1.1 브라우저 측면에서의 HTTP/2 지원
- 3.1.2 서버에 대한 HTTP/2 지원
- 3.1.3 HTTP/2가 지원되지 않는 경우의 대비책
- 3.2 웹 사이트에 HTTP/2를 활성화시키는 방법
- 3.2.1 웹 서버상의 HTTP/2
- 3.2.2 역방향 프록시를 사용한 HTTP/2
- 3.2.3 CDN을 통한 HTTP/2
- 3.2.4 HTTP/2 구현 요약
- 3.3 HTTP/2 설정 문제 해결
- 요약
- 2부. HTTP/2 사용
- 4장. HTTP/2 프로토콜 기초
- 4.1 HTTP/1.2가 아니라 HTTP/2인 이유
- 4.1.1 텍스트 대신 바이너리
- 4.1.2 동기적이기보다는 다중화된 프로토콜
- 4.1.3 스트림 우선순위화와 흐름 제어
- 4.1.4 헤더 압축
- 4.1.5 서버 푸시
- 4.2 HTTP/2 연결이 설정되는 방식
- 4.2.1 HTTPS 협상 사용
- 4.2.2 HTTP Upgrade 헤더 사용
- 4.2.3 사전 지식 사용
- 4.2.4 HTTP 대안 서비스
- 4.2.5 HTTP/2 프레퍼스 메시지
- 4.3 HTTP/2 프레임
- 4.3.1 HTTP/2 프레임 보기
- 4.3.2 HTTP/2 프레임 형식
- 4.3.3 HTTP/2 메시지 흐름을 예제로 살펴보기
- 4.3.4 기타 프레임
- 요약
- 5장. HTTP/2 푸시의 구현
- 5.1 HTTP/2 서버 푸시란?
- 5.2 푸시 방식
- 5.2.1 푸시에 HTTP link 헤더 사용
- 5.2.2 HTTP/2 푸시 보기
- 5.2.3 링크 헤더를 사용해 다운스트림 시스템에서 푸시
- 5.2.4 이른 시점에 푸시
- 5.2.5 다른 방식의 푸시
- 5.3 HTTP/2가 브라우저에서 동작하는 방식
- 5.3.1 푸시 캐시 동작 방식 확인
- 5.3.2 RST_STREAM으로 푸시 거부
- 5.4 조건부로 푸시하는 방법
- 5.4.1 서버 측에서 푸시 추적
- 5.4.2 HTTP 조건적 요청 사용
- 5.4.3 쿠키 기반 푸시 사용
- 5.4.4 캐시 다이제스트 사용
- 5.5 푸시할 대상
- 5.5.1 무엇을 푸시할 수 있는가?
- 5.5.2 무엇을 푸시해야 하는가?
- 5.5.3 푸시 자동화
- 5.6 HTTP/2 푸시 문제 해결
- 5.7 HTTP/2 푸시의 성능 영향
- 5.8 푸시와 프리로드
- 5.9 HTTP/2 푸시에 대한 기타 사용 사례
- 요약
- 6장. HTTP/2 최적화
- 6.1 HTTP/2가 웹 개발자에게 의미하는 것
- 6.2 HTTP/1.1 최적화 중 일부는 이제 안티패턴인가?
- 6.2.1 HTTP/2 요청에는 여전히 비용이 든다
- 6.2.2 HTTP/2에는 한계가 있다
- 6.2.3 더 큰 리소스에는 압축이 더 효율적이다
- 6.2.4 대역폭 제한과 리소스 경합
- 6.2.5 샤딩
- 6.2.6 인라이닝
- 6.2.7 결론
- 6.3 HTTP/2에서도 여전히 적절한 웹 성능 기법
- 6.3.1 전송되는 데이터의 양 최소화
- 6.3.2 데이터 재전송 방지용 캐시 사용
- 6.3.3 서비스 워커가 네트워크의 부하를 더 줄일 수 있다
- 6.3.4 필요하지 않은 것을 보내지 말라
- 6.3.5 HTTP 리소스 힌트
- 6.3.6 최종 구간에 대한 대기시간 단축
- 6.3.7 HTTPS 최적화
- 6.3.8 HTTP와 연관되지 않은 웹 성능 기법
- 6.4 HTTP/1.1과 HTTP/2 모두 최적화
- 6.4.1 HTTP/2 트래픽 측정
- 6.4.2 서버 측의 HTTP/2 지원 감지
- 6.4.3 클라이언트 측의 HTTP/2 지원 감지
- 6.4.4 연결 통합
- 6.4.5 HTTP/1.1 사용자를 위해 언제까지 최적화할 것인가
- 요약
- 3부. 고급 HTTP/2
- 7장. 고급 HTTP/2 개념
- 7.1 스트림 상태
- 7.2 흐름 제어
- 7.2.1 흐름 제어 예제
- 7.2.2 서버에 흐름 제어 설정
- 7.3 스트림 우선순위
- 7.3.1 스트림 의존성
- 7.3.2 스트림 가중치
- 7.3.3 우선순위 지정이 복잡해야 하는 이유
- 7.3.4 웹 서버와 브라우저에서의 우선순위 지정
- 7.4 HTTP/2 적합성 테스팅
- 7.4.1 서버 적합성 테스팅
- 7.4.2 클라이언트 적합성 테스팅
- 요약
- 8장. HPACK 헤더 압축
- 8.1 헤더 압축이 필요해진 이유
- 8.2 압축이 동작하는 방식
- 8.2.1 조회 테이블
- 8.2.2 더 효율적인 인코딩 기법
- 8.2.3 룩백 압축
- 8.3 HTTP 본문 압축
- 8.4 HTTP/2의 HPACK 헤더 압축
- 8.4.1 HPACK 정적 테이블
- 8.4.2 HPACK 동적 테이블
- 8.4.3 HPACK 헤더 유형
- 8.4.4 허프만 코딩 테이블
- 8.4.5 허프만 인코딩 스크립트
- 8.4.6 허프만 인코딩이 항상 최적이 아닌 이유
- 8.5 HPACK 압축의 실세계 예제
- 8.6 클라이언트 구현과 서버 구현에서의 HPACK
- 8.7 HPACK의 가치
- 요약
- 4부. HTTP의 미래
- 9장. TCP, QUIC, HTTP/3
- 9.1 TCP의 비효율성과 HTTP
- 9.1.1 HTTP 연결 생성 시 설정 지연
- 9.1.2 TCP의 혼잡 제어 비효율성
- 9.1.3 HTTP/2에 대한 TCP 비효율성의 영향
- 9.1.4 TCP 최적화
- 9.1.5 TCP와 HTTP의 미래
- 9.2 QUIC
- 9.2.1 QUIC의 성능상 이점
- 9.2.2 QUIC과 인터넷 스택
- 9.2.3 UDP의 성격과 QUIC이 UDP 기반인 이유
- 9.2.4 QUIC 표준화
- 9.2.5 HTTP/2와 QUIC 사이의 차이점
- 9.2.6 QUIC 도구
- 9.2.7 QUIC 구현
- 9.2.8 QUIC을 사용해야 할까?
- 요약
- 10장. HTTP가 나아가는 방향
- 10.1 HTTP/2의 논란과 HTTP/2가 고치지 못한 것
- 10.1.1 SPDY에 대한 논쟁
- 10.1.2 HTTP의 개인 정보 문제와 상태
- 10.1.3 HTTP와 암호화
- 10.1.4 전송 프로토콜 문제
- 10.1.5 HTTP/2는 지나치게 복잡하다
- 10.1.6 HTTP/2는 임시방편이다
- 10.2 실세계에서의 HTTP/2
- 10.3 HTTP/2의 향후 버전과 HTTP/3이나 HTTP/4가 가져올 것
- 10.3.1 QUIC이 HTTP/3인가?
- 10.3.2 HTTP 바이너리 프로토콜의 추가 발전
- 10.3.3 전송 계층 위에서 진화하는 HTTP
- 10.3.4 무엇이 새로운 HTTP 버전을 필요로 할까?
- 10.3.5 향후 HTTP 버전이 도입될 방법
- 10.4 더 일반적인 전송 계층으로서의 HTTP
- 10.4.1 HTTP 의미론과 메시지를 사용해 비웹 트래픽 전달
- 10.4.2 HTTP/2 바이너리 프레이밍 계층 사용
- 10.4.3 HTTP를 사용해 다른 프로토콜 시작
- 요약
- 부록. 일반적인 웹 서버를 HTTP/2로 업그레이드
- A.1 HTTP/2를 지원하도록 웹 서버 업그레이드
- A.1.1 아파치
- A.1.2 nginx
- A.1.3 마이크로소프트 인터넷 정보 서비스(IIS)
- A.1.4 기타 서버
- A.2 역방향 프록시 서버를 통한 HTTP/2 설정
- A.2.1 아파치
- A.2.2 nginx