DTO와 Entity

Olivia·2024년 4월 15일
1

[NestJS]

목록 보기
11/12

Next랑 React로만 놀고 있다가 갑자기 나타난 Nest..
DTO랑 Entity가 뭔지 처음부터 막히게 되었다..!

Nest로 무작정 작업하기 전에 아래 두 가지를 짚고 넘어가려고 한다.

- DTO와 Entity가 무엇인지?
- DTO와 Entity를 왜 사용해야할까?


Dto와 Entity를 검색했을 때 나온 정보는 아래와 같다.

DTO

Data Transfer Object

클라이언트와 서버 간 혹은 애플리케이션의 서로 다른 모듈 간에 데이터를 캡슐화하고 전송되는 데 사용되는 클래스다.
특정 작업에 필요한 속성만 포함하여 데이터 교환을 단순화하고, 네트워크 오버헤드를 줄이른데 사용된다.
Nest에서 DTO는 API의 엔드포인트에 대한 요청 및 응답 페이로드의 모양을 정의하는 데 사용되기도 한다.

Entity

DB 테이블에 매핑되는 클래스
DTO보다 더 많은 속성을 가지며, DB 테이블과 일대일 매핑을 갖는다.

DTO와 Entity의 차이

Entity는 실제 테이블과 매핑되기 때문에, 변경이 일어날 경우 다른 클래스에 영향을 끼치게 된다.
즉, DB와 1:1로 매칭된다.
반면에 DTO는 view와 통신하여 자주 변경되기때문에 분리시켜준다.
즉, 통신간의 데이터의 형태를 정의한 것이기 때문에 자주 변경될 수 있다.

백엔드니 Nest를 전혀 알지 못하는 나는 위에서 설명한 dto와 entity가 좀처럼 이해가 안된다..
조금 더 쉬운 설명을 찾아 다시 한 번 더 이해를 해보자.


Entity

일반적으로 DB에서 데이터를 저장하고 관리하는 핵심 단위다.
예를 들어 entity는 학교 안에 재학 중인 학생이 될 수 있다.
그리고 각각의 학생 entitiy이름, 나이, 학년 등의 속성(Attribute)를 가질 것이다.

  • Entity에 대한 간단한 예시 코드는 아래와 같다. *
@Entity
public class Student {
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int enrollmentYear;
    private String major;
    ...
}

학교라는 곳에서의 학생을 예시로 든 코드다.
Entity는 학생이라는 실체를 데이터베이스에 저자하기 위한 구조다.
각 학생은 고유한 학번(id), 이름, 등록 연도, 전공 등의 속성을 가지고 있다.

DTO

DTO(Data Transfer Object)는 이름에서도 그러하듯 시스템이나 프로세스 간에 데이터를 전송하기 위한 객체를 의미한다.
데이터베이스와 비즈니스 로직 사이, 혹은 네트워크를 통한 서비스 간에 데이터를 효율적으로 전달하기 위해 사용된다.
예를 들어 웹 어플리케이션에서 서버로부터 클라이언트에게 학생의 목록을 전달할 때, 각 학생의 데이터를 DTO에 모아 담아서 한 번에 전송하게 된다.
이렇게 하게 되면, 호출을 줄일 수 있기 때문에 서버의 부하가 감소하고, 클라이언트 측에서도 더 빠르게 데이터를 받아볼 수 있어 성능을 향상시킬 수 있게 된다.

  • DTO에 대한 간단한 예시 코드는 아래와 같다. *
public class StudentDTO{
	private String name;
    private String major;
    private int enrollmentYear;
    ...
}

DTO는 클라이언트에게 전송될 데이터 구조만을 정의하고, 비즈니스 로직이나 데이터베이스와의 직접적인 연결은 하지 않는다.
위의 코드에서 외부에 노출하고자 하는 속성들만 가지고 DTO를 구성할 수 있다.

profile
👩🏻‍💻

0개의 댓글