안녕하세요. 이번 포스팅에서는 Entity와 Dto(Data Transfer Object)의 차이점과 각각의 사용에 대해서 알아보려고 합니다.
프로젝트 진행중에 entity와 Dto를 분리하여 사용하고 있었는데 매번 그 필요성에 대해서 정확하게 숙지하지 못하였던 부분을 한번 정확하게 인지하고자 포스팅을 하게 되었습니다.
1. Entity
Entity란?
- 객체 지향 프로그래밍(OOP)에서 사용되는 개념 중 하나로 데이터베이스와 연계하여 데이터를 저장, 검색, 수정하는 등의 작업을 수행할 때 주로 사용되는 객체이다.
- 데이터베이스와의 상호작용을 담당.
위에 사진처럼 엔티티가 매핑되는 데이터베이스 테이블의 이름 지정 해주기 위해서 @Table 어노테이션을 사용하여 이름을 지정 해준다.
엔티티는 데이터베이스 스키마의 변경이 예상되는 경우 사용하여 db값 변경, db에서 값을 가져옴.
2. Dto(Data Transfer Object)
Dto(Data Transfer Object)란?
- Dto(데이터 전송 객체)는 주로 데이터 전송을 목적으로 하는 객체로, 컨트롤러와 서비스 간의 데이터 교환에 사용 되며, 데이터를 효율적으로 전달하고 다른 계층 간의 결합도를 낮추기 위해 사용된다.
- 클라이언트로 데이터를 전송할 때 특정 데이터만 선택해서 제공해줄 수 있다. ( 엔티티에 있는 모든 필드를 dto에 정의해주는 것이 아닌 필요한 데이터만 정의하여 서버와 클라이언트간에 데이터 주고받음 가능)
Dto는 클라이언트와 서버간의 통신을 위해 사용된다.
3. 왜 클라이언트와 서버 간에 entity로 데이터를 주고 받는게 아니고 Dto를 만들어서 데이터를 주고 받을까?
- 데이터 전송 최적화
Entity는 데이터베이스와의 관계를 매핑하기 위해 설계되었음.
클라이언트에 전송할 때에는 모든 필드가 필요하지 않을 경우가 많다. DTO를 사용하면 클라이언트가 실제로 필요로 하는 데이터만을 포함시켜 최적화된 형태로 전송할 수 있다.
- 보안 및 개인정보 보호
Entity는 데이터베이스와의 상호 작용을 위해 설계되었기 때문에 민감한 정보를 포함할 수 있다. 이러한 민감한 정보를 클라이언트로 직접 전송하는 것은 보안상의 이슈가 생길 수 있다. DTO를 통해 불필요한 정보를 필터링하고, 민감한 정보의 노출을 방지 목적.
요약하면, Entity를 직접 노출하는 것은 보안, 성능, 유연성 등 다양한 측면에서 문제를 유발할 수 있다
-> db에 직접 연결 되어있는 Entity를 직접 만지는 것은 여러 측면에서 위험
따라서 API와 클라이언트 간의 효율적인 통신을 위해 DTO를 사용하는 것이 일반적으로 권장!!