
문득, 왜 객체를 직접 반환하는 대신에 Response DTO를 따로 만들어 반환해야 하는지 궁금증이 생겼습니다.
이름과 나이를 저장하고 있는 User라는 객체에서 이름과 나이를 반환하려고 할 때, 그냥 User를 반환하면 안될까요?
객체를 직접 반환한다고 해서, 당장은 큰 문제가 없어 보입니다. 실제로 User가 이름과 나이라는 필드만 가지고 있고, 해당 정보를 API로 잘 넘겨줄 수 있습니다.
그러나 문제는 User라는 객체가 다양한 정보를 담게 될 때부터 시작됩니다!
현재 User를 표현하는 객체는 단 한 개이므로 객체를 반환하게 된다면, 이름과 나이를 요청한 API 외부로 개인정보인 email과 password가 노출되게 됩니다.
또한, User라는 객체는 내부 비지니스 로직과 API 외부로 보여줄 필드를 관리하고 있습니다.
User가 하는 일을 분담해서 API 외부로 보여줄 필드는 DTO로 관리하는 것이 더 좋은 방식인 것 같습니다!
이제, User는 비즈니스 로직 처리를 위한 필드들만 가지고 있고 UserResponse는 어플리케이션 외부로 노출할 필드만을 가지고 있게 되어 책임과 경계가 더욱 분명해졌네요.
덕분에 email과 password같은 소중한 필드는 어플리케이션 내부에 숨길 수 있게 되었습니다 :)
위와 같은 이유로 도메인 객체와 DTO를 구분하여 사용하면 좋겠다고 느꼈습니다.