[TIL - 0901] HTTP/2 간단하게 알아보기, 도커 문서 읽기

간단하게 HTTP/2 알아보기

HTTP의 단점과 HTTP/1.1의 해결방법 그리고 단점

  • 무거운 헤더 : 헤더를 통해 전달되는 데이터(key-value) 모두 무거운 존재 - 해당 값들을 모두 서버에 보내줘야하고, 서버는 또 필요한 헤더를 설정해서 클라이언트에 보내줘야함
  • 3way handshake를 거쳐 형성되는 TCP 커넥션을 한번의 리소스를 응답받은 뒤 끊어버림 : 주고 받아야할 리소스가 많아질수록 커넥션이 많이 필요하게됨 - 그만큼 커넥션을 맺기위한 사전 작업 또한 계속해서 하게됨
    • HTTP(TCP 기반) : 직렬적(순서대로), 여러 리소스가 있으면 요청하고 응답받고 순서대로 하나씩 진행
    • HTTP/1.1 해결 방법 : 파이프라이닝
  • 파이프라이닝 : 커넥션을 유지하면서, 이전 리소스 요청에 대한 응답을 기다리지않고 다음 리소스에 대한 요청을 날림
    • 단순히 커넥션 재활용(Keep-Alive : 타임아웃 걸어둠)만 하는 것이 아니라 응답을 신경쓰지않고 요청부터 다 날림
    • 단점 : 응답을 받을 때에는 순차적으로 받기때문에 앞서서 요청한 결과가 아직 응답되지않았을 경우 모두 대기상태, 구현이 어렵다함

HTTP/2 : 성능 개선

  • TLS 기반 : HTTPS(보안 강조)
  • 단순히 요청을 보내고 응답 기다리지않고, 다음 요청을 보내는 구조가 아님(FIFO)
  • 스트림, 프레임 : 해당 내용을 좀 잘 파악해봐야겠음
    • HTTP 메세지를 프레임 단위로 나눔 : 헤더 프레임 데이터 프레임
  • 헤더 압축 : 중복되는 헤더를 인덱스로 바꿔치기 하는 것으로 파악됨 - 조금 더 파악해보기
  • 서버 푸시 : 필요한 리소스에 대해서 클라이언트가 요청을 보내기 전에 서버가 알아서 내려줌 - JS, CSS
    • latency를 줄일 수 있음 : 요청에 대한 응답 속도(완료)
    • 그렇다면 html에 연관된 리소스를 어떻게 알고있나? 관련 리소스 정보를 어딘가에 기록해두나? html와 연결된 리소스
  • springboot http2 setting - embedded tomcat 설정
    • tomcat8.5 지원 : spring boot 2.x 의 내장 톰캣 버젼
    • 클라이언트, 서버 모두 지원해야함

도커 문서 읽어보기

docker-compose

  • 도커 컨테이너가 프로덕션 환경에서 어떻게 동작해야할지 정함 : 서비스(프로덕션 환경에서의 컨테이너를 지칭)에 필요한 컨테이너 인스턴스 개수, 자원 할당(CPU, 메모리), 포트 설정
    • 설정된 포트와 짧게 짧게 붙음 : 하나의 포트로 여러 인스턴스가 붙어서 처리(로드밸런싱)
    • 서비스는 하나인데, 컨테이너 인스턴스(task)가 여러개
    • docker-compose.yml
// 매번 다른 컨테이너 인스턴스
Hello World!
Hostname: c0ec37e6ac0b

Hello World!
Hostname: dc347dfebb06

Hello World!
Hostname: e7f59431ddd2

Hello World!
Hostname: 84e376eb2308

// 처음과 같은 인스턴스
Hello World!
Hostname: c0ec37e6ac0b


> docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS
j3vjmsafet8e        getstartedlab_web   replicated          5/5                 jinbro/get-started:part2   *:80->8090/tcp

docker swarm : 실제로 운영해보지않으면 확 와닿지 않음

  • 도커를 실행하고 있는(컨테이너를 띄운) 머신을 클러스터링한 것을 swarm이라고 함 : 머신의 경우 리얼일 수도 가상일 수도 있음
    • 이전까지 single host 모드로 사용한 것
    • docker-machine : 가상 머신 생성(도커가 설치된), 관리할 수 있음
  • swarm manager : 클러스터링 매니져, swarm에 포함된 node에 도커 관련 명령어를 내리기위해서 swarm-manager를 통해야함
    • node : 클러스터링 된 머신 - manager(+ worker)와 worker로 나뉨
    • 클러스터링 후 컨테이너 할당하는 모드(전략)가 따로 있음 : global(머신당 적어도 1개의 컨테이너 인스턴스를 가짐), emptiest node()
  • docker swarm init : swarm 생성 - 해당 node가 swarm manager가 됨
  • docker swarm join : 생성되어있는 swarm에 join함