JSON 개념
- 서버-클라이언트 통신에서 표준처럼 사용되는 데이터 교환 형식이다.
- 가볍고 사람이 읽기 쉽다.
- Map 과 같은 간단한 구조.
- 직렬화 하여 문자열로 나타내기 쉽다.
- 대부분의 언어가 이를 파싱할 수 있기 때문에 상호 운용성은 걱정할 것이 없다.
- 파싱
HTTP 개념
- HyperText Transfer Protocol
- 원래 문서 전송용으로 설계된 상태 비저장용 프로토콜
- 브라우저가 GET 요청으로 웹 서버의 문서를 읽어오는 용도였음
- 지금은 서버와 클라이언트가 텍스트, 이미지, 동영상 등의 데이터* 를 주고 받을 때 사용하는 프로토콜로 확장됨
- 웹 상에서 보는 이미지, 영상, 파일과 같은 바이너리 데이터도 HTTP 멀티파트나 Base64 인코딩하여 사용
- 모든 HTTP 메시지는 요청과 응답이 일대일로 대응되어야 한다.
OSI-7 계층
무상태성
- HTTP 는 상태 비저장 프로토콜
- HTTP는 요청 메시지를 보내기 직전까지 대상 컴퓨터가 응답 가능한지 알 방법이 없음
- Stateless 프로토콜, 즉 상태가 없는 프로토콜이라고 함
- Stateful 프로토콜로는 TCP (Transmission Control Protocol)가 있음
통신 프로토콜
-
TCP : 신뢰성 있는 연결지향성 앱에서 사용 (이메일, 파일 전송, 웹브라우저)
- Stateful 프로토콜
- 연결되면 연결을 끊기 전까지 계속 메시지를 주고 받는 프로토콜
- 한쪽에 문제가 생기면 다른쪽에서 감지 가능
- 텍스트가 아닌 바이너리 데이터를 전송
- 패킷 크기가 HTTP에 비해 작음 → 속도 빠름
- 각 요청이 소켓 1개를 공유 (HTTP는 각 요청이 소켓 1개씩 사용)
- 따라서 요청을 식별할 식별자가 필요
- 응답을 알 수 있는 방법이 없기 때문에 타임아웃에 대해 직접 구현해야 함
- TCP는 HTTP보다 빠르지만 개발자가 할 일이 많다
- HTTP는 로직이 간단하지만 TCP보다는 느리다
-
TCP/IP
- Socket 을 사용하여 TCP/IP 통신을 할 수 있음
- 접속하기 위해 IP 주소와 포트 번호가 필요
- 프로토콜(통신시 사용되는 데이터 형식이나 순서 등)은 RFC 문서에 정해둔 것을 따른다.
-
UDP : 신속한 데이터 전송이나 손실 가능성이 있는 상황에 주로 사용
- 비연결형 프로토콜
- 데이터 전달 보장이 안되어 신뢰성이 낮음
- 흐름 제어 없음
- 단순성
- 멀티캐스팅 및 브로트캐스팅
요청 메서드
원래 GET만 있었으나 계속 확장됨
- GET
- POST
- PUT
- PATCH
- DELETE
- COPY
- HEAD
- OPTIONS
- LINK
- UNLINK
- PURGE
- LOCK
- UNLOCK
- PRORFIND
- VIEW
요청의 형태를 정의하는 키워드
상황에 맞게 사용하는 것이 관례
- GET : 데이터 요청
- POST : 데이터가 포함된 요청
- DELETE : 삭제
- PUT : 업데이트
GET
POST
- 클라이언트에서 서버로 데이터가 포함된 요청을 보낼 때 사용
- 로그인, 주문 요청 등
POST
HTTP 요청 헤더
상태코드
세션과 쿠키
- HTTP는 상태라는 개념이 존재하지 않기 때문에 세션과 쿠키를 사용해 구분
- 주로 웹에서 서버는 세션, 클라이언트는 쿠키를 통해 상태 저장
RESTful API
- 서버와 클라이언트가 메시지를 주고받을 때 가장 많이 사용하는 통신 규격 (암묵적인 룰)
- REST (representational state transfer)
- REST: 분산 시스템을 위한 소프트웨어 아키텍처의 한 형태
- RESTful 이란 REST 조건을 만족한다는 뜻
- 요청 주소(URL)과 메서드(GET, POST 등), JSON 규격을 이용하여 API를 정의
- 오늘날 가장 범용적으로 사용
- https://aws.amazon.com/ko/what-is/restful-api/