선생님 질문 있습니다.
745
작성한 질문수 61
이번 강의에서 질문이 있는 부분은 get /user 부분의 controller에서 User에 대한 리스트를 그냥 반환하지 않고 UserResponse라는 DTO를 통해 리스트를 반환하신 이유에 대해 궁금합니다.
스프링부트 프레임워크에서 강제하는 부분인건가요?
답변 4
8
안녕하세요 종민님! 크으~ 정말 좋은 질문이십니다! 👍
결론부터 말씀드리면, 스프링 프레임워크에서 강제하는 부분은 아니고
User를 바로 노출하는 것보다 DTO를 만들어 반환하는 것이 안전하고 확장가능성 있기 때문입니다!
설명 한 번 드려보겠습니다~~~!!
위의 그림과 같이 User 를 UserResponse 로 변환하지 않고 User 를 바로 사용했다고 해보겠습니다. 그렇다면 지금 당장은 큰 문제가 없어 보여요! 실제로도 name과 age만 가지고 있고, 해당 정보를 API로 잘 넘겨주면 되기에 문제가 없습니다.
그런데 이런 요구사항이 생겼다고 상상해보겠습니다.
우리 이제 로그인 기능을 추가하자~ 이메일과 비밀번호 필드가 추가되어야 해!
이메일과 비밀번호는 개인정보니까 API에는 name과 age만 반환해야해!
현재 User 를 표현하는 객체는 단 한 개이므로 email과 password는 User 객체에 추가되고 별도의 조치를 하지 않으면 (벌써 조치를 해야 한다는 것부터 번거롭습니다! 😭) 소중한 개인정보인 email과 password가 애플리케이션 외부로 노출되게 됩니다.
또한, 객체지향적인 관점으로 볼 때도 User 객체는 두 가지 일을 하고 있게 됩니다. (관련 내용은 17강에서 다루고 있습니다!)
API 외부로 보여줄 필드를 관리
내부의 비즈니스 로직을 처리하기 위한 필드를 관리
물론 8강까지는 요구사항이 매우매우 간단하기에 비즈니스 로직이라 부를만한게 없습니다 ㅎㅎㅎㅎ...
이 역할을 User 와 UserResponse 로 쪼개면 다음과 같은 상황이 됩니다!

User는 비즈니스 로직 처리를 위한 필드들만 가지고 있고 UserResponse 는 애플리케이션 외부로 노출할 필드만을 가지고 있게 되어 책임과 경계가 더욱 분명해졌고,
이 덕분에 email과 password 같은 소중한 필드는 애플리케이션 내부에 숨길 수 있게 되었습니다!
이때 User 와 같은 객체를 '도메인 객체'라고 불러요!!
우리가 어떤 기능을 구현하기 위해 main으로 참여하는, 주요 관심사인 객체이죠
위와 같은 이유로 도메인 객체와 DTO를 구분하는 것이 좋다고 할 수 있습니다 👍
혹시나 또 궁금하신 내용 있으시면 질문 남겨주세요! 감사합니다!! 🙏🙏
1
선생님 응원의 댓글을 항상 남겨주셔서 힘이 됩니다!
너무나 좋은 예시를 통해 이해가 잘 되었습니다.
앞으로 수업 열심히 듣고 선생님과 같은 멋진 개발자가 되도록 노력하겠습니다.
목소리 너무 좋으셔요~
패키지 구분에 대해 궁금한게 있습니다
0
15
1
리액트 관련 질문이 있습니다.
0
63
2
스프링부트 버전
0
72
2
7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.
0
58
2
33강. UserLoanHistory의 관계성에 대한 질문
1
55
2
Java JDK 버전 문의의 건
0
132
2
ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.
0
86
3
h2 console 접속했을 테이블 질문
1
64
1
ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨
0
74
2
15강. updateUser() 질문
0
55
2
깃허브 질
0
81
2
여기까지 다 끝냈다고 하셨는데
0
78
2
왜안될까요
0
69
2
MySQL 창이안ㄴ뜹니다
0
58
2
포스트맨
0
49
1
spring 개념적인 질문
0
71
2
인텔리제이 샘플코드 실행 안됨 오류
0
140
2
aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다
0
83
1
마이그레이션 오류입니다.
0
170
3
Whitelabel Error Page 오류가 났습니다.
0
162
2
안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ
1
90
3
궁금한게 있습니다.
0
57
2
DTO 관련
0
69
2
궁금한게 있습니다!
0
65
2





