mjeongriver
article thumbnail

왜 엔티티를 직접 사용하지 말고 DTO를 사용해야 하는 걸까?

 

 

- DTO와 Entity 구분

  • DTO(Data Transfer Object): 클라이언트와 서버 간 데이터 전송을 위해 설계된 객체
  • Entity: 데이터베이스에 저장되는 데이터 객체로, 데이터베이스와 직접적으로 연결

 

- Entity를 직접 반환할 경우 생기는 문제점

  • 필요한 데이터만 전송하기 어렵다. 엔티티를 직접 반환하면 엔티티에 존재하는 모든 데이터가 반환된다. 모든 데이터를 반환하게 되면 트래픽이 증가할 수 있으며 성능 및 비용면에서도 현저한 차이를 가져올 수 있다. 즉, 사용자가 필요로 하는 데이터만 전송하기 어려움이 있다. 이로 인해 불필요한 데이터를 사용자에게 전달될 수 있다.
  • 보안 문제가 생긴다. 엔티티를 반환하면 테이블을 공개하는 것이나 다름없으므로 민감한 정보가 노출될 가능성이 있다.

 

- DTO와 Entity를 분리하여 얻는 장점

  • 필요한 데이터만 선별하여 서버 사용량을 최소화 할 수 있다. DTO는 서버에서 클라이언트에 데이터를 전송하는 데 사용된다. 따라서 Entity 범위에서 필요한 필드를 재정의하여 필요한 데이터만 전송될 수 있도록 할 수 있다. 이로 인해 전송하는 데이터양과 네트워크 대역폭 사용량이 최적화되어 더 빠른 응답시간과 전송시간을 얻을 수 있다.
  • 엔티티 구조가 변경되어도 안전하다. 엔티티 구조가 변경되더라도 DTO를 사용하여 데이터 전송을 처리하면 이 변경 사항이 클라이언트에 직접적 영향을 미치지 않는다. 서버 간의 결합도를 낮추고 유지보수가 용이해진다.
  • 보안이 강화된다. DTO와 Entity를 분리함으로써, 테이블 구조는 서버측에서만 알 수 있으므로 해커들이 데이터를 조작하는 것을 어렵게 할 수 있다. 따라서 DTO와 Entity를 분리하여 API 보안성을 강화시킬 수 있다.

 

- DTO와 Entity의 변환 위치

 

 

  • 컨트롤러에서는 DTO의 형태로 데이터를 받아 서비스에 전달한다.
  • 서비스에서는 비즈니스 로직을 수행하며 데이터 처리를 담당한다. 컨트롤러에서 받은 DTO를 Entity로 변환하고, 필요한 작업을 수행한 뒤에 Repository에 Entity를 전달한다.
  • 레파지토리에서는 Entity를 전달 받아 영속화를 처리한다.

 

- Entity와 DTO 변환 메서드 구현

  • toEntity(), toDto() 같은 메서드를 DTO 클래스에 직접 변환 메서드를 구현하여 상호 변환을 수행할 수 있다.

 

출처

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

 

[Spirng/JPA] Dto와 Entity를 분리해서 사용하는 이유

프로젝트를 진행하거나 강의, 책을 보면 항상 엔티티를 직접 반환하지말고 DTO로 변환하여 반환하라는 말을 접하거나 보았을 것이다. 하지만 단순히 "아 ~ 그렇게 하라니까 그렇게 해야지" 보다

hstory0208.tistory.com

 

'TIL > JPA' 카테고리의 다른 글

@Entity, @Table 차이점  (0) 2024.01.18
@Transaction(readOnly=true)  (1) 2023.11.22
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그