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 사용 이유
- 다양한 화면에 맞는 스펙을 제공할 수 있다.
필요한 데이터만 전송될 수 있도록 하므로써, 전송하는 데이터양과 네트워크 대역폭 사용량이 최적화되어 더 빠른 응답시간과 전송시간을 얻을 수 있다. - Entity의 외부 노출을 막을 수 있다.
Entity를 반환하는것은 테이블을 공개하는 것과 다름이 없으므로, 민감한 정보가 노출될 가능성이 있다. - 순환 참조 문제를 막을 수 있다.
Entity 간에 양방향 관계가 존재할 경우, Entity를 반환하는 순간 순환 참조로 인한 무한 JSON 직렬화 이슈가 발생할 수 있다.
하지만 DTO는 Entity 간의 양방향 참조가 포함되지 않은 간단한 구조를 갖아, 순환 참조 문제를 예방할 수 있다. - Entity 구조 변경 시 작업이 줄어든다.
Entity의 필드 이름이 변경 될 경우, API를 따로 수정하지 않고 Dto 수정으로 작업을 줄일 수 있다. - 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 |