160. Level 2 - HTTP 메서드의 적절한 분리 사용

핵심 인사이트: 리처드슨 성숙도 모델의 두 번째 진화이자 오늘날 대다수의 IT 기업들이 "우리 API는 RESTful하다"라고 말하는 기준선이다. 자원에 따라 주소를 나누는 것(Level 1)을 넘어, 그 자원을 어떻게 지지고 볶을지(행위)를 HTTP 표준 동사(GET, POST, PUT, DELETE)에 완벽하게 위임한 상태다.

Ⅰ. 성숙도 모델 Level 2의 개념

Level 2 (HTTP Verbs) 단계는 Level 1에서 분리해 낸 자원(Resource URI)에 대하여, 클라이언트가 수행하고자 하는 행위(CRUD)를 더 이상 POST 하나로 퉁치지 않고 목적에 맞는 표준 HTTP 메서드를 사용하여 서버와 통신하는 구조입니다.

Ⅱ. 주요 HTTP 메서드의 역할 분리

이 단계에서는 HTTP 명세서(RFC)가 정의한 규약과 의미에 맞게 동사를 사용해야 합니다.

  1. GET (조회, Read):
    • 지정된 URI의 자원을 조회합니다. 데이터의 상태를 변경하지 않는 '안전성(Safe)' 과 여러 번 요청해도 결과가 똑같은 '멱등성(Idempotent)' 을 보장해야 합니다.
  2. POST (생성, Create):
    • 새로운 자원을 생성하거나 멱등성이 없는 처리를 할 때 사용합니다.
  3. PUT (전체 수정, Update):
    • 지정된 URI의 자원을 통째로 교체(수정)합니다. 여러 번 덮어써도 결과는 같으므로 멱등성을 갖습니다.
  4. PATCH (부분 수정, Update):
    • 자원의 일부 정보만 수정할 때 사용합니다.
  5. DELETE (삭제, Delete):
    • 지정된 URI의 자원을 삭제합니다.

Ⅲ. HTTP 상태 코드(Status Code)의 적극 활용

Level 2에서는 에러 상황이나 응답 결과를 단순히 바디 메시지에 의존하지 않고, HTTP 표준 상태 코드를 적극적으로 활용하여 헤더 레벨에서 즉각적인 성공/실패 여부를 알립니다.

  • 200 OK: 요청 성공
  • 201 Created: POST 요청으로 자원이 성공적으로 생성됨
  • 400 Bad Request: 클라이언트의 요청 파라미터가 잘못됨
  • 404 Not Found: 요청한 URI의 자원이 존재하지 않음
  • 500 Internal Server Error: 서버 내부 비즈니스 로직 처리 중 오류 발생

Ⅳ. Level 2의 실무적 위상

사실상 완벽한 REST(Level 3)로 가기 위한 마지막 허들이자 산업계의 암묵적 타협점입니다. 프론트엔드와 백엔드의 책임을 깔끔하게 나누면서도 학습 곡선이 낮아 전 세계 대부분의 오픈 API(Google, Facebook, 카카오 등)가 이 Level 2 단계를 실질적인 RESTful 표준으로 채택하고 있습니다.

📢 섹션 요약 비유: 드디어 행정복지센터(서버)가 체계를 갖췄습니다. '주민등록 창구(URI)'에 가서 무작정 서류를 던지는 게 아니라, 파란 서류(GET)를 내밀면 발급해주고, 빨간 서류(POST)를 내밀면 전입신고를 받아주고, 노란 서류(DELETE)를 내밀면 사망신고를 처리하는, 목적에 맞는 표준화된 업무 봉투(HTTP Method)를 완벽하게 사용하는 시스템입니다.