Entity, DTO, DAO란?

jhin·2023년 3월 15일
0

Web

목록 보기
4/7

Entity

DB 테이블에 존재하는 Column들을 필드로 가지는 객체 클래스

  • DB에서 data를 저장하고 검색하는 데 사용되는 객체
  • 주로 JPA(Java Persistence API)를 사용하여 DB와 상호작용하는 데 사용
  • DB의 테이블의 구조와 필드를 반영
  • 주로 DB에서 가져온 data를 저장하고 유지하는 데 사용
  • 클래스에 @Entity 명시해야 함
  • 내부 필드에 @Id, @GeneratedValue 등 명시해야 함 (Primary Key)

DTO

로직을 갖지 않는, 계층 간 데이터 교환을 위한 객체

  • Data Transfer Object
  • 서비스 계층과 클라이언트(또는 다른 서비스) 사이에서 데이터를 전달하는 데 사용
  • 일반적으로 DTO는 Entity와 다른 구조를 가지며, 필요한 데이터만 포함
  • 데이터 전송 시에 필요한 필드만 전달하므로, 네트워크 트래픽을 최적화하고 불필요한 정보 노출을 방지할 수 있음
  • Entity와 DTO는 서로 다른 목적과 컨텍스트를 가지므로, 필요에 따라 서로를 변환하는 과정이 필요할 수 있음

Entity와 DTO를 분리하는 이유

  • DB Layer와 View Layer의 역할 분리
  • DB 테이블과 매핑되는 Entity 클래스가 변경되면 여러 클래스에 영향을 끼침
    View와 통신하는 DTO 클래스는 자주 변경됨
  • DTO는 일회성으로 데이터를 주고받는 용도로 사용됨
    Entity의 Life Cycle은 DTO와 다름
  • DB로부터 조회된 Entity를 그대로 View로 넘기게 되었을 때 불필요한 정보 및 노출되면 안 되는 정보까지 노출될 수 있고, 이를 막기 위한 로직을 따로 구현해야 함

계층 간의 역할 분리

Entity는 주로 데이터베이스와의 상호작용을 담당하고, 비즈니스 로직과 분리되어야 합니다. DTO는 클라이언트나 다른 서비스와의 데이터 전달을 담당하므로, 데이터 전송과 관련된 로직을 갖고 있어야 합니다.

데이터 전송 최적화

DTO는 필요한 필드만 포함하여 데이터를 전달하므로, 네트워크 트래픽을 줄이고 성능을 향상시킬 수 있습니다.

보안

Entity는 데이터베이스와 밀접하게 연관되어 있으므로, Entity를 외부로 노출하면 보안상의 위험이 증가할 수 있습니다. DTO를 사용하면 필요한 데이터만 전달할 수 있으므로, 불필요한 정보 노출을 방지할 수 있습니다.


DAO

DB와의 상호작용을 추상화한 인터페이스
Persistence Layer (DB에 data를 CRUD 하는 계층)

  • Data Object Access
  • Service와 DB를 연결하는 고리의 역할
  • DB에 액세스하여 데이터를 생성, 읽기, 수정, 삭제(CRUD) 하는 메서드를 정의
  • 주로 JPA나 Hibernate와 같은 ORM(Object-Relational Mapping) 기술을 사용하여 Entity 객체를 데이터베이스에 저장하거나 조회하는 기능을 구현
  • 데이터베이스의 구체적인 구현에 대한 세부 정보를 캡슐화
  • 비즈니스 로직에서는 DAO 인터페이스만 사용하여 데이터에 액세스할 수 있음

예시(JPA 사용 시)

public interface QuestionRepository extends JpaRepository<Question, Long> {
}

Question 자리에는 특정 Entity를, Long의 자리에는 특정 Entity의 Primary Key를 넣는다.

0개의 댓글