뚜껑뚜
Magnolia
뚜껑뚜
전체 방문자
오늘
어제
  • 분류 전체보기 (31)
    • 웹 개발 (2)
      • Java (0)
      • Spring Boot (0)
      • JPA (0)
      • JavaScript (1)
      • jQuery (1)
      • Mustache (0)
      • MyBatis (0)
    • DB (0)
    • CS (1)
      • HTTP (0)
      • etc (1)
    • 오류 로그 (19)
    • ETC (8)
    • 백엔드 로드맵 (0)
    • 개인 프로젝트 (1)
      • XYAB (1)
    • Diary (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • HTTP
  • post
  • Servlet
  • 프로젝트
  • Security
  • 컨트롤러
  • MVC
  • URI
  • Thymeleaf
  • JPA
  • 헤더
  • 어댑터
  • jquery
  • 서블릿
  • 로그인
  • get
  • 자바스크립트
  • View
  • 인텔리제이
  • 타임리프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜껑뚜

Magnolia

ETC

Entity, DAO, DTO

2022. 3. 15. 16:50

Entity

DB의 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다. DB의 테이블과 1:1로 대응되며, 때문에 테이블이 가지지 않는 컬럼들을 필드로 가져서는 안 된다. Entity는 외부에서 최대한 Entity의 Getter를 사용하지 않도록 내부에 로직을 구현하는데, 이때는 Domain 로직만 구현하고 Presentation 로직은 구현하지 않는다. 

 

Getter는 쓰되 Setter를 만드는 것은 피하는 것이 좋다. Setter의 사용이 Entity의 일관성을 해칠 수 있기 때문이다. 

 

Builder 패턴을 사용하는 것이 좋다. 멤버 변수가 많아지더라도 어떤 값을 어떤 필드에 넣는지 코드를 통해 확인할 수 있고, 필요한 값만 집어넣는 것이 가능하기 때문이다.

 

 

DAO(Data Access Object)

실제로 DB에 접근하는 객체이다. 프로젝트의 서비스 모델과 실제 DB를 연결하는 역할을 하며, JPA에서는 DB에 데이터를 CRUD하는 Repository 객체들이 DAO라고 볼 수 있다.

 

 

DTO(Data Transfer Object)

계층 간 데이터를 교환하는 역할을 한다. Entity를 Controller와 같은 클라이언트단과 직접 마주하는 계층에 직접 전달하는 대신 DTO를 사용해 데이터를 교환한다. 

 

DTO는 그저 계층 간 데이터 교환이 이루어질 수 있도록 하는 객체이기 때문에 특별한 로직을 가지지 않는 순수한 데이터 객체여야 한다. 또한 DB에서 꺼낸 값을 DTO에서 임의로 조작할 필요가 없기 때문에 DTO에서는 Setter를 만들 필요가 없고, 생성자에서 값을 할당한다.

 

 

Entity와 DTO를 분리하는 이유

Entity의 값이 변하면 Repository 클래스의 Entity Manager의 flush가 호출될 때 DB에 값이 반영되고, 이는 다른 로직에도 영향을 미친다. 때문에 view와 통신하면서 필연적으로 데이터의 변경이 많은 DTO 클래스를 분리해주어야 한다.

'ETC' 카테고리의 다른 글

이클립스 자바스크립트 에디터 설정  (0) 2023.05.15
MySQL 워크벤치에서 ERD 생성하기  (0) 2022.04.14
양방향 의존 관계 오류  (0) 2022.02.28
DTO의 위치에 대해  (0) 2022.02.20
경로에 관하여  (0) 2022.02.11
    'ETC' 카테고리의 다른 글
    • 이클립스 자바스크립트 에디터 설정
    • MySQL 워크벤치에서 ERD 생성하기
    • 양방향 의존 관계 오류
    • DTO의 위치에 대해
    뚜껑뚜
    뚜껑뚜

    티스토리툴바