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

정지죤님의 프로필 이미지

작성한 질문수

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

변경 감지와 병합(merge)

20분경에

해결된 질문

22.09.16 20:12 작성

·

209

0

컨트롤러에서 엔티티를 생성하지 않고

update 서비스를 만들어서

변경할 값만 dto를 만들던지, 파라미터를 전달하여 서비스에서

update를 하셨는데

saveItem을 사용하면 merge가 돼서

save를 사용하지 않고 update를 만들어서 변경감지를 사용한다는것까진 이해가 됐는데요

update를 만들때 왜 꼭 dto를 만들거나 변경할 파라미터만 넘기는건지는 잘 이해가 되지 않습니다.

좀 더 명확하게 지정하여 유지보수성을 증가시키기 위함뿐인건가요? 그 외에 merge가 실행됐을때 같은 오류가 생기는건 아닌거죠??

그렇게 웹사이트를 만들다보면 dto가 엄청 많이 만들어질거 같은데 그게 맞는건가요?

저도 모르게 편의성을 위해 객체 자체를 넘길거 같아서 정확한 이유를 알기 위해 질문드립니다~

답변 1

2

y2gcoder님의 프로필 이미지

2022. 09. 16. 22:13

안녕하세요. 정지죤님, 공식 서포터즈 y2gcoder입니다.

DTO가 필요한 이유에 대해서 질문해주셨습니다.

DTO가 필요한 이유는 명확함 때문인 것 같습니다. 이에 대한 답변 링크가 있어 첨부해드리겠습니다. 쭉쭉 타고 들어가서 영한님 답변까지 봐주세요!
https://www.inflearn.com/questions/652470

제가 생각한 예시도 들어보겠습니다. 예를 들어 엔티티 객체를 요청 시에도 사용한다고 가정해보겠습니다. 보통 웹 요청 시에는 요청 값에 대한 검증을 많이 하고 있기 때문에 엔티티 객체에 검증 관련 로직을 넣어주게 됩니다. 이런 식으로 엔티티 객체가 너무 많은 일을 담당하게 될 경우, 나중에 변경사항이 생길 때 코드 분석 및 변경이 어려워질 수 있습니다. 그래서 목적에 따라 사용 객체를 분리해서 사용하는 것입니다. 언뜻 보기엔 비효율적이지만 장기적으로 코드를 관리하는 관점에서 보면 명확한 코드로 인해 얻는 장점에서 오는 효율적인 면들이 더 많습니다.


감사합니다.