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

Devel님의 프로필 이미지
Devel

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

7강. 유저 생성 API 개발

7강. 유저 생성 API 개발 질문있습니다.

작성

·

327

·

수정됨

0

안녕하세요

현재 7강. 유저 생성 API 개발 의 9분 듣고있습니다.

국비 프로젝트에서 dto에 직접 저장을 했던 경험이 있습니다.

선생님께서는 dto에 패키지의 UserCreateRequest에 저장하지 않고 domain패키지에 User라는 객체를 따로 만들어서 저장하시더라구요.

그렇게 하는 이유를 알려주실 수 있을까요?

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, 권하나님! 질문 올려주셔서 감사드립니다~! 😊

 

아마 이런 의도로 질문을 주신 것 같아요!! "dto에 직접 저장을 했다"라는 것을 코드로 표현해 보면.. (약간 느낌만 살려보겠습니다 ㅎㅎㅎ)

private List<UserCreateRequest> users = new ArrayList();

public void saveNewUser(@RequestBody UserCreateRequest request) {
  users.add(request); // 이렇게 UserCreateRequest를 추가할 수도 있음.
}

인 것 같고요!! User 라는 객체를 따로 만들어 저장했다라는 느낌은~ UserCreateRequest 를 바로 저장하는 대신 User 로 한 번 변환해 저장했다 라는 느낌 같습니다!

 

아마 강의를 쭉 들어주시면, 이 방식 자체가 "서버를 껐다가 키면 데이터가 휘발되는 방식"이고 동시에 "ORM을 사용하지 않는 방식"이라는 것을 알게 되실거에요. 즉, 현업에서는 쓸 일이 없는 방식이긴 한거죠~~

 

하지만, 단편적으로

  • UserCreateRequest 를 바로 저장하는 방법

  • User 를 바로 저장하는 방법

이 2가지만 비교해서 후자를 선택한 이유를 말씀드리자면, 도메인 객체(User)와 DTO 객체 (UserCreateRequest)를 구분하기 위해서 입니다!!

둘을 구분해 두면 추후에 변경사항이 생겼을 때 side effect를 최소화 한다거나, 유지보수가 쉬워지는 등 장점이 많기 때문이죠 🙂

비슷한 개념으로는 "MVC 패턴"이라는 것이 있습니다! 이 역시 역할에 맞게 객체를 구분하는 패턴인데요! UserCreateRequest 가 보여지는 데이터 이므로 View에 해당하고, User 가 도메인 객체이므로 Model에 해당한다고 보시면 됩니다.

 

답변이 도움이 되었으면 좋겠습니다.

또 궁금한 점 있으시면 편하게 질문 주세요~~ 🙏

 

Devel님의 프로필 이미지
Devel

작성한 질문수

질문하기