Rest API가 HTTP/1.0의 특징과 연관이 있듯 gRPC에 대해 알아보니 HTTP/2.0의 특징과 큰 연관이 있는 듯 하다. 근본이 되는 기술을 공부해 두는게 좋겠지.. 면접에서도 종종 나오는 질문인듯하고. 아자아자!
HTTP란?
HTTP(Hypher Text Transfer Protocol)란 웹에서 데이터를 주고 받기 위한 프로토콜 즉, 일종의 약속이다. 주로 TCP/IP 전송계층을 사용한다.(Google님이 HTTP를 3.0버전을 UDP를 사용하여 제작했다. 정보를 찾아보니 많은 장점이 있던데 이를 통해 또 어떤 기술이 생겨날지 기대된다.)
HTTP의 특징
- TCP/IP 전송 계층을 사용하는 애플리케이션 계층의 프로토콜
- 비연결성 프로토콜
- Client 측과 Server측의 request, response를 통해 통신
사용하는 요청 메시지
- PUT : 특정 리소스 전체를 수정하는 데 사용.
- PATCH : 리소스의 일부를 수정하는 데 사용.
- GET : 특정 리소스의 출력 요청. 데이터를 받기만 함.
- POST : 특정 리소스에 엔티티를 제출할 때 사용.
- DELETE : 특정 리소스 삭제.
- HEAD : 응답 본문을 제외한 데이터 요청.
- CONNECT : 목적 리소스로 식별되는 서버로 터널을 맺음.
- OPTIONS : 목적 리소스의 통신을 설정하는데 사용.
사용되는 응답 코드
- 1xx : 요청을 받았으며 프로세스를 계속 진행.
- 2xx : 요청을 성공적으로 받았음.
- 200 OK
- 201 Created
- 202 Accepted
- 3xx : 요청 완료를 위해 추가 작업 조치가 필요.(리다이렉션)
- 4xx : 요청을 처리할 수 없음(클라이언트 오류)
- 400 Bad Request
- 403 Forbidden
- 404 Not Found
- 5xx : 유효한 요청에 대한 충족을 실패(서버 오류)
- 500 Internal Server Error
- 502 Bad Gateway
- 503 Service Unavailable
버전 별 HTTP 전송 데이터
HTTP/1.1
HTTP/2
v1.1 은 메세지를 일반 텍스트 형식으로 보냈으나 v2는 Binary Framing 계층이 추가됐고 이를 통해 Header frame과 Data frame을 바이너리로 인코딩 후 전송.
버전 별 HTTP 특징
HTTP/1.1 이전 버전 단점
- 기존의 HTTP/1 버전은 1Request & 1Response Per Connection, 즉, 연결 한번에 하나씩의 데이터 교환만이 가능하였다. 데이터를 교환하고자 할 때 마다 새로운 연결을 하여야 하였으므로 성능이 좋지 않았고 서버 부하상태에 들어가기 쉬웠다.
HTTP/1.1 장점
- 특정 시간동안 커넥션을 닫지 않는 방식인 Persistent Connection 기능을 도입하였다.
- 하나의 커넥션에서 응답을 기다리지 않고 원하는 요청을 한번에 보내 서버측에서 이를 순차적으로 처리해 처리 결과만을 보내는 Pipelining 기능이 도입됐다. --> 지연시간 단축
HTTP/1.1 단점
- 한번에 보낸 요청 중 먼저 온 요청의 처리가 되지 않는다면 그 이후의 요청이 처리되지 않는 문제점이 있다.(Head Of Line Blocking)
- Header가 같을 것이라 확신이 드는 요청 또한 모든 Header 값을 전송해야 한다.
HTTP/2 장점
- 추가된 Binary Framing 계층을 통해 메세지를 HEADER frame과 DATA frame으로 분리하여 데이터를 교환함으로 전송 속도가 증가하고 오류가 날 확률이 낮아진다.
- 프레임으로 쪼개어진 메세지가 전송되기에 Request, Response에 순서가 의미가 없어짐으로 Head Of Line Blocking 문제가 해결된다.
- 리소스간에 가중치를 줄 수 있어 데이터 우선순위를 지정할 수 있다.
- Server 측 에서 Client가 다음에 요청할 데이터를 예측하여 미리 보내 줄 수 있다.(Server Push)
- 중복이 있는 Header일 경우 static dynamic table을 이용하여 허프만 인코딩을 통해 압축이 가능하다. 헤더의 크기가 85% 줄어드는 효과를 볼 수 있다.
결론
어마어마한 효율성 증가로 생각된다. gRPC 공부하자.
참고 : https://www.youtube.com/watch?v=xcrjamphIp4&t=585s (쿨라임님의 10분 테코톡을 참고하였습니다.)
'Study > Server' 카테고리의 다른 글
[Server] Go Web Server HTTPS 적용하기 (0) | 2022.06.07 |
---|---|
[Server] OAuth 알고 쓰기 (0) | 2022.06.02 |
[Server] 인증(Authentication)과 인가(Authorization), 그리고 JWT(JSON Web Token) (0) | 2022.05.01 |
[Server] REST API란? REST API 알고 쓰기 (0) | 2021.08.31 |
[Server] APACHE와 NGINX의 특징과 차이 (0) | 2021.08.29 |