본문 바로가기

Backend/NestJS

model의 역할 + 게시판의 기본 구성 살펴보기

※ 인프런 '따라하면서 배우는 NestJS'강의를 시청하고 정리한 글입니다. 

 

게시글의 구성 (기본) 

아이디 - 게시글을 구분짓는 고유 식별자. id는 고유한 값(1개당 1아이디)이다. 

공개/비공개글 - 게시글이 공개 아니면 비공개글로 설정해야 하므로 enum으로 설정

제목  

게시글 

날짜 

작성자 

... 이런식으로 나누어볼 수 있다. 

 

여기 강의에서 집중할 부분은 바로 

아이디(id:string) 공개/비공개글(enum:boardStatus(PRIVATE,PUBLIC), 제목(title:string) 게시글(description:string) 이렇게 총 4가지 분야라고 보자. 

이런 식으로 여기에 쓰이는 데이터 타입들을 한 번에 정리해주는 역할을 하는 곳이 model 이다. 

 

NestJS에서는 model.ts를 정의하는 2가지의 방법이 있다.

1) interface : data type만 체크 

2) class : data type + instance 생성 가능 

이 강의에서는 interface를 통하여 board.model.ts를 생성한다. 그래서 board를 구성하는 data type만 체크하게 된다. 

※ 만약 DB를 연동한다면 entity 파일을 작성하는데 이때 entity 파일에 model을 구성하는 요소들이 들어가게 되므로 model.ts 파일은 필요가 없다.

 

boards.model.ts 

export interface Board {
    title: string;
    description: string;
    id: string;
    status: BoardsStatus;
}

export enum BoardsStatus {
    PUBLIC = 'PUBLIC',
    PRIVATE = 'PRIVATE',
}

주의 -> board interface에 대한 인터페이스 내의 데이터들의 끝마침은 ; 

boardStaus enum에 대한 데이터들의 끝마침은 , (아마 데이터를 구분짓는 요소로 , 를 사용하지 않을까 싶다) 

 

boards.controller.ts

import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board } from './boards.model';

@Controller('boards')
export class BoardsController {
    constructor(private boardsService:BoardsService) {}

    @Get()
    getAllBoard(): Board[] {
        return this.boardsService.getAllBoards();
    }

}

 

 

boards.service.ts 

import { Injectable } from '@nestjs/common';
import { Board } from './boards.model';

@Injectable()
export class BoardsService {
    private boards: Board[]=[]; // board에 대한 정보가 들어감. 이 데이터 형식이 어떻게 들어가냐?

    getAllBoards(): Board[] {
        return this.boards;
    }
}

이번 강의에서 중요했던 사안은 Board는 1개의 게시글에 대한 내용인데, 게시글이 1개만 작성될 것이 아니므로 

배열 []로 type을 지정해서 Board의 return type 또한 [] 배열 형태로 리턴했음을 알 수 있다.