DTO, Model, Service?

강준호·2024년 2월 18일

NodeJs

목록 보기
4/7
src/
|-- contexts/                  # Domain classification by context
|   |-- auth/                  # Authentication related logic (JWT, Bearer token)
|   |   |-- dtos/              # Data Transfer Objects for auth
|   |   |-- models/            # Auth related models (e.g., User)
|   |   |-- services/          # Auth related business logic
|   |   `-- auth.controller.ts # Routes related to authentication
|
|   |-- frontendBoard/         # Frontend bulletin board context
|   |   |-- dtos/              # Data Transfer Objects for frontend posts
|   |   |-- models/            # Frontend board related models (e.g., Post, Comment, Like)
|   |   |-- services/          # Business logic for frontend board
|   |   `-- board.controller.ts# Routes for the frontend bulletin board
|
|   `-- backendBoard/          # Backend bulletin board context
|       |-- dtos/              # Data Transfer Objects for backend posts
|       |-- models/            # Backend board related models
|       |-- services/          # Business logic for backend board
|       `-- board.controller.ts# Routes for the backend bulletin board
|
|-- shared/                    # Shared utilities, middleware, etc.
|   |-- middleware/            # Custom express middleware
|   |-- utils/                 # Utility functions
|   `-- validators/            # Request validation schemas
|
|-- config/                    # Configuration files (e.g., database config)
|-- prisma/                    # Prisma ORM related files
|   `-- schema.prisma          # Prisma schema file
|
`-- app.ts                     # Entry point of the application

이러한 구조에서


DTO(데이터 전송 개체)

목적

  • DTO는 애플리케이션의 여러 부분, 특히 클라이언트와 서버 간에 데이터가 전송될 때 데이터의 모양을 정의하는 데 사용됩니다. 이는 데이터를 캡슐화하는 데 도움이 되며 전송되는 데이터에 대한 유효성 검사 규칙을 정의하는 데 사용할 수 있습니다.

콘텐츠

  • dtos 디렉터리에서는 일반적으로 요청 및 응답에 대한 데이터 구조를 나타내는 클래스나 인터페이스를 찾을 수 있습니다. 예를 들어 auth 컨텍스트에는 사용자 이름, 비밀번호, 이메일 등과 같은 예상 필드를 지정하는 로그인 요청, 가입 요청 등에 대한 DTO가 있을 수 있습니다.

용도

  • 클라이언트와 서버 간 전송을 위해 데이터를 구조화하는 데 사용됩니다. 유효성 검사 규칙도 포함될 수 있습니다.

게시판에 새 게시물을 작성하기 위한 CreatePostDto

// src/contexts/frontendBoard/dtos/CreatePostDto.ts

export class CreatePostDto {
  title: string;
  content: string;

  constructor(title: string, content: string) {
    this.title = title;
    this.content = content;
  }
}

모델

목적

  • 모델은 애플리케이션의 도메인 로직과 관련된 데이터 구조 및 데이터베이스에 저장되는 방식을 나타냅니다. 일반적으로 ORM(Object-Relational Mapping) 도구와 함께 사용되어 객체 지향 방식으로 데이터베이스와 상호 작용합니다.

콘텐츠

  • 'models' 디렉터리에서는 애플리케이션 도메인의 엔터티를 나타내는 클래스나 인터페이스를 찾을 수 있습니다. 예를 들어, frontendBoard 컨텍스트에는 Post, Comment 및 Like에 대한 모델이 있을 수 있으며, 각각은 속성(제목, 내용, 작성자와 같은 이러한 엔터티와 관련된 속성 및 메소드를 정의합니다. 게시물) 및 관계(예: 게시물에 댓글이 많음).

용도

  • 일반적으로 데이터베이스 테이블을 미러링하는 데이터의 구조

게시판의 게시물을 나타내는 Post 모델입니다.

// src/contexts/frontendBoard/models/Post.ts

export class Post {
  id: number;
  title: string;
  content: string;
  createdAt: Date;

  constructor(id: number, title: string, content: string, createdAt: Date) {
    this.id = id;
    this.title = title;
    this.content = content;
    this.createdAt = createdAt;
  }

  // Method to display post info
  displayInfo() {
    console.log(`Post: ${this.title}, created at: ${this.createdAt}`);
  }
}

서비스

목적

  • 서비스에는 애플리케이션의 핵심 비즈니스 로직이 포함되어 있습니다. 여기에서 애플리케이션의 작동 방식을 정의하는 규칙, 알고리즘 및 프로세스를 구현합니다.

콘텐츠

  • services 디렉토리에는 auth 컨텍스트 또는 게시의 인증과 같은 보다 복잡한 작업과 함께 데이터 생성, 검색, 업데이트 및 삭제(CRUD 작업)와 같은 작업을 처리하는 클래스 또는 함수가 포함됩니다. 'frontendBoard' 컨텍스트에서의 조정. 서비스는 모델과 상호 작용하여 데이터베이스 작업을 수행할 수 있으며 DTO를 활용하여 애플리케이션의 다른 부분에서 데이터를 받거나 다른 부분으로 데이터를 보낼 수 있습니다.

용도

  • CRUD 작업 등을 수행하기 위해 모델과 상호 작용하는 비즈니스 논리가 포함되어 있습니다.

새 게시물 생성을 처리하는 PostService.

// src/contexts/frontendBoard/services/PostService.ts

import { Post } from '../models/Post';
import { CreatePostDto } from '../dtos/CreatePostDto';

export class PostService {
  createPost(createPostDto: CreatePostDto): Post {
    // Simulate saving the post to a database and returning the new post object
    const newPost = new Post(Date.now(), createPostDto.title, createPostDto.content, new Date());
    console.log(`Created new post with title: ${newPost.title}`);
    return newPost;
  }
}

컨트롤러

목적

  • 컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 일을 담당합니다. 이들은 클라이언트와 서비스 계층 사이의 중개자 역할을 하여 데이터가 서비스에 올바르게 전달되고 응답이 적절하게 생성되도록 보장합니다.

콘텐츠

  • 컨트롤러 파일(예: auth.controller.ts, board.controller.ts)에서 사용자 등록, 로그인, 생성을 위한 경로와 같은 API에 대한 엔드포인트를 정의합니다. 새 게시물 등. 컨트롤러는 일반적으로 DTO를 사용하여 수신 데이터의 유효성을 검사하고, 적절한 서비스를 호출하여 데이터를 처리하거나 작업을 수행한 다음 클라이언트에 대한 응답 형식을 다시 지정합니다.

0개의 댓글