본문 바로가기
컴공/스프링 부트 (Spring boot)

스프링 부트(Spring Boot) Entity,Dto(Data Transfer Object) 차이점, 나누어 사용하는 이유

by 만슨 2023. 12. 3.

안녕하세요. 이번 포스팅에서는 Entity와 Dto(Data Transfer Object)의 차이점과 각각의 사용에 대해서 알아보려고 합니다.

프로젝트 진행중에 entity와 Dto를 분리하여 사용하고 있었는데 매번 그 필요성에 대해서 정확하게 숙지하지 못하였던 부분을 한번 정확하게 인지하고자 포스팅을 하게 되었습니다.

 

1. Entity

Entity란?

  •  객체 지향 프로그래밍(OOP)에서 사용되는 개념 중 하나로 데이터베이스와 연계하여 데이터를 저장, 검색, 수정하는 등의 작업을 수행할 때 주로 사용되는 객체이다.
  • 데이터베이스와의 상호작용을 담당.

 

PollEntity

위에 사진처럼 엔티티가 매핑되는 데이터베이스 테이블의 이름 지정 해주기 위해서 @Table 어노테이션을 사용하여 이름을 지정 해준다. 

 

엔티티는 데이터베이스 스키마의 변경이 예상되는 경우 사용하여 db값 변경, db에서 값을 가져옴.

 

2. Dto(Data Transfer Object)

Dto(Data Transfer Object)란? 

  •  Dto(데이터 전송 객체)는 주로 데이터 전송을 목적으로 하는 객체로, 컨트롤러와 서비스 간의 데이터 교환에 사용 되며, 데이터를 효율적으로 전달하고 다른 계층 간의 결합도를 낮추기 위해 사용된다.
  • 클라이언트로 데이터를 전송할 때 특정 데이터만 선택해서 제공해줄 수 있다. ( 엔티티에 있는 모든 필드를 dto에 정의해주는 것이 아닌 필요한 데이터만 정의하여 서버와 클라이언트간에 데이터 주고받음 가능)

PollDto

 

 

Dto는 클라이언트와 서버간의 통신을 위해 사용된다.

 

3. 왜 클라이언트와 서버 간에 entity로 데이터를 주고 받는게 아니고 Dto를 만들어서 데이터를 주고 받을까?

  • 데이터 전송 최적화 

Entity는 데이터베이스와의 관계를 매핑하기 위해 설계되었음.

 클라이언트에 전송할 때에는 모든 필드가 필요하지 않을 경우가 많다.  DTO를 사용하면 클라이언트가 실제로 필요로 하는 데이터만을 포함시켜 최적화된 형태로 전송할 수 있다.

  • 보안 및 개인정보 보호

Entity는 데이터베이스와의 상호 작용을 위해 설계되었기 때문에 민감한 정보를 포함할 수 있다. 이러한 민감한 정보를 클라이언트로 직접 전송하는 것은 보안상의 이슈가 생길 수 있다. DTO를 통해 불필요한 정보를 필터링하고, 민감한 정보의 노출을 방지 목적.

 

 

요약하면, Entity를 직접 노출하는 것은 보안, 성능, 유연성 등 다양한 측면에서 문제를 유발할 수 있다

-> db에 직접 연결 되어있는 Entity를 직접 만지는 것은 여러 측면에서 위험

 

 따라서 API와 클라이언트 간의 효율적인 통신을 위해 DTO를 사용하는 것이 일반적으로 권장!!