인터넷으로
서버
와클라이언트
가데이터를 주고 받을 수 있는 프로토콜
- 거의 모든 형태의 데이터를 전송할 수 있음 (HTML, text, 이미지, 음성, JSON, XML 등등)
- 역사
- HTTP/0.9, HTTP/1.0
- GET 메서드만 지원
- HTTP 헤더 x
HTTP/1.1
- TCP 프로토콜 기반
- 가장 중요. 이것만 잘 알아도 됨
- HTTP/2
- TCP 프로토콜 기반
- 성능 개선
- HTTP/3
- TCP 대신 UDP 사용
- 성능 개선
- HTTP/0.9, HTTP/1.0
클라이언트/서버 구조
를 가짐Stateless
&비연결성
- 단순하고 확장이 쉬움
- 서버가 클라이언트의 상태를 보존하지 않음
- 아무 서버나 호출해도 됨
스케일 아웃
(수평 확장) 유리-
클라이언트의 요청이 증가하면 서버만 추가하면 됨
-
서버가 클라이언트의 상태를 보존하지 않으므로 어떤 서버든 클라이언트의 요청에 응답할 수 있음
⇒ 무한 서버 증설 가능
-
-
모든 것을 stateless로 설계하기는 어려움
- 로그인같이 상태를 유지해야 하는 경우 stateful 사용 (쿠키, 세션)
- stateless는 클라이언트가 데이터를 많이 보내야 한다는 단점이 있음
-
stateful을 최소로 하는 설계를 해야함
→
최대한 stateless하게
설계해야 함
- 여러 대의 클라이언트와 연결하는 서버라면 연결을 유지하는데 많은 자원을 소비하게됨
- 서버의 응답이 끝나면 연결을 끊어 최소한의 자원으로 서버를 유지할 수 있음
- 여러 클라이언트가 서비스를 사용해도 동시에 처리를 요구하는 클라이언트는 많지 않음
- 효율적으로 서비스 운영이 가능
- 클라이언트가 많은 자원(HTML, 이미지, css...)을 요청하는 경우 하나의 자원을 보낼때 마다 연결을 새로 맺어야 함. (3 way handshake)
-
method (sp) request-target (sp) HTTP-version (crlf)
method
→ HTTP 메소드 (다음장에서 자세히)request target
→ 절대경로[?쿼리 파라미터]- 절대 경로 : ‘/’로 시작하는 경로
-
HTTP-version (sp) status-code (sp) reason-phrase (crlf)
status-code
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- reason phrase → 사람이 이해할 수 있는 짧은 상태 코드 설명
HTTP 전송에 필요한 모든
부가 정보
- new line
- CRLF
- CR (Carriage Return)
- 현재 줄에서 커서를 맨 앞으로 옮기는 동작
- \r
- LF (Line Feed)
- 커서의 위치는 그대로 두고 한 라인을 위로 올리는 동작
- \n
- CR (Carriage Return)
- 실제 전송할 데이터
- byte로 표현할 수 있는 모든 데이터 전송 가능
- 클라이언트의 요청 메시지도 바디를 가질 수 있음 (ex. 신규 정보 등록)