[ShowMyCNFT] Entity class와 DTO를 혼용하지 말자

junghan·2023년 4월 9일
0

SpringBootProject

목록 보기
24/35
post-thumbnail

명확한 아키텍처를 위한 한걸음..

앞서 설명했던 내용인 Entity와 DTO를 다시 한번 간단히 설명해 보겠습니다.

Entity 클래스

Entity 클래스는 도메인 단에서 데이터베이스에서 사용되는 테이블과 매핑되는 클래스입니다. 즉, 데이터베이스에 저장되는 데이터를 나타내는 클래스입니다. Entity 클래스는 데이터베이스에서 가져온 데이터를 자바 객체로 변환하여 사용하며, 데이터베이스와의 관계를 유지하기 위해 주로 JPA를 사용합니다.

Dto

DTO 클래스는 데이터 전송을 위한 클래스입니다. 즉, 서비스 계층과 뷰 계층 사이에서 데이터를 전송할 때 사용하는 클래스입니다. DTO 클래스는 주로 뷰에서 사용하는 데이터를 서비스 계층에서 처리하기 위해 사용됩니다. 또한, 여러 개의 Entity 클래스를 한 번에 전송하기 위해 DTO 클래스를 사용하기도 합니다.

Entity클래스와 DTO를 혼용하면 안되는 이유

우리는 Entity 클래스와 거의 유사한 형태임에도 Dto 클래스를 추가로 생성하여 프로젝트를 진행합니다.
비슷한 속성을 가졌더라도 절대로 Enitity클래스를 Request/Response 클래스로 사용해서는 안됩니다.

Entity 클래스는 데이터베이스와 맞닿은 핵심 클래스 입니다. Entity 클래스를 기준으로 테이블이 생성되고, 스키마가 변경됩니다. 화면 변경은 아주 사소한 기능 변경인데, 이를 위해 테이블과 연결된 Entity 클래스를 변경하는 것은 너무 큰 변경입니다.

수많은 서비스 클래스나 비즈니스 로직들이 Entity 클래스를 기준으로 동작합니다. Entity 클래스가 변경되면 여러 클래스에 영향을 끼치지만, Request 와 Response 용 DTO는 View 를 위한 클래스라 정말 자주 변경이 필요합니다.

View Layer 와 DB Layer 의 역할 분리를 철저하게 하는 게 좋습니다. 실 제로 Controller 에서 결괏값으로 여러 테이블을 조인해서 줘야 할 경우가 빈번 하므로 Entity 클래스만으로 표현하기가 어려운 경우가 많습니다.

또한, Entity 클래스와 DTO 클래스를 혼용해서 사용하는 것은 코드의 복잡도를 증가시키고, 유지보수를 어렵게 만듭니다. Entity 클래스는 데이터베이스와 관련이 있기 때문에, 데이터베이스에서 가져온 데이터를 뷰에서 사용하는 용도로 그대로 사용하게 되면, 보안상의 문제나 불필요한 데이터가 노출될 수 있습니다.

그렇기에, 꼭 Entity 클래스와 Controller 에서 쓸 DTO는 분리해서 사용해야 합니다.


출처: 이동욱 저 - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

profile
42seoul, blockchain, web 3.0

0개의 댓글