Internet Protocol로 클라이언트와 서버가 네트워크상에서 정보를 주고받을 때 사용하는 통신 규약.
OSI Network Layer에서 reciever의 주소를 지정(IP주소)하고 패킷 분할, 조립을 담당한다. IP 프로토콜에서 신뢰성을 추가하기 위해 TCP가 생겨남.
TCP는 연결지향적이며 신뢰성을 지닌 전송 프로토콜이다.
연결을 위해 3way-handshaking을 진행하고 상호간 신뢰성를 위해 오류 제어, 흐름 제어를 하며 더 많은 header를 포함해 조금 느리다는 단점이 있다.
UDP는 비연결형이며 신뢰성을 고려하지 않은 전송 프로토콜이다.
연결을 위한 3way-handshaking이 없으며, 적은양의 헤더를 가지기 때문에 전송 속도가 빠르다.
TCP는 신뢰성이 필요한 통신(HTTP, FTP, SMTP)에 쓰이며 UDP는 실시간성이 중요한 통신(영상 스트리밍)에 쓰인다.
TCP와 UDP는 TRANSPORT LAYER에서 사용되는 프로토콜이다. TCP는 connection setup(3way-handshaking으로 세션 수립), data transfer, connection termination(4way-handshaking) 과정을 거쳐 데이터를 주고받으며 UDP에서는 data transfer만 이루어진다.
TCP는 1:1통신만 가능하며 안전하고, UDP는 1:1, 1:N, N:N통신까지 가능하며 빠르다
HyperText Transfer Protocol의 약자로 웹 상에서 정보를 주고받는 프로토콜이며 HTML같은 문서 전송에 사용된다.
HTTP의 가장 큰 특징은 Connectionless 와 Stateless로 서버가 클라이언트의 세션 상태 및 세션 정보를 저장하지 않는다. 클라이언트가 HTTP request를 서버에 보내면 HTTP response를 클라이언트로 보내주는 방식으로 사용된다. 클라이언트가 서버에서 요청해 응답을 받으면 요청을 끊어버리기 때문에 Connectionless의 특징을 지니고, connection을 끊기 때문에 서버는 클라이언트의 State를 알 수 없다. 이러한 HTTP의 단점을 극복하기 위해 Cookie, Session, JWT의 개념들이 도입되었다고 한다.
그럼에도 불구하고 단점이 또 있는데 바로 HTTP는 text형식으로 데이터를 주고받기 때문에 정보를 인터셉트 당할 확률이 있어 HTTPS 프로토콜이 탄생하게 된다.
- GET은 클라이언트가 URL과 Query String를 전달해 서버에 정보를 요청하고 조회하며 브라우저 히스토리에 남으며 캐시가 가능하지만,
- POST는 클라이언트가 URL과 Body 부분에 데이터를 넣어 서버에 전달하며 히스토리가 남지않고 캐시가 불가능하다.
- PUT은 리소스의 전체를 대체하며, 리소스가 없다면 생성한다.
- PATCH는 리소스의 일부분을 수정한다.
HTTP 요청에 대한 서버의 응답코드로 요청이 성공했는지 실패했는지 판단이 가능하다. 100~500번대까지 존재하며 요청의 상태를 나타내준다.
200번대(success): 요청을 정상적으로 수신하고 성공적으로 처리함.
400번대(client error): 클라이언트 요청에 오류가 있음.
500번대(server error): 요청을 정상적으로 수신했으나 서버가 수행에 실패.
자주 나타나는 코드는 다음과 같다.(200,201,400,401,403,404,500)
[200: OK(요청 성공), 201: created(리소스 생성), 400: Bad Request(올바른 정보 요청), 401: Unauthorized(인증필요), 403: Forbbiden(권한필요), 404: Not Found(리소스 없음), 500: Bad Gateway(서버에서 에러 발생 - 예외처리 등.)]
사용자가 브라우저에 URL 입력 -> 브라우저가 DNS로 서버IP 주소검색 -> Client에서 HTTP request 전송 -> TCP/IP 패킷 생성 -> Server전송 -> Server에서 HTTP response 전송-> TCP/IP 패킷 생성 -> Client 전송 -> HTTP response message를 브라우저에서 출력 및 렌더링