HTTP 메서드와 상태 코드 기초 — GET, POST, PUT, PATCH, DELETE를 제대로 구분하기

HTTP 메서드와 상태 코드의 의미를 REST API 관점에서 정리한다. GET·POST·PUT·PATCH·DELETE와 2xx·4xx·5xx의 의미를 한 번에 잡는 입문 글이다.

Seobway · · 11분

이 시리즈 구성

포스트 내용
로드맵 인덱스 → 01~19 전체 학습 경로
02-1. Node.js · Bun · Deno → 서버 JavaScript 런타임 비교
02-2. HTTP 메서드와 상태 코드 → REST API의 기본 언어
02-3. Hono로 REST API 시작하기 → 경량 서버 프레임워크 실습
02-4. SQL JOIN · WHERE · HAVING · GROUP BY → 쿼리 결과 예측과 집계

API를 배우기 전에 HTTP부터

REST API를 공부할 때 프레임워크 문법부터 외우면 금방 헷갈린다.

먼저 이해해야 할 것은 HTTP가 원래 어떤 약속을 가지고 있는가다. 메서드와 상태 코드는 서버와 클라이언트가 주고받는 기본 언어다.


HTTP 메서드의 기본 의미

GET — 조회

리소스를 읽을 때 쓴다.

GET /posts/123

게시글 123번을 조회하는 느낌이다.

POST — 생성

새 리소스를 만들 때 자주 쓴다.

POST /posts

새 게시글을 생성하는 느낌이다.

PUT — 전체 수정

리소스를 통째로 교체한다는 의미에 가깝다.

PUT /posts/123

보내는 표현이 전체 데이터라는 전제가 있다.

PATCH — 부분 수정

일부 필드만 바꿀 때 쓴다.

PATCH /posts/123

예를 들어 제목만 바꾸거나 상태만 바꾸는 경우다.

DELETE — 삭제

리소스를 삭제할 때 쓴다.

DELETE /posts/123

PUT과 PATCH를 왜 구분해야 하는가

입문 단계에서 가장 많이 섞이는 두 메서드다.

예를 들어 게시글에 title, body, published 필드가 있는데 제목만 바꾸고 싶다면, 일반적으로 PATCH가 더 자연스럽다.


상태 코드 그룹은 무엇을 말하는가

상태 코드는 세 자리 숫자지만, 입문 단계에서는 먼저 그룹의 의미를 보는 것이 좋다.

그룹 의미
2xx 성공
4xx 클라이언트 요청 문제
5xx 서버 내부 문제

자주 보는 2xx

자주 보는 4xx

자주 보는 5xx


REST API에서는 어떻게 읽으면 좋은가

리소스를 중심으로 보면 이해가 쉽다.

%% desc: 같은 리소스에 대해 메서드가 달라지면 의도도 달라진다
flowchart TD
  R["/posts"] --> G["GET /posts\n목록 조회"]
  R --> P["POST /posts\n새 글 생성"]
  I["/posts/123"] --> G1["GET /posts/123\n단건 조회"]
  I --> U["PUT /posts/123\n전체 수정"]
  I --> PA["PATCH /posts/123\n부분 수정"]
  I --> D["DELETE /posts/123\n삭제"]

중요한 것은 URL만 보는 것이 아니라 메서드와 함께 읽는 것이다.


프론트엔드와도 바로 연결된다

프론트엔드에서도 이 개념은 중요하다.

즉 HTTP 기초를 알면 API 에러 메시지도 더 정확하게 읽을 수 있다.


마치며

HTTP 메서드와 상태 코드는 REST API의 문법보다 더 밑바닥에 있는 약속이다.

그래서 프레임워크를 배우기 전에 이 의미부터 잡아 두면, 어떤 백엔드 기술을 보더라도 API를 읽는 속도가 훨씬 빨라진다.

조금 더 깊게 보기

HTTP는 프론트와 백엔드의 공통 언어다

프론트엔드 개발자는 API를 호출하고, 백엔드 개발자는 API를 만든다. 둘 사이에서 가장 기본이 되는 약속이 HTTP다. 그래서 HTTP 메서드와 상태 코드를 모르면 양쪽 모두에서 대화가 흐려진다.

상태 코드는 사용자 경험으로 이어진다

401은 로그인 화면으로 보내야 할 수 있고, 403은 권한이 없다는 메시지를 보여줘야 한다. 404는 없는 리소스이고, 500은 사용자가 해결할 수 없는 서버 문제다.

REST를 오해하는 지점

REST는 URL을 예쁘게 짓는 규칙이 아니다. 리소스를 중심으로 HTTP의 의미를 활용하는 설계 스타일이다. /createPost보다 POST /posts가 더 REST다운 이유가 여기에 있다.


참고

  1. [1] MDN — HTTP request methods
  2. [2] MDN — HTTP response status codes

관련 글