[Spring boot] Entity와 DTO차이

SMongS·2022년 9월 15일
0

Spring boot

목록 보기
3/6

spring boot로 웹 개발을 하는 중 Entity와 DTO라는 개념을 보게 되었습니다.

처음할때, 왜 이걸 구별해서 분류하는지 이해를 못 했었기에 이번에 정리해봅니다.

Entity

실제 DataBase의 테이블과 1 : 1로 Mapping 되는 Class로, DB의 테이블내에 존재하는 컬럼만을 속성(필드)

  • 데이터베이스 영속성의 목적으로 사용되는 객체라서, 요청이나 응답 값을 전달하는 클래스로 사용하는 건 좋지 않습니다.
  • 많은 서비스 클래스와 비즈니스 로직들이 Entity 클래스를 기준으로 동작하기 때문에 Entity 클래스가 변경되면 여러 클래스에 영향을 줄 수 있습니다.
  • Entity에서는 setter 메서드의 사용을 지양해야 합니다.
    이유는 변경되지 않는 인스턴스에 대해서도 setter로 접근이 가능해지기 때문에 객체의 일관성, 안전성을 보장하기 힘들어집니다.
  • 그래서 setter 대신 Constructor(생성자) 또는 Builder를 사용하게 됩니다. (저는 둘 다 많이 씀)

Constructor

생성자(Constructor)를 이용해서 초기화하는 경우 불변 객체로 활용할 수 있고, 불변 객체로 만들면 데이터를 전달하는 과정에서 데이터가 변조되지 않음을 보장할 수 있습니다.

Builder

Builder를 사용하면 멤버 변수가 많아지더라도 어떤 값을 어떤 필드에 넣는지 코드를 통해 확인할 수 있고, 필요한 값만 넣는 것이 가능하다는 장점이 있습니다.

DTO

데이터 전송(이동) 객체라는 의미를 가지고 있다. DTO는 주로 비동기 처리를 할 때 사용

  • Controller 같은 클라이언트 단과 직접 마주하는 계층에서는 Entity 대신 DTO를 사용해서 데이터를 교환하며, Controller 외에도 여러 레이어 사이에서 DTO를 사용할 수 있지만 주로 View와 Controller 사이에서 데이터를 주고받을 때 활용성이 높습니다.
  • getter, setter 메서드를 포함하며, 이 외의 비즈니스 로직은 포함하지 않습니다.

자바 빈(JavaBean)이란,
JavaBean 규약에 따라 작성된 자바 클래스로 클래스 외부에서 필드에 접근할 때는 반드시 메서드를 통해 접근해야 하며, 이때 get, set 으로 시작하는 메소드를 이용합니다.

분리 이유

Entity와 DTO를 분리해서 관리해야 하는 이유는 DB Layer와 View Layer 사이의 역할을 분리하기 위해서 입니다.

DTO(Data Transfer Object)는 Entity 객체와 달리 각 계층끼리 주고받는 우편물이나 상자의 개념입니다. 순수하게 데이터를 담고 있다는 점에서 Entity 객체와 유사하지만, 목적 자체가 전달이므로 읽고, 쓰는 것이 모두 가능하고, 일회성으로 사용되는 성격이 강합니다.

참고 : https://wildeveloperetrain.tistory.com/101

profile
반갑습니당~😄

0개의 댓글