😜 완강할 때까지 지속적으로 수정/보완합니다.
| 인터넷 프로토콜 스택 4계층 |
|---|
| 애플리케이션 계층 - HTTP, FTP |
| 전송 계층 - TCP, UDP |
| 인터넷 계층 - IP |
| 네트워크 인터페이스 계층 - 랜카드 등 |
애플리케이션 / OS / 네트워크 인터페이스(LAN 드라이버, LAN장비)
✅ TCP(Transmission Control Protocol) : 전송 제어 프로토콜
가상 연결: 논리적으로만 연결 됐다고 생각) ✅ UDP(User Datagram Protocol)
출발지 포트, 목적지 포트 URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.

Uniform: 리소스 식별하는 통일된 방식Resource: 자원, URI로 식별할 수 있는 모든 것(제한x) Identifier: 다른 항목과 구분하는 데 필요한 정보
- 위치는 변할 수 있지만, 이름은 변하지 않는다.
https{프로토콜}://www.google.com{호스트명}/search{패스}?q=hello&hl=ko{쿼리파라미터}
프로토콜: 어떤 방식으로 자원에 접근할 것인지 하는 약속 규칙호스트명 : 도메인명 또는 ip명 직접 입력 가능port: 일반적으로 생략 (특정 서버에 따로 접근할 때는 입력하기도)path: 리소스 경로, 계층적 구조query : {key}={value} 형태로 지정fragment: html 내부 북마크 등에 사용, 서버에 전송하는 정보 아님 
모든 것이 HTTP(HyperText Transfer Protocol)
✨HTTP/1.1 (1997년): 가장 많이 사용, 우리에게 가장 중요한 버전
HTTP/3** 특징
1) 클라이언트 서버 구조
클라이언트 : 서버에 요청, 응답 대기서버 : 요청에 대한 결과를 만들어 응답2) 무상태 프로토콜: Stateful, Stateless
Stateless : 무상태, 점원이 중간에 바뀌는 경우 그때그때 정보를 넘김 수평 확장에 굉장히 유리해진다. 무한한 서버 증설 가능Stateless (실무 한계)
로그인 (서버에 유지)3) 비 연결성(connectionless)
3-1) 단점
http 지속 연결(Persistent Connections)로 문제 해결 : 요청하고 응답 다 받을 때까지 지속연결 유지 후, 종료4) HTTP 메시지
| HTTP 메시지 구조 |
|---|
| start-line 시작 라인 |
| header 헤더 |
| empty line 공백라인(CRLF) |
| messaage body |
http 요청 메시지: 본문에 필요한 body 가질 수 있다.
<요청 메시지>/로 시작하는 경로 <응답 메시지>
/members/{id}-> 어떻게 구분하지?
GET: 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링) 통해서 전달
POST: 요청 데이터 처리, 주로 등록
메시지 바디를 통해 서버로 요청 데이터를 전달
👉 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청
html form 을 통한 회원가입, 주문 등
게시판 글쓰기, 댓글
새 리소스 생성(신규 주문 생성)
기존 자원에 데이터 추가(한 문서 끝에 내용 추가)
POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 한다.
- 1) 새 리소스 생성(등록)
- 2) 요청 데이터 처리
- 3) 다른 메서드로 처리하기 애매한 경우
PUT: 리소스를 대체, 해당 리소스가 없으면 생성(EX:파일을 폴더에 넣음, 없으면 폴더 생김
⚠️중요! 클라이언트가 리소스를 식별(클라이언트가 리소스 위치를 알고 URI 지정)PATCH: 리소스 부분 변경
DELETE: 리소스 삭제
HEAD: GET과 동일하지만, 메시지 바디 부분 제외하고 상태줄과 헤더만 반환
OPTIONS: 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
안전(Safe Methods): 호출해도 리소스를 변경하지 않는다.
멱등(Idempotent Methods): f(f(x)) = f(x)
자동복구 메커니즘: DELETE, 서버에서 응답 없을 때 자동으로 재시도 해도 괜찮.캐시 가능(Cacheable)
클라이언트에서 서버로 데이터 전송
4가지 상황
1) 정적 데이터 조회: uri 경로만 넣어주면 됨.
2) 동적 데이터 조회
3) HTML Form을 통한 데이터 전송(GET, POST만 지원)
form태그 안에
<input type="text" name="username"/>- ⭐Content-Type: application/x-www-form-urlencoded -> 전송 데이터를 url encoding 처리 - username=kim&age=20
multipart/form-data

4) HTTP API를 통한 데이터 전송
PUT: 게시글을 완전히 수정할 때 등 사용하기도 한다.