2024.12.07 (HTTP)

칙촉·2024년 12월 7일

🎯목차

  1. HTTP 구조와 원리
  2. HTTP 메서드와 상태코드

HTTP 구조와 원리

HTTP 기본

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버가 서로 통신하는 데 사용하는 프로토콜로, 주로 웹 브라우저와 웹 서버 사이에서 데이터를 주고받는 데 쓰인다.
HTTP는 단순히 웹 페이지뿐만 아니라 이미지, 영상, 파일 등 다양한 리소스를 전송하는 데 사용되며, REST API, 그래프QL, 웹 소켓 등 현대 웹 기술 대부분이 HTTP를 기반으로 동작한다.

  • 비 연결성(Connectionless): 클라이언트가 요청을 보내고 서버가 응답하면 연결이 끊어진다.
    덕분에 서버의 리소스를 절약할 수 있지만, 요청마다 새로 연결을 만들어야 해서 오버헤드가 생기는데, 이를 보완하기 위해 HTTP/2, HTTP/3에서는 연결을 재사용하는 방식이 도입됐다.
  • stateless: 서버가 클라이언트의 상태를 기억하지 않는다.
  • 동작 방식
    1. 클라이언트가 HTTP 요청을 보낸다.
    2. 서버가 요청을 처리하고 응답을 돌려준다.
    3. 연결이 종료된다.

클라이언트-서버 구조

  • 클라이언트: 요청을 보내는 쪽 (예: 웹 브라우저, 모바일 앱).
  • 서버: 요청을 처리하고 응답을 보내는 쪽 (예: 웹 서버, 데이터베이스 서버).
    클라이언트는 항상 요청을 시작하고, 서버는 요청에 따라 응답을 반환하는 방식으로 동작한다.

HTTP 메서드와 상태코드

HTTP 메서드 속성

HTTP 메서드에는 안전성, 멱등성, 캐싱 가능 여부라는 중요한 속성이 있다.

  • 안전성(Safe): 서버의 상태를 변경하지 않음.
    • 예: GET, HEAD.
  • 멱등성(Idempotent): 같은 요청을 여러 번 보내도 동일한 결과.
    • 예: GET, PUT, DELETE.
  • 캐싱 가능(Cacheable): 응답을 클라이언트나 중간 프록시 서버가 캐싱 가능.
    • 예: GET, HEAD.

HTTP 메서드

HTTP 메서드는 클라이언트가 서버에 어떤 작업을 요청의 의도를 나타내는데, 이는 RESTful API 설계에서 주요하게 활용된다. 각 메서드는 고유한 목적과 특징을 가졌으며 CRUD 작업과 밀접하게 연결된다.

  • GET

  • 용도 : 서버에서 데이터를 조회할 때 사용.
  • 특징 :
    • 안전성 : 데이터를 변경하지 않는다.
    • 멱등성을 지님 : 같은 요청을 여러 번 보내도 동일한 결과가 일어난다.
    • 쿼리스트링 : URL에 파라미터를 붙여 데이터를 요청할 수 있다.
  • 예시 :
    • 블로그 글 목록 조회
      GET /posts HTTP/1.1
      HOST: example.com
    • 특정 글 조회
      GET /posts/1 HTTP/1.1
      HOST: example.com

  • POST

  • 용도 : 서버에 새로운 데이터를 생성할 때 사용.
  • 특징 :
    • 안전하지 않음 : 데이터를 변경하거나 추가.
    • 멱등성을 지니지 않음 : 같은 요청을 여러 번 보내도 계속 대체될 뿐 새로운 결과가 나타나지 않는다.
    • 리소스를 교체하는 방식으로 동작.
  • 예시 :
    • 블로그 글 작성
      POST /posts HTTP/1.1  
      Host: example.com  
      Content-Type: application/json  
      
      { "title": "New Post", "content": "Post content here" }

  • PUT

  • 용도 : 서버에서 리소스를 전체 수정하거나 없으면 새로 생성.
  • 특징 :
    • 안전하지 않음 : 데이터를 변경하거나 추가.
    • 멱등성을 지님 : 같은 요청을 여러 번 보내면 중복 생성이 가능하다.
    • 요청 본문(Body)에 데이터를 포함해 전송.
  • 예시 :
    • 블로그 글 내용 전체 교체
      PUT /posts/1 HTTP/1.1  
      Host: example.com  
      Content-Type: application/json  
      
      { "title": "Updated Title", "content": "Updated content" }

  • PATCH

  • 용도 : 리소스의 일부를 수정.
  • 특징 :
    • 멱등성을 가질 수도, 가지지 않을 수도 있음.
    • 부분 업데이트에 최적화됨.
  • 예시 :
    • 블로그 글 제목만 교체
      PATCH /posts/1 HTTP/1.1  
      Host: example.com  
      Content-Type: application/json  
      
      { "title": "Partially Updated Title" }

  • DELETE

  • 용도 : 서버에서 리소스를 삭제.
  • 특징 :
    • 멱등성을 가짐 : 같은 요청을 여러 번 보내도 이미 삭제돼있어서 결과가 변하지 않음.
    • 리소스를 삭제한 후 상태 코드로 성공 여부를 반환.
  • 예시 :
    • 블로그 특정 글 삭제
      DELETE /posts/1 HTTP/1.1  
      Host: example.com  

HTTP 상태코드

1xx (정보)

  • 요청이 처리 중임을 나타낸다.
  • 실제 데이터와 관계없이 중간 상태임을 알린다. (잘 안 쓴다)
  • 예:
    • 100 Continue: 요청의 일부를 받아 서버가 나머지를 기다리고 있음.

2xx (성공)

  • 요청이 성공적으로 처리됐음을 알린다.
  • 예:
    • 200 OK: 요청 성공.
    • 201 Created: 새로운 리소스 생성 성공.

3xx (리다이렉션)

  • 요청한 리소스가 이동됐음을 알린다.
  • 예:
    • 301 Moved Permanently: 리소스가 영구적으로 이동.
    • 302 Found: 임시적으로 이동.

4xx (클라이언트 오류)

  • 클라이언트가 잘못된 요청을 보냈음을 알린다.
  • 예:
    • 400 Bad Request: 잘못된 요청 형식.
    • 401 Unauthorized: 인증 필요.
    • 404 Not Found: 요청한 리소스를 찾을 수 없음.

5xx (서버 오류)

  • 서버가 요청 처리 중 오류 발생했음을 알린다.
  • 예:
    • 500 Internal Server Error: 서버 내부 에러.
    • 503 Service Unavailable: 서버가 일시적으로 처리 불가능.

HTTP 메서드 활용 예시

CRUD 작업과 HTTP 메서드를 연관시켜 설계하면 이렇게 정리할 수 있다:

동작HTTP 메서드예시URL설명
조회(Read)GET/posts모든 글 목록 조회.
GET/posts/1특정 글 상세조회.
생성(Create)POST/posts새 글 작성.
수정(Update)PUT/posts/1기존 글을 전체적으로 수정.
PATCH/posts/1기존 글의 특정 필드만 수정.
삭제(Delete)DELETE/posts/1특정 글 삭제.

profile
강세민

0개의 댓글