inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

HTTP 메서드 - PUT, PATCH, DELETE

PUT, PATCH 메서드의 내부 동작 로직 차이

620

김정배

작성한 질문수 17

2

안녕하세요. JPA 에서 PUT, PATCH 의 내부 동작 차이가 궁금해서 질문 남깁니다.

PUT 은 리소스를 완전히 대체하고, PATCH 는 일부 필드를 업데이트 하는 것이라고 했는데, 리소스를 어떻게 수정할 것인지는 Service 계층에 개발자가 정의한 메서드 로직대로 결정되는 게 아닌가 해서요.

 

개인적으로 테스트를 해봤는데,

다음과 같이 MemberController 에서 API 2개를 짰고 (PUT, PATCH) 둘 다 MemberService.updateMember 메서드를 호출합니다.

// MemberController

@PutMapping("api/members/{memberId}")
public void putUpdateMember(
        @PathVariable(value = "memberId") Long memberId,
        @Valid @RequestBody MemberUpdateRequestBody request){
    memberService.updateMember(memberId, request);
}

@PatchMapping("api/members/{memberId}")
public void patchUpdateMember(
        @PathVariable(value = "memberId") Long memberId,
        @Valid @RequestBody MemberUpdateRequestBody request){
    memberService.updateMember(memberId, request);
}

 

MemberServIce 에서는 두 개의 필드 값만 변경합니다.

// MemberService

public void updateMember(Long memberId, MemberUpdateRequestBody request) {
    Member member = memberRepository.findById(memberId).orElseThrow(() -> new EntityNotFoundException("member not found"));
    member.changeName(request.getName());
    member.changeAge(request.getAge());
}


결과적으로 2가지 HTTP 메서드가 호출되어 실행된 DB Query 는 동일했습니다.

그래서 궁금한 점이, HTTP 메서드에 따라 리소스를 갈아 끼우거나(PUT) 일부 필드만 업데이트(PATCH) 되는 것이 아니라, Service 계층에서 어떻게 로직을 짜는지에 따라 결정되는 게 아닌가? 해서 질문 남깁니다.

네트워크

답변 1

4

y2gcoder

안녕하세요. 기무정그배님, 공식 서포터즈 y2gcoder입니다.

말씀하신대로 HTTP Method 를 사용하더라도 그 내부 구현 코드는 다르게 작성할 수 있습니다.

가령 HTTP Method 를 GET을 사용하더라도 내부에서 리소스를 변경하는 로직으로 구현할 수 있을 것입니다. 다만 그렇게 했을 경우 해당 API를 사용하는 클라이언트 입장에서는 "GET API라서 호출했더니 리소스를 변경하고 있네?" 라고 혼동할 수 있을 것입니다.

HTTP Method는 원활한 의사소통을 위해 합의된 약속입니다. 약속에 강제성은 없지만, 거의 모든 개발자들이 합의한 약속이고 이를 통해 개발자들은 다른 개발자들이 만든 API 를 보고 빠르게 이해하고 원활한 의사소통이 가능해집니다. 그렇기 때문에 다들 정한 HTTP Method 에 맞는 로직을 짜려고 하는 것입니다 :)

감사합니다.

캐시무효화시 그냥 no-store만 넣어되지 않나요?

0

71

2

API의 헤더와 바디에 대한 문의 입니다.

0

70

2

수정폼과 수정

0

66

1

쿠키에 대해 질문드려요!

0

88

2

서버에서 캐시 검증 헤더를 직접 처리해야 하나요?

0

86

1

http api get, post 멱등

0

40

1

컬렉션의 개념

0

49

1

시작라인에 들어가는 요청 대상 경로는 상대 경로 아닌가요?

0

54

1

PATCH 는 PUT처럼 멱등이여야 하지 않나요?

0

80

1

리소스 질문드립니다

0

56

1

IP 패킷 질문입니다.

0

58

1

html from, http api

0

75

2

브라우저 캐시가 60초 유효하다는게 무슨 뜻일까요

0

120

1

stateless 무상태 예제가 생각났는데. 저가 생각 한게 맞는지 궁금합니다.

0

98

1

URI 및 URL 질문, 왜 자바(스프링)에서는 이렇게 나누었는지?

0

141

1

host와 port

0

106

1

tcp/ip는 연결을 유지? 아니면 유지하지 않음?

0

144

1

다음 강의 커리큘럼 질문!!

0

130

2

캐시 개념에 대해서 설명하시지는 않으시는건가요?

0

113

1

클라이언트가 patch, delete 요청 시 알아야 하는 url

0

91

1

html form 형태 전송시 new, edit 등 컨트롤 리소스를 사용하는 이유

0

168

2

비 연결성(connectionless) 강의에서 질문입니다~

0

139

1

PATCH를 사용하지 못할 때 왜 POST?

0

161

2

협상과 우선순위3 질문드립니다.

1

130

1