SMALL
  • Entity란
  • Dto란
  • Entity와 Dto를 분리해서 사용해야 하는 이유

JPA에 대해서 학습을 하면서 간단한 Controller을 작성하는 예제를 수행해 보았다. 

간단하게 JPA를 사용하는 로직에서는 굳이 Dto 클래스를 만들지는 않는다. 

JPA 예제 소스에 대한 여러 가지 글들을 찾아서 읽어보는데, Entity와 Dto는 구분해서 사용하는 게 좋다는 글을 보고 해당 내용을 정리해 보도록 하겠다. 

 

먼저 간단하게 Entity, Dto가 무엇인지 알아보자.

Entity

  • JPA에서는 엔티티는 테이블에 대응하는 하나의 클래스 ( 클래스 - 테이블 매핑 관계 )
  • DB에서 영속적으로 저장된 데이터를 자바 객체로 매핑하여 '인스턴스의 형태'로 존재하는 데이터
    ( 객체 - 테이블 로우 매핑 관계 )
  • @Entity, @Column, @Id 등을 이용

Dto 

  • 계층간 데이터 교환이나 View와 데이터를 교환할 때 사용하는 객체
  • DB로부터 데이터를 얻어 Service나  Controller 등으로 보낼 때 사용하는 객체
  • 로직을 갖고 있지 않은 데이터 객체이며, getter/setter 메서드만을 갖는다

위의 두 내용을 간단히 구분하면 Entity는 DB Layer와 데이터 교환을 위한 클래스이고, Dto는 View Layer와 데이터 교환을 위한 클래스이다.


그럼 이 두 가지 클래스를 구분하여서 사용해야하는 이유에 대해서 알아보자. 

  • View와 통신하는 Dto 클래스는 자주 변경이 된다 ( UI 요건에 따라서 )
    하지만, 테이블에 매핑되는 Entity는 그에 비해 변경도 적고, 영향범위도 매우 크다
  • 테이블에 매핑되는 정보가, 실제 View에서 원하는 정보와 다를 수 있다.
    ( 이러한 경우에는 변환하는 로직이 필요한데, 같이 쓰게 되면 해당 로직이 Entity에 들어가게 되어서 Entity가 지저분해진다 )
  • DB로부터 조회된 모든 Entity를 View로 넘기게 되면, 원하지 않는 정보까지 전달하게 되어 정보 노출에 대한 문제가 생길 수 있고, 이를 막기 위한 비즈니스 로직과는 상관없는 방어 로직들이 생기게 된다

 

LIST

+ Recent posts