(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.
1. 모든 것이 HTTP
일반적으로 휴대폰, 컴퓨터 등에서 필요한 데이터는 서버에 요청하여 받아온다. 네트워크를 통해 서버로부터 데이터를 가져오기 위한 통신으로 크게 HTTP 통신과 Socket 통신 2가지가 있다.
1. HTTP(HyperText Transfer Protocol)
HTTP는 하이퍼 텍스트를 주고 받기 위한 규칙(통신 규약)이다.
2. HTTP 메시지에 모든 것을 전송
1) 거의 모든 형태의 데이터 전송 가능
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML(API)
2) 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용
실무에서 통신할 때 TCP 프로토콜을 직접 사용해서 통신하는 경우는 게임 서버를 제외하고는 거의 없다.
3. HTTP 역사
1) HTTP/0.9 (1991년): GET 메서드만 지원, HTTP 헤더X
2) HTTP/1.0 (1996년): 메서드, 헤더 추가
3) HTTP/1.1 (1997년): 가장 많이 사용, 우리에게 가장 중요한 버전
- RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
4) HTTP/2 (2015년): 성능 개선
5) HTTP/3 (진행중): TCP 대신에 UDP 사용, 성능 개선
4. HTTP 기반 프로토콜
1) TCP: HTTP/1.1, HTTP/2
2) UDP: HTTP/3
- 현재 HTTP/1.1 주로 사용, HTTP/2, HTTP/3도 점점 증가
<HTTP 버전 확인해보기>
실제로 F12 를 누르고 Network > protocol 부분을 보면 어떤 HTTP 버전으로 데이터들을 받았는지 알 수 있다.
5. HTTP 특징
1) 클라이언트 서버 구조
2) 무상태 프로토콜(Stateless), 비연결성
3) HTTP 메시지
4) 단순함, 확장 가능
2. 클라이언트 서버 구조
Request Response 구조
- 클라이언트는 서버에 요청을 보내고 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
클라이언트와 서버를 개념적으로 분리하는 것이 중요하다!!
1) 클라이언트 - UI, UX, 사용성에 집중
2) 서버 - 비즈니스 로직, 데이터 처리에 집중
→ 클라이언트, 서버는 각각 독립적으로 진화 가능
[참고] https://bentist.tistory.com/35
[참고] https://kotlinworld.com/75
1. 모든 것이 HTTP 질문 정리
Q. 실무에서 TCP로 직접 서버간의 통신을 하는 경우는 거의 없다고 했는데, 이는 socket 방식인가?
A. Socket 방식은 TCP/UDP 프로토콜을 직접 사용하여 통신하는 경우다.
즉, HTTP 메시지를 이용하지 않고 직접 TCP 계층에서 3 way-handshake를 하여 연결한다.
[출처] https://www.inflearn.com/questions/273456
[출처] https://www.inflearn.com/questions/416812
2. 클라이언트 서버 구조 질문 정리
Q. 클라이언트는 요청을 해야만 응답을 받을 수 있는가?
기본적인 동작은 클라이언트가 요청하고 서버가 응답하는 구조이다.
그런데 예를 들어, 댓글 알림처럼 클라이언트는 어떠한 요청도 하지 않고 서버가 보내주는 데이터를 받는 경우는 HTTP 통신만으로는 기술적인 한계가 있다. 그래서 웹 소켓같은 기술들이 있다.
[출처] https://www.inflearn.com/questions/167813
'Spring > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - 비 연결성(connectionless) (0) | 2022.05.27 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - Stateful, Stateless (2) | 2022.05.27 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 02. URI와 웹 브라우저 요청 흐름 - URI, 웹 브라우저 요청 흐름 (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - PORT, DNS (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - TCP,UDP (2) | 2022.05.26 |