반응형
http
- http 메시지에 모든 것을 전송할 수 있다.
- 정적인 컨텐츠 : html, text, image, 음성, 영상, 파일…
- API 형태 : json, xml
- 처음엔 일부 컨텐츠들을 전송하는 규격으로 시작했지만 이제는 많은 형태의 데이터 전송이 가능해지고 사용하게 되었다.
http 역사
- 0.9, 1.0, 1.1, 2, 3, ...
- tcp: http/1.1, http
- udp: http/3
- http/2, http/3 점점 개선 중
http 특징
- 클라이언트 - 서버 구조
- 무상태 프로토콜, 비연결성
- 단순함, 확장 가능
클라이언트 - 서버 구조
- 클라이언트, 서버 각각에 대해서 어떤 개선점들이 서로에 대해 영향을 받지 않음
- 같이 성장할 수 있어 유연함
무상태 프로토콜
- 서버가 클라이언트 상태를 보존하지 않음
- stateful이라면 요청 중간에 서버가 변경되면 장애가 됨.
- 증설시 상태 정보를 다른 서버에 미리 알려줘야 함.
- stateless라면 서버 증설이 가능함.
- 클라이언트 요청이 증가해도 유지할 상태가 없기 때문에
무한정 서버를 증설할 수 있어짐.
- 클라이언트 요청이 증가해도 유지할 상태가 없기 때문에
무상태를 유지할 수 없는 경우
- stateless를 지향하지만, 실무적으로는 꼭 상태가 필요한 경우가 있음.
- 무상태인 경우
- 로그인이 필요 없는 단순한 서비스 소개 화면
- 상태 유지가 꼭 필요한 경우
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지.
- 일반적으로는 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지한다.
- 상태 유지는 비용이 비싸기 때문에 최소한으로만 유지해서 사용해야 함.
비연결성
- 연결을 유지하는 모델 ↔ 연결을 유지하지 않는 모델
- 연결을 유지하는 모델은 클라이언트가 많을수록 유지해야 하는 상태가 많아져 서버의 자원을 점점 더 많이 쓰게 됨
- 비연결성의 장점 : 연결을 유지하지 않는 모델은 클라이언트가 많더라도 서버가 동시에 유지해야 하는 자원이 많지 않음
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
- 서버 자원을 효율적으로 사용 가능
비연결성의 단점
- tcp/ip 연결을 새로 맺어야됨.
- 웹 브라우저로 사이트를 요청하면 수많은 자원이 함께 다운로드됨.
같은 리소스를 재요청할 경우 낭비됨. - http 초기 - 매번 연결을 맺고 종료하고 재연결해서 낭비적이었음.
- 이후 개선된 http 연결에서는 연결, 종료를 묶고 모든 리소스를 요청해 받는거로 개선됨.
- persistent connections로 문제 해결.
- 연결을 재활용함 (keep-alive)
서버 개발자들이 어려워하는 업무
- 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
- 선착순 이벤트, 명절 ktx 예약, 학과 수업 등록
- 예시) 상태가 없는 정적 페이지를 하나 보여주고 티켓팅을 하게 함.
HTTP 메세지
- http 메세지에 모든 것을 전송한다.
- http 메시지 구조
- start-line 시작 라인
- header 헤더
- empty line 공백 라인
- message body
시작 라인
- 요청 메시지
- request-line / status-line로 구성
- ex) GET /search?q=hello&hl=ko HTTP/1.1
- request-line = method 공백 request-target 공백 HTTP-version 엔터
- http 메서드
- 요청 대상
- 절대경로, /로 시작하는 경로
- http version
- request-line / status-line로 구성
- 응답 메시지
- start-line = request-line / status-line
- http version status-code reason-phrase
- reason-phrase : 사람이 이해할 수 있는 짧은 상태 메세지
- start-line = request-line / status-line
http 헤더
- http 전송에 필요한 모든 부가정보
- 표준 헤더가 매우 많고, 필요시 임의의 헤더 추가 가능
http 메시지 바디
- 실제 전송할 데이터
- 바이트로 표현할 수 있는 모든 데이터
느낀점
- 내용을 공부하다 보니, 나중에 같은 시간에 딱 맞추어 발생하는 대용량 트래픽을 처리하는 애플리케이션을 사이드 프로젝트로 만들어보면 재밌을듯하다.
참고 자료
반응형
'개발 > web' 카테고리의 다른 글
[http] http 메소드 활용 (0) | 2024.01.07 |
---|---|
[http] http 메소드, 메소드 속성 (0) | 2024.01.07 |
[spring] rest api 응답 컨텐츠 압축하기 (1) | 2024.01.01 |
[http] URI와 웹 브라우저 요청 흐름 (0) | 2023.12.31 |
[http] TCP, UDP (1) | 2023.12.29 |