어떤 상태의 Http를 사용할까? API url설계는 어떻게 할까?
등등 백엔드 개발자는 HTTP에 관한 고민을 많이 한다.
실무에 꼭 필요한 HTTP 기본지식을 정리해볼까 한다.
프로토콜 계층

1. ✅IP(Internet Protocol)
1.1. 특징
- 지정한 IP 주소에 데이터 전달
- 패킷(Packet) 이라는 통신 단위로 데이터 전달
- 출발지ip, 목적지ip 로 패킷 전달
- 수많은 노드들을 걸쳐서 목적지ip 로 도착
1.2. IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷이 사라져도 알 방법이 없음
- 패킷의 순서가 보장되지 않음
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 올바르게 전달해주지 못함
- 패킷 소실
- 중간에 서버에서 문제가 있따면 패킷이 유실되며 소실되도 클라이언트는 알지 못함
- 패킷 전달 순서 문제 발생
- 바이트 크기에 쪼개진 패킷들이 서로 다른 노드를 탈 수 있다.
- 무수히 타다보면 순서가 바뀌어서 도착할 수 있음
IP의 정보로 바로 데이터를 보내기에는 이러한 많은 문제점이 존재한다. 그래서 우리는 TCP를 사용한다.
2. ✅TCP(Transmission Control Protocol)
: 전송 제어 프로토콜
2.1. 특징
- TCP/IP 패킷 정보: 출발지PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보
- IP만으로 해결되지 않았던 추가 정보 존재
- 연결 지향 - TCP 3 way handshaking(가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
2.2. TCP 3Way handshake

TCP 3 Way handshake
1. tcp 프로토콜로 연결을 하면 syn이라는 메세지 전달
2. syn + ack 반환
3. ack 전달데이터 전송
-> 양쪽에서 syn, ack를 보낸다. 총 3번을 주고받는다
-> 이러한 과정을 걸치고 연결을 확인 후에 데이터를 주고받는다.
-> 요즘은 최적화 되어서 3번 ack를 보낼 때 같이 데이터를 전송하는 경우도 있다.
진짜 연결이 아닌 논리적 연결(개념적 연결)이다. 중간에 수많은 서버를 걸치기 때문에 중간에 노드는 모른다.
서로 syn, ack를 주고받기 때문에 연결이 되었구나 하고 생각을 하는 것이다.
2.3. 장점
- 데이터 전달 보증
- tcp는 데이터를 잘 받았따고 서버에서 보내준다. 이는 데이터가 잘 갔는지 보증이 된다.
- 순서 보장
- 큰 메세지를 잘라서 패킷 1,2,3 으로 보냈다. 서버에서 순서가 틀리면 다시 보내라고 요청이 온다.
-> 최적화 되는 경우도 있음 ex)알아서 기다렸다가 패킷을 조합하는 경우 등등
- 큰 메세지를 잘라서 패킷 1,2,3 으로 보냈다. 서버에서 순서가 틀리면 다시 보내라고 요청이 온다.
이 모든것은 IP 보다 순서, 검증 등등 정보가 더 많기 때문이다.
2.4. 단점
- 신뢰성을 보장하지만 높은 오버헤드를 가져올 수 있음.
- 데이터의 헤더 사이즈가 큼
3. ✅UDP(User Datagram Protocol)
: 사용자 데이터그램 프로토콜특징
- 비 연결성 서비스
- 이전 IP와 비슷한데 하나만 다른것은 Port, 체크섬의 정보가 추가로 존재하다는 것이다.
- TCP는 시간과 데이터의 양도 굉장히 많아서 이미 손을 대지 못하는 프로토콜이다.
- 그 점을 활용해 더 최적화가 가능한 UDP를 커스탐한다.
- 요즘 각광을 받고있다
4. ✅PORT
- 같은 IP내에서 프로세스 구분
- 여러 패킷에서 해당 애플리케이션을 구분해주는 것
5. ✅DNS(Domain Name System)
- IP는 기억하기 어렵다.
- IP는 변경될 수 있다.
도메인 명을 IP주소로 변환

- DNS 서버에 IP를 등록할 수 있다.
- 도메인으로 접근할 수 있음
6. REFERENCE
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com