Http 메서드란?

2coconut·2025년 5월 12일

HTTP 메서드의 이해


HTTP 메서드의 정의

a

HTTP 메서드(HTTP Methods)는 클라이언트가 웹 서버에게 원하는 동작을 알려주는 방식으로, HTTP 프로토콜에서 요청의 목적과 종류를 나타내는 수단이다. 각 메서드는 서버 자원에 대해 수행하고자 하는 행동을 정의한다.

RESTful API는 HTTP 메서드를 활용하여 자원(Resource)에 대한 CRUD(Create, Read, Update, Delete) 연산을 수행하는 인터페이스로, 웹의 기존 구조와 HTTP 프로토콜의 장점을 최대한 활용하는 아키텍처 스타일이다.

즉, HTTP 메서드는 웹 통신에서 클라이언트와 서버 간의 상호작용 방식을 정의하는 표준화된 약속이다.


HTTP 메서드의 기본 개념

HTTP 메서드는 다음과 같은 기본적인 특성을 가진다.

HTTP 메서드의 주요 특성

  1. 목적성: 각 메서드는 특정 목적을 위해 설계됨
  2. 멱등성(Idempotency): 동일한 요청을 여러 번 보내도 결과가 동일한지 여부
  3. 안전성(Safety): 서버의 상태를 변경하지 않는지 여부
  4. 캐시 가능성(Cacheability): 응답을 캐시할 수 있는지 여부

HTTP 메서드의 주요 목적은 클라이언트와 서버 간의 효율적이고 명확한 통신을 가능하게 하는 것이다. 각 메서드는 자원에 대한 특정 작업을 나타내며, 이를 통해 웹 애플리케이션은 일관되고 예측 가능한 방식으로 동작할 수 있다. 예를 들어, 온라인 쇼핑몰에서 상품 정보를 조회할 때는 GET 메서드를, 새로운 주문을 생성할 때는 POST 메서드를 사용하는 등 각 상황에 맞는 메서드를 선택하여 사용한다.


주요 HTTP 메서드와 특징

1. 기본 HTTP 메서드

HTTP 프로토콜에서 가장 흔히 사용되는 메서드들은 다음과 같다:

GET

  • 목적: 리소스 조회
  • 특징: 데이터를 URL의 쿼리 파라미터로 전송
  • 안전성: 안전 (서버 상태 변경 없음)
  • 멱등성: 멱등 (여러 번 호출해도 결과 동일)
  • 캐시 가능성: 가능
GET /api/users?id=123 HTTP/1.1
Host: example.com

POST

  • 목적: 새 리소스 생성
  • 특징: 데이터를 요청 본문(body)에 포함
  • 안전성: 안전하지 않음 (서버 상태 변경)
  • 멱등성: 멱등하지 않음 (여러 번 호출 시 결과 다름)
  • 캐시 가능성: 일반적으로 불가능
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com"
}

PUT

  • 목적: 리소스 생성 또는 완전한 대체
  • 특징: 지정된 URL에 리소스 전체를 대체
  • 안전성: 안전하지 않음 (서버 상태 변경)
  • 멱등성: 멱등 (여러 번 호출해도 결과 동일)
  • 캐시 가능성: 불가능
PUT /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com",
  "role": "admin"
}

DELETE

  • 목적: 리소스 삭제
  • 특징: 지정된 URL의 리소스 제거
  • 안전성: 안전하지 않음 (서버 상태 변경)
  • 멱등성: 멱등 (여러 번 호출해도 결과 동일)
  • 캐시 가능성: 불가능
DELETE /api/users/123 HTTP/1.1
Host: example.com

2. 추가 HTTP 메서드

기본 메서드 외에도 다음과 같은 추가 메서드들이 사용된다:

PATCH

  • 목적: 리소스 부분 수정
  • 특징: 리소스의 일부만 업데이트
  • 안전성: 안전하지 않음 (서버 상태 변경)
  • 멱등성: 일반적으로 멱등하지 않음 (구현에 따라 다름)
  • 캐시 가능성: 불가능
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "email": "newemail@example.com"
}
  • 목적: GET과 동일하지만 응답 본문 없이 헤더만 반환
  • 특징: 리소스의 메타데이터만 확인
  • 안전성: 안전 (서버 상태 변경 없음)
  • 멱등성: 멱등 (여러 번 호출해도 결과 동일)
  • 캐시 가능성: 가능
HEAD /api/users/123 HTTP/1.1
Host: example.com

OPTIONS

  • 목적: 리소스가 지원하는 통신 옵션 확인
  • 특징: CORS에서 preflight 요청으로 사용
  • 안전성: 안전 (서버 상태 변경 없음)
  • 멱등성: 멱등 (여러 번 호출해도 결과 동일)
  • 캐시 가능성: 일반적으로 불가능
CORS : 웹 브라우저에서 실행 중인 JavaScript가 다른 출처(도메인, 프로토콜, 포트)의 리소스에 접근할 수 있도록 허용하는 보안 메커니즘
OPTIONS /api/users HTTP/1.1
Host: example.com

3. 멱등성과 안전성 비교

메서드안전성멱등성캐시 가능성
GETOOO
POSTXXX(일부 가능)
PUTXOX
DELETEXOX
PATCHXX(일반적)X
HEADOOO
OPTIONSOOX

HTTP 메서드의 활용 사례

RESTful API에서의 활용

REST 아키텍처에서는 HTTP 메서드가 자원에 대한 CRUD 연산을 표현한다:

블로그 API 예시

  • 게시글 목록 조회: GET /api/posts
  • 특정 게시글 조회: GET /api/posts/{id}
  • 새 게시글 작성: POST /api/posts
  • 게시글 전체 수정: PUT /api/posts/{id}
  • 게시글 일부 수정: PATCH /api/posts/{id}
  • 게시글 삭제: DELETE /api/posts/{id}

사용자 관리 API 예시

  • 사용자 목록 조회: GET /api/users
  • 특정 사용자 조회: GET /api/users/{id}
  • 새 사용자 등록: POST /api/users
  • 사용자 정보 전체 수정: PUT /api/users/{id}
  • 사용자 정보 일부 수정: PATCH /api/users/{id}
  • 사용자 삭제: DELETE /api/users/{id}

HTTP 메서드와 상태 코드의 관계

HTTP 메서드를 사용할 때 적절한 HTTP 상태 코드를 반환하는 것이 중요하다.

성공 상태 코드

  • 200 OK: 요청이 성공적으로 처리됨 (주로 GET)
  • 201 Created: 새 리소스가 성공적으로 생성됨 (주로 POST, PUT)
  • 204 No Content: 요청이 성공했지만 반환할 콘텐츠 없음 (주로 DELETE)

클라이언트 오류 상태 코드

  • 400 Bad Request: 잘못된 구문으로 인해 서버가 요청을 이해할 수 없음
  • 401 Unauthorized: 인증되지 않은 요청
  • 403 Forbidden: 서버가 요청을 이해했지만 권한 부족으로 거부
  • 404 Not Found: 요청한 리소스를 찾을 수 없음
  • 405 Method Not Allowed: 해당 리소스에 대해 허용되지 않은 메서드 사용
  • 409 Conflict: 리소스의 현재 상태와 충돌 (주로 PUT, PATCH)

서버 오류 상태 코드

  • 500 Internal Server Error: 서버 내부 오류로 인해 요청 처리 실패
  • 501 Not Implemented: 서버가 요청한 기능을 지원하지 않음
  • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없음

메서드별로 일반적으로 반환되는 상태 코드는 다음과 같다:

메서드성공 시 상태 코드자주 발생하는 오류 상태 코드
GET200 OK404 Not Found
POST201 Created400 Bad Request
PUT200 OK / 204 No Content400 Bad Request, 409 Conflict
DELETE204 No Content404 Not Found
PATCH200 OK / 204 No Content400 Bad Request, 409 Conflict

profile
컴공학생

0개의 댓글