✅ HTTP DELETE 요청, 어떤 방식이 정답일까?

2025. 7. 25. 16:12개발/개발 필기

반응형

― 경로(Path), 쿼리(Query), 바디(Body) 각각의 의미와 실무 활용

RESTful API를 설계하다 보면 DELETE 요청을 통해 리소스를 삭제하는 기능을 자주 만들게 됩니다. 이때 가장 흔히 마주치는 질문은 다음과 같습니다:

"삭제할 ID는 어디에 담아야 하지? 경로? 쿼리? 바디?"
"여러 개를 삭제할 때는 어떻게 해야 하지?"

이 글에서는 DELETE 요청에서 데이터를 전달하는 방식들에 대해 정리하고, 제가 직접 겪은 **복수 항목 삭제 사례(rabmidx 여러 개 삭제)**를 기준으로 어떤 방식이 적합한지 공유해보겠습니다.


1. DELETE 요청에서의 데이터 전달 방식

✅ 1.1 URL 경로(Path Variable)

http
복사편집
DELETE /users/123
  • 가장 권장되는 방식입니다.
  • 단일 리소스를 삭제할 때 가장 명확하며, RESTful한 설계 원칙에 부합합니다.

✅ 1.2 쿼리 파라미터(Query Parameter)

http
복사편집
DELETE /users?user_id=123
  • 가능은 하지만 일반적으로는 권장되지 않습니다.
  • 의도나 동작이 명확하지 않아 혼란을 줄 수 있습니다.
  • 일부 클라이언트에서 캐싱 등의 문제를 일으킬 수 있습니다.

⚠️ 1.3 요청 본문(Request Body)

http
복사편집
DELETE /users { "user_ids": [123, 124, 125] }
  • 공식 HTTP 스펙에 명확히 금지된 것은 아니지만,
    일부 서버나 프록시, 브라우저가 DELETE + Body를 예상하지 않고 무시할 수 있습니다.
  • 하지만 복수 항목을 한 번에 삭제하는 경우에는 효율적인 방법이기도 합니다.

2. 복수 항목 삭제 시 실무 선택

제가 작업한 프로젝트에서는 메타 광고의 자동입찰 설정에서 여러 개의 rule(rabmidx)을 한꺼번에 삭제해야 했습니다. 다음과 같은 고민이 있었습니다:

  • Path 방식은 1개씩만 삭제 가능하므로 반복 요청 필요
  • Query 방식은 길어질 수 있고 RESTful하지 않음
  • Body 방식은 삭제할 ID 리스트를 담기에 적합, 트랜잭션 묶기도 쉬움

🛠 그래서 최종적으로 선택한 방식은?

http
복사편집
DELETE /api/v1/auto-bidding/roas/meta
json
복사편집
{ "rabmidx_list": [101, 102, 103] }
  • rabmidx_list 라는 배열을 Request Body에 담아 서버에 보냄
  • 서버는 이를 반복 처리하여 삭제
  • 속도와 일관성, 트랜잭션 처리 측면에서 효과적

3. 정리: 어떤 방식이 맞을까?

목적방식설명
단일 항목 삭제 DELETE /resource/{id} ✅ 가장 권장됨
복수 항목 삭제 DELETE /resource + Body ⚠️ 실무에서 자주 사용됨 (주의 필요)
조회/필터링 목적 DELETE /resource?key=value ❌ 명확하지 않으며 RESTful하지 않음
 

4. 실무 팁

  • 내부 API나 통제된 환경에서는 DELETE + Body를 활용해도 큰 문제 없음
  • 공개 API라면 DELETE /resource/{id} 형식을 기본으로 구성
  • 프론트에서 삭제 실패 복구가 중요할 경우 → 각각 DELETE /id 요청 보내는 방식이 좋음
  • 데이터가 많고 트랜잭션 묶기가 필요한 경우 → DELETE + Body가 더 효과적

마무리

HTTP 스펙은 하나지만, 현실에서는 다양한 제약과 유즈케이스가 존재합니다. 중요한 건 요청의 의미가 명확하고, 시스템 구조에 잘 맞는 방식을 선택하는 것입니다.

“왜 이 방식이 이 기능에 적합한가?” 를 기준으로, 여러분의 API 설계가 더 탄탄해지길 바랍니다!

반응형