158. Level 0 - 단일 URI, 단일 POST 메서드만 사용 (RPC 스타일)

핵심 인사이트: 리처드슨 성숙도 모델의 가장 밑바닥(Level 0)은 REST의 기본 철학인 '자원'과 '행위'를 전혀 분리하지 못한 상태다. 그저 HTTP를 하나의 거대한 우편함(POST)으로 취급하여, 모든 주문서를 한 통에 다 쑤셔 넣는 구시대적 방식이다.

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

Level 0 (The Swamp of POX - Plain Old XML) 단계는 REST 아키텍처 원칙이 전혀 적용되지 않은 상태입니다. 이 단계에서는 HTTP 프로토콜을 시스템 간의 통신을 위한 단순한 터널(전송 수단)로만 사용합니다. 과거의 SOAP(Simple Object Access Protocol)XML-RPC 방식이 이에 해당합니다.

Ⅱ. Level 0 아키텍처의 특징

  1. 단일 엔드포인트 (Single URI)
    • 시스템에 존재하는 모든 데이터를 조회, 생성, 수정, 삭제하기 위해 오직 하나의 동일한 URI(엔드포인트) 로만 요청을 보냅니다.
    • 예: /apiService, /endpoint, /router
  2. 단일 HTTP 메서드 (오직 POST)
    • 자원의 조회를 위해 GET을 쓰거나 삭제를 위해 DELETE를 쓰지 않습니다. 서버로 무언가 메시지를 보낸다는 의미에서 모든 요청을 무조건 POST 메서드로 통일합니다.
  3. 메시지 본문(Body)에 모든 정보 포함
    • URI나 메서드로 의도를 파악할 수 없으므로, 클라이언트는 자신이 무엇을 원하는지 메시지 바디(XML이나 JSON) 안에 "Action", "Method" 형태의 파라미터로 명시해야 합니다.

Ⅲ. Level 0 요청의 실제 예시

예를 들어, 123번 환자의 예약(Appointment)을 취소하고 싶을 때 Level 0에서는 다음과 같이 통신합니다.

[ 클라이언트의 요청 (모두 POST, 동일 URI) ]
POST /hospitalService HTTP/1.1
Content-Type: application/json

{
  "action": "cancelAppointment",
  "patientId": "123",
  "appointmentId": "A-999"
}

[ 서버의 응답 ]
HTTP/1.1 200 OK  (※ 실패해도 무조건 HTTP 200 응답 코드를 내리고 바디에 에러를 담음)
{
  "status": "success",
  "message": "예약이 취소되었습니다."
}

Ⅳ. Level 0의 문제점 (왜 REST가 아닌가?)

  • HTTP 인프라 무용지물: GET이 아니므로 웹 브라우저나 프록시 서버의 강력한 캐싱(Caching) 기능을 전혀 활용할 수 없습니다.
  • 에러 핸들링 부재: 로직 내부에서 에러가 나도 HTTP 상태 코드는 항상 200 OK를 반환하므로, HTTP 수준의 에러 모니터링 장비(L7 방화벽, 웹 로그 등)가 장애를 인지하지 못합니다.
  • RPC(Remote Procedure Call) 스타일의 늪: 자원 중심이 아니라 서버의 특정 '함수(메서드)'를 원격으로 호출하는 함수 지향적 설계에서 벗어나지 못했습니다.

📢 섹션 요약 비유: 구청에 서류를 떼러 갔는데 '주민등록 창구', '여권 창구'(URI 분리)가 전혀 없고, 오직 '통합 민원함' 딱 하나만 있어서, 서류 발급이든 민원 신고든 무조건 그 통 안에 구구절절 사연을 적은 종이를 던져 넣어야 하는 꽉 막힌 행정 시스템입니다.