본문 바로가기
Spring Boot

스프링 부트에서 사용되는 DTO, Entity를 알아보자

by MiaCoder 2024. 3. 28.

 

우리가 스프링부트 프로젝트를 진행하면 배우는 방식이 있다.

 

일반적인 스프링부트 구성

 

1. template -> html을 저장하는 곳이다. js파일의 크기에 따라 별도로 보관하기도 한다.

 

2. static      -> 정적인 파일을 저장한다. 주로 css, scss스타일시트를 저장한다.

 

3. Controller -> 컨트롤러 객체를 저장한다. html에서 정보를 받아서 서비스 객체로 넘기거나, 데이터베이스의 정보를 html로 넘기는 등 경로를 지정하는 역할을 한다.

 

4. Service   -> 컨트롤러에서 어떤 로직처리가 필요한 경우 서비스에서 처리한다. 예를 들어 입력받은 비밀번호를 해싱한 후 데이터베이스로 보내거나 할 때 해싱을 하는 역할을 한다.

 

5. Repository 인터페이스 객체이며 데어터베이스와 통신하는 JPA를 상속받는다. 주로 findbyid와 같이 데이터베이스의 특정 값을 가져오거나 데이터베이스로 보내는 역할을 한다.

 

위의 형태는 전형정인 MVC패턴으로 역할분리를 통해 효율성을 추구하는 방식이다.

 

여기서 우리는 DTO, Entity객체를 추가로 만난다. 이건 뭘까?

 

DTO를 사용하는 이유

 

데이터베이스에서 정보를 가져올때는 DTO형태로 변경하고, 반대로 데이터를 넣을때는 Entity형태로 바꾼다

 

우선 DTO객체는 컨트롤러와 서비스 사이의 통신을 위해 존재한다.

 

Data Transfer Object로 데이터를 전달하는 객체라는 뜻이다. 주로 데이터 엑세스 계층, 즉 데이터를 사용하는 계층에서 사용되는 데이터 전달 방법이다.

 

이런 형태는 비즈니스 로직처리, 트랜젝션관리, 데이터베이스와 로직 분리, 보안을 목적으로 탄생했다.

 

Entity를 사용하는 이유

 

그 다음으로 Entity는 데이터베이스와 통신하기 적합하도록 디자인된 방식이다. 

 

데이터베이스의 데이터를 표현하고, 저장하기에 최적화 되어있는 방식이다.

 

영속성을 가지고 있어 프로그램의 실행과 무관하게 데이터를 가지고 있는다.

 

JPA와 함께 사용되며 데이터의 Create, Read, Update, Delete의 역할을 한다.

 

이렇게스프링부투에서 Entity, DTO를 분리해서 사용하는 이유는 각각 목적에 맞춰 최적화된 데이터 전송방식을 사용하기 위함이다.