프로그래밍/CS

HTTP와 HTTP 메서드

hwangsehee 2024. 12. 17. 16:13

📌 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