들어가며
주특기 주차가 시작되었다. JPA를 처음 사용해보는 거라서 삽질을 엄청나게 하느라고 따로 공부한 내용은 없었다.
DAO와 DTO의 차이는 정리한 적이 있지만 오래 전 포스팅이라 내용이 부족한 것 같아
오늘의 TIL은 간단하게 JPA에서 사용하는 domain과 DTO의 차이점에 대해 간단하게 정리해보고자 한다.
Domain (=Entity)
Domain 즉, Entity는 실제 DB의 테이블과 매핑되는 클래스이다. JPA를 사용할 때, @Entity, @Column, @Id과 같은 어노테이션을 사용한다. Entity는 DB의 테이블 내에 존재하는 컬럼만을 필드로 가져야하고, 상속을 받거나 구현체여서는 안된다.
DTO(Data Transfer Object)
이름에서 알 수 있듯이 DTO는 데이터를 '전송'하는 객체이다. 각 계층을 옮겨다닐 때 데이터를 DTO에 들고 옮겨다니게 된다. 표현 계층, 즉 클라이언트 계층에서 사용하기 위한 필드를 추가할 수도 있다.
일반적으로 Getter와 Setter만 가지고 있으며, 로직을 담지 않는 순수한 자바 객체로 설명된다.
Domain과 DTO의 차이
Entity와 DTO는 그림과 설명에서 알 수 있듯이 역할이 분명히 다르다. Entity는 DB의 정보를 매핑 위한 클래스이고, DTO는 각 계층 간을 이동할 때 데이터를 '전달'해주는 클래스임을 알고 있어야한다. 그 외에도 DTO는 어떤 로직도 갖지 않는 순수하게 필드만 존재하는 클래스임에 반해 Entity는 핵심 비지니스 로직을 담는 영역이기 때문에 그에 맞는 비지니스 로직을 가질 수 있다.
예를 들어 JPA 강의에서 배웠듯 JPA로 DB update를 수행하기 위해 Entity클래스에 update 로직을 짜주었다.
이처럼 DTO와 Entity는 서로의 관심사가 다르므로, 이 둘은 철저하게 분리해서 관리되어야한다.
만약 View에 접근할 때 Entity 클래스를 사용하게 되면 DB의 데이터를 변경할 위험이 있다. DTO는 View와 통신하면서 자주 변경이 일어나므로 분리를 해서 Entity 클래스를 보호해주어야햔다.
마치며
간단하게 헷갈렸던 개념을 정리했다.
처음 JPA를 사용하면서 적응을 하느라고 아무것도 하지 못했기 때문에 내일부터는 과제도 조금씩 만지면서 JPA에 대해 익숙해지기로 했다.
오늘의 한마디 by 예인님 - 너만 고양이 없어
'Study > TIL' 카테고리의 다른 글
[TIL] 06/06 항해99 29일차 - 과제 [나만의 블로그 만들기] (0) | 2022.06.07 |
---|---|
[TIL] 06/04 항해99 27일차 - 과제 [나만의 블로그 만들기] (0) | 2022.06.05 |
[TIL] 06/02 항해99 25일차 - 트러블 슈팅 (1) | 2022.06.03 |
[TIL] 06/01 항해99 24일차 - JPA를 사용하는 이유?, JPA 초기 세팅 (0) | 2022.06.01 |
[TIL] 05/31 항해99 23일차 - CS 공부 가이드 (0) | 2022.06.01 |