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

유승현님의 프로필 이미지
유승현

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

변경 감지와 병합(merge)

업데이트 서비스 관련 질문

작성

·

149

0

public void updateItem(UpdateDto updateDto){

item.changeName(updateDto.getName())

...

....

...

...

}

이런 수정 메서드를 만들었고 수정 api를 제공한다고 할때

프론트에서 변경하고자 하는 값 외 다른 값은 그대로 넣어주도록 강제해야 할까요?

그렇지 않다면 변경 가능한 가짓수가 2^n일것이고 모든 메서드를 만들 순 없는 것같아서 질문 드립니다

답변 1

0

안녕하세요. 유승현님, 공식 서포터즈 David입니다.

.
이럴 때 변경감지가 유용합니다.

1. 사용자가 수정을 요청한 데이터들만 DTO가 들고 있을 겁니다. (수정한 데이터 + 기존 데이터의 경우에도 상관없습니다)

2. 엔티티를 가져와서 DTO의 데이터를 엔티티로 업데이트 한 후

3. 엔티티를 저장합니다.

하이버네이트가 변경감지하여 변경된 데이터만 업데이트 해줍니다.

굳이 모든 케이스를 커버하는 수정 메서드를 만들 필요가 없습니다.

.감사합니다.

유승현님의 프로필 이미지
유승현
질문자

사용자가 null값이나 ""값을 넣는 경우에도 처리가 되는 걸까요?

원래 값이 
a = "A"

b = "B"

...

z= "Z"

인데 

클라이언트가 

a값만 바꾸고 싶은 경우

a = "AA"

b = "B"

...

z= "Z"

처럼 바꾸지 않을 값은 그대로 넣어서 api를 호출하게 해야 하냐
아니면 

a = "AA"

b =""

..

z=""

이렇게 변경할 값만 넣게 해도 되냐의 질문이였습니다

그건 또 다른 얘기입니다.

null과 공백이 들어올 때 그걸 걸러내는 검증 로직이 없다면 그대로 엔티티에 반영되고 업데이트될 겁니다.

DTO에 a, b 변수에 대해서만 수정 데이터가 들어오고 c, d에는 아무런 데이터가 없다면 어떻게 이를 알아차리고 a, b에 대해서만 엔티티쪽으로 데이터를 넘겨줄 수 있을까요?

상태를 업데이트 하는 메서드 내에서 매개변수로 null과 공백이 들어올 때, 해당 멤버변수는 업데이트 않고 넘어가게 처리할 수도 있습니다.

이런 부분의 테스트는 직접 해보시면 학습에 더욱 도움이 될 것 같습니다:)

유승현님의 프로필 이미지
유승현

작성한 질문수

질문하기