본문 바로가기
개발/Spring

Entity와 DTO

by meanjung 2023. 8. 2.

Controller에서 응답 객체나 요청 객체를 받을 때 Entity를 그대로 사용하는 것보다 DTO를 사용하는 것이 권장된다.

 

엔티티란,

도메인의 핵심 로직과 속성을 갖고 있고, 실제 DB의 테이블과 매칭되는 클래스이다.

 

 

DTO를 사용해야 하는 이유

  1. 엔티티 내부 구현을 캡슐화할 수 있다.
    1. 위의 엔티티의 정의에 따라, 엔티티가 getter, setter를 갖게 된다면 controller와 같이 비즈니스 로직과 크게 상관없는 곳에서 자원의 속성이 실수로 변경될 수 있다.
    2. 또한 엔티티를 UI 계층에 노출하는 것은 테이블 설계를 화면에 공개하는 것과 다름없기에 보안적으로도 바람직하지 못하다.
  2. 화면에 필요한 데이터를 선별할 수 있다.
  3. 순환참조를 예방할 수 있다. 
    1. JPA로 개발할 때, 양방향 참조를 사용하면 순환참조를 조심해야 한다....
    2. 이때 양방향 참조된 엔티티를 컨트롤러에서 응답으로 리턴하게 되면, 엔티티가 참조하고 있는 객체는 지연 로딩되고, 로딩된 객체는 또 다시 본인이 참조하고 있는 객체를 호출하게 된다. 이렇게 서로 참조하는 객체를 계속 호출하면서 결국 무한 루프에 빠지게 된다. 
    3. 물론 이 순환참조의 근본적인 원인은 양방향 매핑 자체에 있다고도 할 수 있지만, 양방향 참조가 부득이한 상황이라면 순환참조가 일어나지 않도록 응답의 return으로 DTO를 두는 것이 안전하다.
  4. Validation 코드와 모델링 코드를 분리할 수 있다.
    1. Entity -> @Column, @JoinColumn, @ManyToOne..
    2. Validation -> @NotNull, @NotEmpty.. 같은 코드 분리 가능

 

 

https://tecoble.techcourse.co.kr/post/2020-08-31-dto-vs-entity/

 

댓글