네트워크 5계층 : Application, Transport, Network, Data link, Physical
IP (인터넷 프로토콜)
- 지정한 IP address에 데이터 전달
- Packet(패킷)이라는 통신단위로 데이터 전달
- 받는 대상이 서비스 불능 상황에도 전달 (비연결성)
- 패킷 소실, 패킷 전달 순서 보장하지 않음 (비신뢰성)
TCP (Transmission Control Protocol)
- 논리적 연결 지향 : TCP 3way handshake - Syn, Ack 메세지 이용
- 데이터 전달 보장 : 데이터 수신 여부 전달
- 전달 순서 보장 : 순서가 잘못되었을 경우 처음부터 다시 전달(최적화 가능)
- 신뢰 가능
UDP (User Datagram Protocol)
- 연결 지향 X
- 데이터 전달 보장 X
- 전달 순서 보장 X
- IP와 다른 점은 Port, CheckSum 등 제공
- 신뢰 불가 -> Application Layer에서 추가 작업 필요
Port
- IP로는 서버를 찾고 같은 IP 서버 내에서 어플리케이션을 구분할 수 있게 추가로 Port를 사용
DNS (Domain Name Server)
- 도메인 이름 -> IP 주소 변환
- 복잡한 IP 주소 문제 해결
- IP가 바뀔 수 있는 문제 해결
- URL(Locator), URN(Name)으로 상세 분류
- URN은 잘 사용되지 않음, URL이 보편적으로 사용
- schema + userinfo + host + port + path + query
HTTP (Hypertext Transfer Protocol)
- Json, Image, HTML 대부분 형태의 데이터 전달 가능
- HTTP/1.1을 보편적으로 사용했지만 HTTP/2,3 도 계속 확장중
클라이언트 서버 구조
- Request, Response 구조
- 클라이언트가 서버에 요청을 보내고 응답을 받음 -> 클라이언트는 UI에 집중, 서버에 비즈니스 로직 대부분 수행
Stateless (무상태)
- 서버가 클라이언트의 상태를 보존 X
- 클라이언트는 지속적으로 같은 서버와 통신하지 않으므로 아무 서버나 호출할 수 있다. -> 무한한 서버 증설 가능
- 로그인과 같은 경우에 상태 유지를 해야 하는 경우도 있음, 최소한으로 사용하고 쿠키, 세션 등으로 보조
- 순식간에 들어오는 대용량 트래픽을 감당하기 위해선 최대한 Stateless하게 설계하여 쉽게 서버 증설을 할 수 있어야 한다.
비연결성
- 클라이언트와 서버 간의 연결을 유지하지 않으므로 연결 유지에 드는 Resource를 최소화할 수 있다.
- 매번 새로 TCP 3way handshake를 해야 하므로 추가 시간이 들고 여럿 한계가 있지만 Persistent Connection으로 보완한다.
요청 메시지
- request line / method / target / HTTP version
응답 메세지
- response line / HTTP version / status-code / reason-pharase
HTTP 헤더
- 전송에 필요한 부가 정보 모두 갖고 있음
- 표준헤더는 굉장히 많고 추가로 헤더 만들어 보낼 수 있음
- Content-Type, Content-Encoding 등등..
- Accept 헤더(협상 헤더)는 클라이언트가 선호하는 것을 나타내는 헤더로 요청시에 사용한다.
- Host 헤더는 필수 : 하나의 서버가 여러 도메인을 처리할 수 있기 때문
HTTP 메세지 바디
HTTP API
- URL에선 Resource만 식별, 행위는 메서드로 식별
- GET : 리소스 조회 (query로 요청)
- POST : 요청 데이터 처리, 주로 등록 (메세지 바디로 요청)
- PUT : 리소스를 생성 혹은 대체 (리소스의 위치를 정확하게 지정 <- POST와의 차이점)
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
클라이언트 -> 서버 데이터 전송 방식
- 정적 데이터 조회
- 동적 데이터 조회 : query등을 같이 보내 서버에서 작업 후에 데이터 전송
- HTML Form 데이터 조회 : HTML 문법 중 Form 태그에서 action, method, input 등을 지정해서 웹 브라우저가 HTTP 메세지 생성 후 서버에 전송
HTTP 상태 코드
- 1xx : 요청 수신되어 처리중
- 2xx : 요청 정상 처리
- 3xx : 요청 완료 위해 추가 행동 필요 (Redirection)
- 4xx : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청 수행 불가
- 5xx : 서버 오류, 서버가 요청을 처리할 수 없음
PRG (POST/Redirect/Get)
- POST로 요청 메시지를 처리한 후에 중복 요청을 막기 위해서 바로 결과 화면 (GET)로 Redirect한다.