• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • DTO는 어느 패키지에 존재해야 할까?
        2022년 07월 17일
        • starryeye
        • 작성자
        • 2022.07.17.오전02:37
        반응형

        DTO란

        Data Transfer Object의 약자로

        데이터 전송 객체이다.

        데이터를 layer간 전달하는 용도로 사용된다.

         

        참고로 VO라고 Value Object가 있는데

        값자체를 표현 하기 위한 용도이다..

        값이 불변이다는 것이 특징이다.

        값만 같다면 같은 객체라는 것이 보장되어야 하므로

        hashcode, equals 메서드를 오버라이딩 하여 구현해주자.

         

        본론으로 돌아와서..

        DTO는 어느 패키지에 위치 시켜야 할까에 대해 알아보자.

        위 그림은 일반적인 웹어플리케이션의 Contoller에서 Repository 까지의 계층을 나타낸다.

        각 계층간 데이터를 전달하기 위한 DTO들이 보인다.

        Controller는 Service에 의존적이고..

        Service는 Repository에 의존적이다.

         

        일반적으로

        Controller Java 코드들은 controller 패키지에..

        Service Java 코드들은 service 패키지에..

        Repository Java 코드들은 repository 패키지에 위치 시킬 것이다.

        그러면 DTO는..?

         

        위 그림에서 DTO2는 컨트롤러에서 서비스로 데이터를 전달시키기 위해 사용되고있다..

        결국 서비스에서 DTO2를 사용하기 위하여..

        컨트롤러는 서비스에게로 DTO2를 전달하고 있을 뿐이다.

        따라서 DTO2는 서비스 패키지에 위치 시키는 편이 좋다.

         

        DTO1도 마찬가지이다.

        이전 Controller, Service layer들은 Repository에 DTO1을 넘겨주기 위해 DTO1에 의존성이 있을 뿐..

        직접 사용하는 것은 Repository로 ..

        Repository 패키지에 DTO1이 존재하여야 한다.

         

        반대로 생각하여

        DTO2가 Controller 패키지에 존재한다고 생각 해보자..

        Service 코드에 DTO2가 사용되어 코드상 Service에서 Controller 패키지로 역 순환 의존관계를 만들어버린다.

        따라서..

        DTO2는 Service 패키지에 존재 해야 하는 것이다.

         

        <참고>

        위 방법대로 생각하여도.. 어디에 위치 시켜야 할지 애매하다면..

        DTO 패키지를 새로 만들어 거기에 위치 시키도록 하자..

        이 방법도 나쁜 방법이 아니다.

         

        반응형
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.