[Spring]DTO vs. Entity

·2024년 1월 8일
0

Spring Framework

목록 보기
1/3


그림 출처

✔️ Entity

  1. DB 테이블과 매핑되며 테이블이 가지지 않는 컬럼을 필드로 가져서는 안됨
  2. DB와 Repository와의 통신에 사용
  3. 영속성을 목적으로 사용하는 객체
  4. Setter 사용 지양(객체의 안전성, 일관성을 위해)
  5. Constructor나 Builder를 사용해서 객체 초기화
@Builder
@Getter
@Entity
@NoArgsConstructor
public class Membmer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idx;
    private String name;
    private String email;
 
    public Member(Long idx, String name, String email) {
        this.idx = idx;
        this.name = name;
        this.email = email;
    }
}

.

✔️ DTO(Data Transfer Object)

  1. 계층 간 데이터 교환을 위한 객체
  2. 데이터 전달이 목적이므로 읽고 쓰기가 가능하며 일회성의 성격이 강함
  3. Controller 같은 클라이언트 단과 직접 마주하는 계층에서는 Entity 대신 DTO를 사용해서 데이터를 교환
  4. 주로 View와 Controller 사이에서 데이터를 주고받을 때 활용성이 높음
  5. Getter와 Setter를 포함하며, 이외의 비즈니스 로직은 포함하지 않음
  6. requests/responses에 사용하기에 적절
  7. DB와 1대1 매핑이 아니기에 Entity보다 적거나 많은 필드를 가질 수 있음
public class MemberDTO {

    pulic MemberDTO() { }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

.

❓ 이 둘을 구분하는 이유

  1. Model은 DB 테이블 구조와 유사하기 때문에 이것의 노출을 원치 않음
  2. DTO가 일회성으로 데이터를 주고받는 용도로 사용되는 것과 다르게 Entity의 생명주기(Life Cycle)도 전혀 다름

참고
https://stackoverflow.com/questions/72025894/list-differences-dto-vo-entity-domain-model
https://wildeveloperetrain.tistory.com/101
https://sowon-dev.github.io/2021/09/06/210907Jpa-entityVSDto/
https://www.devkuma.com/docs/dto-vo-entity/
추가
https://velog.io/@ohzzi/Entity-DAO-DTO%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C

profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글