프로그래밍/스프링

Entity와 DTO의 차이점

스루나루 2024. 2. 14. 09:54
728x90
728x90

 

 

서론

 

코드 리뷰를 받다가 이런 지적을 받았다.

 

코드 리뷰 중
수현상 왜 DTO를 사용해서 테이블의 데이터를 받아서 써요? 

 

나는 코드를 보면 엔티티와 DTO폴더가 나누어져 있는건 알고 있었지만, 왜 나눴는지 주의깊게 보지 못했고 또 코드 작성할 때 그런 부분은 생각하지 않아서 이런 실수를 저질렀다. 

 

 

특징

 

기본적으로 엔티티와 DTO는 그 존재 이유가 다르기에 설계부터 나눠서 사용을 해야한다.

 

1. 엔티티 

- 데이터베이스의 테이블과 매핑되는 클래스

- 주로 JPA를 사용하여 데이터베이스와 상호작용을 처리 : MyBatis에서도 사용함 

- 엔티티는 영속성을 가지며 데이터 베이스 상태를 객체로 표현한다.

- 주로 CRUD 작업 수행 시 사용되며 반환값으로도 사용되는 엔티티 클래스

- 보통 테이블의 전 속성에 매핑되는 게 기본이다!

 

2. DTO

- 이름 그대로 데이터 전송을 위해 사용되는 클래스

- 엔티티 클래스의 일부 또는 전체 데이터를 전송하는 용도로 사용됨

- 클라이언트와 서버 사이 혹은 다른 계층 간 데이터 전달을 위해 사용됨 

- 엔티티 클래스 중 필요한 필드 데이터만 DTO객체로 변환해서 사용

 

 

분리하는 이유

 

1. 데이터 은닉과 보안 

- 엔티티 클래스는 데이터베이스와 상호작용을 하니까 일부 비즈니스 로직이나 데이터 베이스 세부 구조가 포함될 가능성이 있음

- DTO는 데이터 전달이 목적이니까 필요한 데이터만 노출되어 테이블을 전부 노출시키지 않음 

 

2. 불필요한 데이터 전송 방지 

- 엔티티 클래스는 보통 테이블의 모든 필드가 포함되어 있음 그런데 일하다 보면 특정 데이터만 필요한 경우가 있는데 이 때 DTO를 사용하지 않고 엔티티를 사용하면 필요없는 데이터까지 전송하게 됨

- DTO를 사용하여 엔티티에서 필요한 데이터만 추출후 전달할 수 있음 

 

3. API유연성과 확장성 

- 엔티티로 API를 설계하면 테이블 구조 변경시 유지보수할 게 늘어난다. 하지만 처음부터 DTO로 설계하면 테이블에 영향을 거의 받지 않고 API를 변경 혹은 확장 가능하게 만들 수 있다 .

 

결론

 

엔티티는 데이터베이스와 상호작용을 위한 클래스

DTO는 데이터 전송을 위한 클래스 

서로 구분해서 사용해야 가독성있고 편리하게 코드를 작성할 수 있다.

 

728x90
728x90