
서론
코드 리뷰를 받다가 이런 지적을 받았다.
코드 리뷰 중
수현상 왜 DTO를 사용해서 테이블의 데이터를 받아서 써요?
나는 코드를 보면 엔티티와 DTO폴더가 나누어져 있는건 알고 있었지만, 왜 나눴는지 주의깊게 보지 못했고 또 코드 작성할 때 그런 부분은 생각하지 않아서 이런 실수를 저질렀다.
특징
기본적으로 엔티티와 DTO는 그 존재 이유가 다르기에 설계부터 나눠서 사용을 해야한다.
1. 엔티티
- 데이터베이스의 테이블과 매핑되는 클래스
- 주로 JPA를 사용하여 데이터베이스와 상호작용을 처리 : MyBatis에서도 사용함
- 엔티티는 영속성을 가지며 데이터 베이스 상태를 객체로 표현한다.
- 주로 CRUD 작업 수행 시 사용되며 반환값으로도 사용되는 엔티티 클래스
- 보통 테이블의 전 속성에 매핑되는 게 기본이다!
2. DTO
- 이름 그대로 데이터 전송을 위해 사용되는 클래스
- 엔티티 클래스의 일부 또는 전체 데이터를 전송하는 용도로 사용됨
- 클라이언트와 서버 사이 혹은 다른 계층 간 데이터 전달을 위해 사용됨
- 엔티티 클래스 중 필요한 필드 데이터만 DTO객체로 변환해서 사용
분리하는 이유
1. 데이터 은닉과 보안
- 엔티티 클래스는 데이터베이스와 상호작용을 하니까 일부 비즈니스 로직이나 데이터 베이스 세부 구조가 포함될 가능성이 있음
- DTO는 데이터 전달이 목적이니까 필요한 데이터만 노출되어 테이블을 전부 노출시키지 않음
2. 불필요한 데이터 전송 방지
- 엔티티 클래스는 보통 테이블의 모든 필드가 포함되어 있음 그런데 일하다 보면 특정 데이터만 필요한 경우가 있는데 이 때 DTO를 사용하지 않고 엔티티를 사용하면 필요없는 데이터까지 전송하게 됨
- DTO를 사용하여 엔티티에서 필요한 데이터만 추출후 전달할 수 있음
3. API유연성과 확장성
- 엔티티로 API를 설계하면 테이블 구조 변경시 유지보수할 게 늘어난다. 하지만 처음부터 DTO로 설계하면 테이블에 영향을 거의 받지 않고 API를 변경 혹은 확장 가능하게 만들 수 있다 .
결론
엔티티는 데이터베이스와 상호작용을 위한 클래스
DTO는 데이터 전송을 위한 클래스
서로 구분해서 사용해야 가독성있고 편리하게 코드를 작성할 수 있다.
'프로그래밍 > 스프링' 카테고리의 다른 글
Test Driven Development (0) | 2024.06.25 |
---|---|
단위 테스트 (0) | 2024.06.25 |
테스트는 왜 필요한가? (0) | 2024.06.24 |
테이블 변경 시 수정해야할 것들 (0) | 2024.03.01 |
단위테스트와 Mockito (0) | 2024.02.18 |
하고 싶은 걸 하고 되고 싶은 사람이 되자!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!