Nest.js와 Mongoose에서의 DTO와 Schema 이해하기

2023. 7. 24. 점심에 씀 → web

DTO와 Schema는 데이터를 다루는데 필수적인 개념이지만, 이 둘은 확실히 구분되는 역할을 갖고 있습니다.


DTO (Data Transfer Object)

DTO는 클라이언트와 서버 간에 데이터를 전송할 때 사용되는 객체입니다. DTO는 보통 클래스로 구현되며, TypeScript에서는 Interface로도 구현될 수 있습니다. DTO는 특정 데이터 구조를 명시하며, 요청이나 응답에서 어떤 필드를 기대하는지 명확하게 보여줍니다.


예를 들어, 사용자의 정보를 업데이트하는 API를 설계할 때, 다음과 같은 DTO를 만들 수 있습니다.

export class UpdateUserDto {
  readonly firstName: string;
  readonly lastName: string;
  readonly email: string;
}

이렇게 정의된 DTO를 사용하면 클라이언트와 서버 간에 어떤 데이터가 교환되어야 하는지 명확하게 알 수 있습니다. 이 방식은 코드의 가독성을 높이고, 잘못된 데이터 전송으로 인한 버그를 줄일 수 있습니다.



Schema (Mongoose Schema)

반면에, Mongoose에서의 Schema는 데이터베이스의 구조를 정의하는데 사용됩니다. 각 데이터 필드의 타입, 기본값, 유효성 검사 등을 명시합니다.

예를 들어, 위의 사용자 업데이트 요청에 대응하는 Mongoose 스키마는 아래와 같이 정의할 수 있습니다.

javascriptCopy code
const UserSchema = new mongoose.Schema({
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  email: { type: String, required: true, unique: true }
});


Schema는 데이터베이스 레벨에서 데이터의 유효성을 검증하고, 데이터가 데이터베이스에 어떻게 저장될 것인지를 정의합니다.


요약 : DTO와 Schema는 각각 다음과 같은 역할을 합니다.

  • DTO: 클라이언트와 서버 간의 특정 데이터 구조를 정의하고, 이를 통해 통신하는 데이터의 형식을 명확하게 합니다.
  • Schema: 데이터베이스에 저장될 데이터의 구조를 정의하고, 데이터의 유효성을 검증합니다.

각자의 적절한 위치에서 역할을 수행함으로써, 더 안정적이고 유지보수가 쉬운 애플리케이션을 만드는 데 도움을 줍니다.

관심 가질만한 글들
copyright 요즘블로그 yozm.blog