인프런 커뮤니티 질문&답변

네번째카페님의 프로필 이미지

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

HTTP 메서드의 속성

DELETE 메소드의 코드 설계

해결된 질문

21.01.23 16:01 작성

·

187

1

강의 잘 듣고 있습니다. 좋은 강의 감사합니다.

강의 주제를 벗어난다고 생각하지만 질문이 있습니다.

예시를 드신 것처럼 DELETE method 를 호출해서 파일을 삭제한다고 했을 때, 

두번째 호출의 응답을 어떻게 하는 것이 코드 레벨에서 좋은 설계인지 궁금합니다.

가정

  • 클라이언트에서 파일 삭제를 요청, 서버에서 성공했으나 정상 응답을 주지 못함
  • 클라이언트는 정상 응답을 받지 못했으니 재요청을 함

위 가정에서 서버는 재요청으로 인해 존재하지 않는 파일을 삭제하라는 요청을 받은 상황이 되는데요

제가 생각하는 방식은 2가지가 있습니다.

1. 없는 파일을 삭제하라고 하는 요청이니 '파일이 존재하지 않습니다.' 같은 오류 메시지와 함께 오류 코드를 응답

```java

File file = fileRepository.find(File.class, id);

if (!file.isExist()) {

return FileNotExistException("파일이 존재하지 않습니다.");

}

```

2. 사용자의 요청은 파일을 삭제하는 것이다. 파일의 존재 유무가 어떻든 요청에 성공한 상태이니 성공했다고 응답

```java

File file = fileRepository.find(File.class, id);

if (!file.isExist()) {

return true;

}

```

저는 둘 다 일리가 있지만 1번 방식이 더 좋은 방식이라고 생각하는 편입니다. 

재요청을 받았을 때 실제로는 파일을 삭제하지 않았으면서 사용자에게는 삭제했다고 응답을 주는 게 맞지 않다고 생각해서요.

그런데 이렇게 생각하던 당시 제 머리 속에는 '멱등' 에 대한 개념을 고려하지 않은 상태였었습니다.

개념은 알고 있었지만 평소에 신경 써서 고려하던 것은 아니었거든요. 더 정확하게는 민망하지만 잊고 있던 내용이었습니다. ㅎㅎ

오늘 이렇게 강의를 들으면서 다시 한번 궁금해지는 내용이라 질문을 남깁니다.

서비스에 따라 정답이 없는 영역이라는 생각도 듭니다. 

그렇다면 좀 더 '정설'에 가까운 쪽이나 사례, 선생님의 견해가 궁금합니다!

답변 1

6

김영한님의 프로필 이미지
김영한
지식공유자

2021. 01. 23. 17:23

안녕하세요. 네번째카페님

멱등은 클라이언트 관점이 아니라 해당 리소스 관점에서 봐야 하기 때문에 1번이든, 2번이든 리소스 관점에서 보면 둘다 삭제되어버린 상태입니다.

따라서 1번으로 해도 되고, 2번으로 해도 됩니다.

상황에 따라 다르겠지만 저는 사용성 측면에서 1번이 더 나은 방법이라 생각합니다.

감사합니다.