나만 몰랐던 Http Delete Method payload body 문제

오늘 해당 문제로 좀 삽질을 했습니다.  (다 저의 무지함 때문에 발생한 일이지만… ㅜㅜ)

간단한 Delete 요청을 처리하기 위해 동료 개발자와 협업을 하고 있었죠.  서로 다른 도메인을 담당하기 때문에 직접 해당 DB에 붙어 CRUD를 날릴 수가 없었고
시스템 간의 의존도를 없애기 위해 동료 개발자는 API를 만들어 주고 저는 해당 API를 이용해서 특정 정보를 CRUD 하는 작업을 하고 있었죠.
CRU까진 완료된 상황 이제 D (Delete)가 남아서 Http의 Delete 메서드를 이용해서 Pqyload Body에는 간단한 ID 정보만 실어서 요청해주면 끝.

집에 가야지… 했는데 해당 API요청이 오류가 나는 것이 었습니다.

해당 코드입니다. 저희는 Grails + Groovy를 사용 중인데 Grails의 restBuilder를 사용해서 Json으로 변환된 Map을 이용해 Rest API 호출을 하는 간단한 코드입니다.

restBuilder 는 Spring 의 RestTemplate 으로 구현되어있습니다.

이제 동료 개발자가 만든 받는 쪽 소스를 보면

이렇게 간단하게 Delete 메서드로 요청한 Json String을 RequestBody로 파싱 해서 객체로 만들어 주는 간단한 Controller 코드입니다.
하지만 요청을 하면 오류…… API 서버 로그를 보면

이렇게 오류가 나오고 있었죠.
처음에는 또 Grails 가 이상하게 구현이 되어있는 줄 알고 Break 포인트 걸어가며 한줄한줄 소스를 까 보았는데 문제가 없는 상황…

그래서 구글링을 해서 Http Spec을 확인…

아 젠장 ㅜㅜ Spec먼저 보고 할껄…

허접 번역을 하면 “Delete 요청은 payload body 가 필요가 없다.  Delete 메서드로 payload body를 실어 요청을 하면 요청이 거절될 수 있다.

일단 API 서버가 제 담당이 아니지만 당장 일정이 있기에 최소한의 수정으로 끝내고자 일단 Delete Method를 이용해 payload body 를 보낼 방법을 찾기 시작했습니다.

일단 나온것이

톰켓의 컨넥터 설정을 바꿔서 DELETE 메서드와 같이 오는 payload body를 파싱 하는 방법 , 해당 코드는 Tomcat를 사용할때 설정으로 하는 방법이고

Spring Boot 의 embedded tomcat 을 사용한다면.

대략 이런식으로 해주면 됩니다.

하지만 위 방법으로 결국 동작 하지 않았습니다…. 결국 그냥 동료에게 양해를 구하고 …

그냥 내가 직접 API서버의 코드를 PathVariable 로 ID 값을 받도록 수정을 했습니다.

이상으로 나만 모르는 Delete method 사용법이었습니다.

오늘의 교훈… 머리가 나쁘면 몸이 고생하며 괜한 야근을 한다… ㅜㅜ 스펙을 읽어보고 개발을 하자.

그런데 의문점 하나는 Swagger 에서는 delete method 로 payload body 에 json 데이타를 같이 보내면
동작을 한다는거…. 이거 소스한번 까봐야 겠어요.. 지금은 너무 힘들어서 일단 여기까지. ㅜㅜ

나만 몰랐던 Http Delete Method payload body 문제”에 대한 1개의 생각

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다