ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DTO와 도메인을 분리해야 하는 이유
    프로젝트/게시판 2024. 4. 8. 23:12

    게시판을 어느정도 만들고 JPA공부도 해보고싶어서 일단 친구에게 피드백을 받았다.(물론 아직 많이 남았는데,,JWT로그인 /게시물 CRUD/ 회원가입/ 페이징/ 검색 등 기초적인 부분만 끝났다.)

     

    피드백 내용중 하나가 아래 내용이었다.

    즉, 현재 계층마다 MemberDTO를 통해서 데이터를 전달하고 있는데 

    컨트롤러에서는 MemberSignUpRequest객체를 받고 서비스 계층에서 Member객체로 변환하는것이 좋다는 것이다.

     

    이전에 RequestDTO / ResponseDTO를 나누는것이 좋다는 이야기를 들은적이 있는데 이번 기회로 좀 찾아보기로 했었다.

    그렇게 유튜브를 뒤적거리는데 

    https://www.youtube.com/watch?v=OV8e88kIU-U&t=1s

    해당 강의를 보게 되었고, 깨달음을 얻어버려서 기쁜 마음으로 정리하기로 했다.

     

    우선 DTO란 Data Transfer Object의 약자로 계층간 데이터를 넘겨주고 클라이언트에게 필요한 데이터를 넘겨주기 위해서 사용한다.

    현재 나의 boardProject directory

     현재 나는 도메인을 따로 나누지 않은 상태로 DTO를 관리해 오고 있었다. 

    이로 인해 데이터를 다른 계층으로 넘겨줄 때 필요하지 않은 데이터까지 넘겨줄 수 밖에 없었다.

    (학원에서 이렇게 배웠었다..아마 MyBatis를 알려줘서 Entity 쓸 일이 없다보니 이렇게 배운듯 하다.)

     

    하지만 이렇게 DTO를 도메인 겸으로 쓰고 있었다면 수정사항이 생겼을 때 유지보수 하기가 복잡해진다.

    도메인 겸 DTO로 같이 쓰는 경우

    위와 같이 도메인 겸 DTO를 겸해서 쓰는경우

    기존에 쓰고 있는 DTO에 쿠폰과 구매내역까지 정보를 추가해줘야 한다면, DTO를 수정하는 과정에서 DTO를 넘겨받는 클라이언트나 다른 계층에서 버그가 발생할 수 있다.

    또한 쿠폰과 구매내역을 다른 곳에서 필요로 한다면?

    또 쿠폰과 구매내역을 위한 코드를 작성하게 되면서 뒤죽박죽이 되어버릴 것이다.

    DTO와 도메인을 따로 나눈 경우

    하지만 DTO와 도메인을 따로 나눈 경우,

    이미 나눠져있는 도메인과 추가하려는 정보들을 조합해서 상황에 맞는 DTO를 넘겨주게 되기 때문에 더 유연하게 코드를 유지보수 할 수 있고, 쿠폰과 구매내역 객체를 가져와 조합하는 것이기 떄문에 다른곳에서도 쿠폰과 구매내역을 끌어다 쓰면 된다.

     

    즉, DTO는 그저 계층간 데이터를 넘겨주고 받는 객체이기 때문에 본분에 충실하기 위해서는 원하는 데이터만 넘겨주고 받아야한다. 그렇기에 RequestDTO와 ResponseDTO를 나눌 필요가 있고 나중에 생길 추가작업과 유지보수를 위해 DTO를 조합해서 데이터에 요청에 맞는 데이터만 넘겨주는 것이 좋다!

     


    출처

    (유튜버 : 공부하는 개발자)

    https://www.youtube.com/watch?v=OV8e88kIU-U&t=1s

    '프로젝트 > 게시판' 카테고리의 다른 글

    프로젝트 DB고르기  (0) 2023.12.19
Designed by Tistory.