😜 완강할 때까지 지속적으로 수정/보완합니다.
인터넷 프로토콜 스택 4계층 |
---|
애플리케이션 계층 - HTTP, FTP |
전송 계층 - TCP, UDP |
인터넷 계층 - IP |
네트워크 인터페이스 계층 - 랜카드 등 |
애플리케이션 / OS / 네트워크 인터페이스(LAN 드라이버, LAN장비)
✅ TCP(Transmission Control Protocol) : 전송 제어 프로토콜
가상 연결
: 논리적으로만 연결 됐다고 생각) ✅ UDP(User Datagram Protocol)
출발지 포트, 목적지 포트
URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.
U
niform: 리소스 식별하는 통일된 방식R
esource: 자원, URI로 식별할 수 있는 모든 것(제한x) I
dentifier: 다른 항목과 구분하는 데 필요한 정보
- 위치는 변할 수 있지만, 이름은 변하지 않는다.
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: 게시글을 완전히 수정할 때 등 사용하기도 한다.