Jpa

Entity & Dto

배고픈 징징이 ㅣ 2024. 1. 18. 11:18

1. Entity, Dto

Entity : DB에 저장되는 데이터 객체, DB와 직접적으로 연결된다.

DTO : Client와 Server 간의 데이터 전송을 위해 설계된 객체

 

https://pinokio5600.tistory.com/5

 

DTO, DAO, VO 란?

[ DTO ] 1. Data Transfer Object 2. 계층간 데이터 교환을 위한 JAVA Beans를 의미 Client ↔ Controller, Controller ↔ Serivce, Serivce ↔ Repository 3. 로직을 가지지 않는 순수한 데이터 객체, GETTER & SETTER만 가진 클래스

pinokio5600.tistory.com

 

2. Dto 사용 이유

  1. 다양한 화면에 맞는 스펙을 제공할 수 있다.
    필요한 데이터만 전송될 수 있도록 하므로써, 전송하는 데이터양과 네트워크 대역폭 사용량이 최적화되어 더 빠른 응답시간과 전송시간을 얻을 수 있다.

  2. Entity의 외부 노출을 막을 수 있다.
    Entity를 반환하는것은 테이블을 공개하는 것과 다름이 없으므로, 민감한 정보가 노출될 가능성이 있다.

  3. 순환 참조 문제를 막을 수 있다.
    Entity 간에 양방향 관계가 존재할 경우, Entity를 반환하는 순간 순환 참조로 인한 무한 JSON 직렬화 이슈가 발생할 수 있다.
    하지만 DTO는 Entity 간의 양방향 참조가 포함되지 않은 간단한 구조를 갖아, 순환 참조 문제를 예방할 수 있다.

  4. Entity 구조 변경 시 작업이 줄어든다.
    Entity의 필드 이름이 변경 될 경우, API를 따로 수정하지 않고 Dto 수정으로 작업을 줄일 수 있다.

  5.  Validation Code와 Modeling Code 분리

    Validation Code : @NotNull, @NotEmpty, @NotBlank 등
    Modeling Code : @Column, @JoinColumn, @ManyToOne 등

    Entity는 DB의 Table과 매칭되는 필드가 선언되어 있다.
    그렇기 때문에  Entity에는 Modeling을 위한 코드가 추가된다.
    Entity에 Validation Code가 들어가게 된다면 Entity Class는 더 복잡해지고 가독성이 떨어지게 된다.
    그래서 각각의 요청마다 다른 DTO를 만들어 상황에 따라 필요한 Validation Code를 추가하여 Entity Class의 Modeling에 집중할 수 있게 한다.
반응형

'Jpa' 카테고리의 다른 글

ModelMapper & MapStruct  (0) 2024.01.22
번외. QueryDSL & JPA  (0) 2023.01.19
5. 연관관계 매핑  (0) 2023.01.19
4. 엔티티 매핑  (0) 2023.01.19
3. 영속성(Persistence) 관리  (0) 2023.01.19