📌 HTTP (Hyper Text Transfer Protocol)
- 초기에는 하이퍼 텍스트 전송을 위해 사용됐지만, 지금은 모든 형태의 데이터 전송이 가능하다.
ex) HTML,TEXT,이미지,음성,영상,파일,JSON,XML 등
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
- TCP 서버를 직접 연결해서 주고받는 경우는 거의 없음
- 가장 많이 사용하는 버전은 HTTP/1.1 버전
TCP 기반 : HTTP/1.1, HTTP/2
UDP 기반 : HTTP/3
📌 특징
1. 클라이언트-서버 구조
- Request Response 구조
- 클라이언트 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
- 클라이언트와 서버를 분리하는 개념이 중요
- 클라이언트와 서버를 분리하면 독립적으로 진화할 수 있다.
2. 무상태 프로토콜(Stateless)
- 서버가 클라이언트의 상태를 보존하지않음
- 아무 서버나 호출해도 된다.
- 무한한 서버 증설이 가능하다.
상태 유지(Stateful)와 무상태(Stateless) 차이점
- Stateful 서버가 클라이언트의 이전 상태를 보존하므로 중간에 다른 서버로 바꿀 수 없다.
- Stateless 서버가 클라이언트의 이전 상태를 보존하지 않으므로 아무서버나 호출해도 된다.
웹 어플리케이션을 설계할 때는 최대한 무상태로 설계하고 어쩔수 없는 경우에만 상태유지를 사용한다
ex) 로그인
3. 비연결성 (Connecionless)
- HTTP는 기본적으로 연결을 유지하지않는다.
- 일반적으로 초단위 이하의 빠른 속도로 응답한다.
- 서버 자원을 매우 효율적으로 사용할 수 있음(연결을 유지하는 서버 자원이 소모되지 않기 때문)
- 비연결성 한계 : TCP/IP 연결을 새로 맺을때마다 3 way handshake 시간이 추가됨
웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS,CSS 등 수 많은 자원이 함께 다운로드
> 지금은 HTTP 지속연결(Presistent Connection)로 문제 해결
> HTTP/2 , HTTP/3에서 더 많은 최적화
📌 API URI 설계
⭐ 가장 중요한 것은 리소스 식별
- 리소스와 해당 리소스를 하는 대상으로 하는 행위를 분리
ex) 리소스 : 회원
행위 : 조회, 등록, 삭제, 수정
- 리소스는 명사, 행위는 동사
📌 HTTP 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리(주로 등록)
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
- 기타 메서드 : HEAD, OPTION, CONNECT, TRACE
GET
- 리소스 조회
- 서버에 전달하고싶은 데이터는 query(쿼리파라미터, 쿼리 스트링)를 통해 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하는 곳이 많지 않아 권장되지않음
POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달해서 처리
- 서버는 요청 데이터를 처리
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
PUT
- 리소스가 있으면 대체 , 리소스가 없으면 생성
- 쉽게 이야기해서 덮어버림
⭐ 클라이언트가 리소스를 식별
- 클라이언트가 리소스 위치를 알고 URI 지정 (POST와의 차이점)
PATCH
- 리소스 부분 변경
DELETE
- 리소스 제거
📌 HTTP 메서드의 속성
1. 안전 Safe
- 호출해도 리소스를 변경하지 않는다.
- GET 에 해당 (조회만 해서 변경이 없음)
- 안전은 해당 리소스만 고려한다. 해당 리소스가 변하냐 안변하냐만 구분함
2. 멱등 Idempotent
- 한번 호출하든 n번 호출하든 결과는 똑같다.
- get,put,delete는 멱등 메서드이다. 최종 결과는 똑같기에
- 자동 복구매커니즘에 활용한다.
ex) delete 호출시 서버에서 응답이 없음 -> 클라이언트가 자동으로 delete를 재시도함.
delete 는 멱등 메서드이기 때문에.
- 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.
3. 캐시가능 Cashable
- 응답 결과 리소스를 캐시해서 사용해도 되는가?
- get,head,post,patch 는 캐시 가능
- 실제로는 get,head 정도만 캐시로 사용한다.
- post,patch 는 본문 내용까지 캐시 키로 고려해야하는데, 구현이 쉽지 않다.
📌 HTTP 메서드 활용
클라이언트에서 서버로 데이터 전송
- 정적 데이터 조회 : 이미지, 정적 텍스트 문서
- 동적 데이터 조회 : 검색, 게시판 목록 정렬 필터
- HTML Form 을 통한 데이터 전송 : 회원가입,상품 주문, 데이터 변경
- HTTP API를 통한 데이터 전송 : 서버 to 서버, 웹 클라이언트(Ajax)
※ 김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식 수강 후 정리 목적으로 작성 되었습니다.
'프로그래밍 > CS' 카테고리의 다른 글
IoC, DI (without Spring) (0) | 2025.04.01 |
---|---|
쿠키와 캐시 (1) | 2024.12.19 |
HTTP 상태 코드 (2) | 2024.12.17 |
URI와 웹 브라우저의 요청 흐름 (4) | 2024.12.16 |
IP 와 TCP/UDP (0) | 2024.12.16 |