1주차

  1. HTTP 가 어떻게 구성되어있는지 이해하기

  2. 직접 웹 서버 구현하기

목차

keyword

HTTP의 이해

  • HTTP(Hypertext Transfer Protocol)

  • HTTP와 HTTPS의 차이(TLS)

  • 클라이언트-서버 모델

  • stateless와 stateful

  • HTTP Cookie와 HTTP Session

  • HTTP 메시지 구조

    • HTTP 요청(Request)와 응답(Response)

      • multipart/form-data

    • HTTP 요청 메서드(HTTP request methods)

      • 멱등성

    • HTTP 응답 상태 코드(HTTP response status code)

      • 리다이렉션

HTTP Client

  • TCP/IP 통신

  • TCP와 UDP

  • Socket과 Socket API 구분

  • URI와 URL

  • 호스트(host)

    • IP 주소

    • Domain name

    • DNS

  • 포트(port)

  • path(경로)

  • Java text blocks

  • Java InputStream과 OutputStream

  • Java try-with-resources

HTTP Server

  • Java ServerSocket

  • Blocking vs Non-Blocking

Java HTTP Server

  • Java HTTP Server

  • Java NIO

  • Java Lambda expression(람다식)

    • Java Functional interface(함수형 인터페이스)

Spring Web MVC

  • Spring Boot

  • Spring initializer

  • Web Server와 Web Application Server(WAS)

    • Tomcat

  • Model-View-Controller(MVC) 아키텍처 패턴

  • 관심사의 분리(Seperation of Concern)

  • Spring MVC

  • Java Annotation

  • Spring Annotation

    • @RestController

      • @Controller

      • @ResponseBody

    • @GetMapping

      • @RequestMapping

TODO

각 키워드가 페이지에 녹았는지 점검하기

참고하기

서적

HTTP의 역사

HTTP/0.9

최초의 HTTP 스펙. 원래 버전이 있던 게 아니라, HTTP/1.0이 나오면서 최초의 스펙을 0.9 버전이라 부르게 됨.

요청은 “ ”, 응답은 “”로 매우 단순함.

HTTP/1.0

Start-line, Headers, Body로 구성된 HTTP 메시지 구조를 확립.

HTTP/1.1

최초의 표준 프로토콜. 지속적으로 개선됨.

HTTP/2

Google에서 제안한 SPDY 프로토콜을 기반으로 함. 성능을 위해 HTTP의 구현만 바꾸고 HTTP/1.1의 의미 체계를 그대로 사용하기 때문에, 기반 라이브러리 등만 교체하면 기존 프로그램을 그대로 사용할 수 있음. TLS를 강제하는 건 아니지만, 모든 웹 브라우저가 TLS을 사용하기 때문에 사실상 필수적이다.

여러 요청에 대해 단일 소켓을 사용한다. 사람이 읽기는 쉽지만 비효율적인 텍스트 기반에서 성능과 효율성에 무게를 둔 바이너리, 프레임, 스트림 기반으로 변경. 헤더 압축을 위해 HPACK 사용.

Start-line은 Headers 프레임으로 통합되는데, 예를 들어 “GET / HTTP/1.1”은 “:scheme: https”,“:method: GET”, “:path: /” 같은 식으로 헤더 프레임에 들어가게 됨. “HTTP/1.1 200 OK”는 사람이 읽는 용도로만 쓰이던 텍스트 메시지를 제거하고 “:status: 200” 하나로 헤더 프레임에 들어감.

HTTP/1.1에서 성능 최적화를 위해 도입했던 몇몇 기법이 HTTP/2에선 오히려 역효과를 내는데, Cookie-less Domain이나 CSS Image Sprite 같은 게 대표적.

https://d2.naver.com/helloworld/140351

https://blog.theodo.com/2019/09/cookieless-domain-http2-world/

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS

HTTP/3

UDP 기반의 QUIC 프로토콜 사용. HTTP/2가 응용 계층만 바꾼 거라면, HTTP/3는 전송 계층까지 바꿈.

https://docs.google.com/document/d/1RNHkx_VvKWyWg6Lr8SZ-saqsQx7rFV-ev2jRFUoVD34/view

https://blog.cloudflare.com/ko-kr/http3-the-past-present-and-future-ko-kr/

https://www.slideshare.net/secret/18Rh7yI0cXocCE

HTTP 클라이언트 도구

Last updated