hayu's 개발 일지

[TIL]240319 Entity & DTO 본문

프레임워크/spring

[TIL]240319 Entity & DTO

hayu00 2024. 3. 19. 21:38

Entity란?

  • Entity 클래스는 실제 DB 테이블과 매핑되는 클래스로 데이터 베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다. (엔티티 클래스는 실제 DB의 테이블과 1:1 매핑된다.)
  • Entity는 데이터 베이스 영속성의 목적으로 사용되는 객체이기 때문에 요청(Request)이나 응답(Response)을 전달하는 클래스로 사용하는 것은 좋지 않다.
  • Entity에서는 Setter 메서드의 사용을 지양해야 한다. 변경되지 않는 인스턴스에 대해서도 Setter로 접근이 가능해지기 때문에 객체의 일관성, 안전성을 보장하기 힘들어진다.(Setter 대신 생성자나 Builder를 사용하는 것이 좋다.)

Dto란?

  • 계층(Layer) 간 데이터 교환이 이루어질 수 있도록 하는 객체이다.(직렬화에도 사용된다.)
  • Controller 같은 클라이언트와 마주하는 계층에서는 Entity 대신 DTO를 사용해서 데이터를 교환하며 그 외에도 DTO를 사용할 수 있지만 주로 View 와 Controller 사이에서 데이터를 주고 받을 때 활용성이 높다.(클라이언트와 서버 간 데이터 전송을 위해 설계된 객체이다.)
  • DTO는 Getter, Setter 메서드를 포함한다.

Entity 와 DTO를 분리하는 이유

DB와 View 계층 사이의 역할 분리를 위해서 이다.

  • DTO는 DB와 1:1 매핑을 하는 Entity 객체와 달리 각 계층끼리 주고 받는 전송 객체이다.
  • 순수하게 데이터를 담고 있다는 점에서 Entity와 유사하지만 목적 자체가 데이터의 전달이므로 일회성으로 사용되는 성격이 강하다.
  • JPA를 이용하게 되면 Entity 객체는 단순히 데이터를 담는 객체가 아니라 실제 DB와 관련이 있고 내부적으로 EntityManager(EM)가 관리하는 객체이다.

 

참고자료

- https://velog.io/@eunsiver/DTO-Entity%EC%9D%98-%EC%B0%A8%EC%9D%B4

- https://wildeveloperetrain.tistory.com/101

-https://hstory0208.tistory.com/entry/SpirngJPA-Dto%EC%99%80-Entity%EB%A5%BC-%EB%B6%84%EB%A6%AC%ED%95%B4%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

-https://wjddntjr555w.tistory.com/50