본문 바로가기

개발/Nest.js

[Nest.js] Nest.js Basic CRUD 만들기 - 1

우선 이번 시간에는 데이터베이스 없이 기본적인 CRUD를 만들어 보려고 한다.

→ 엥? 데이터베이스가 없는데 어떻게 CRUD를 만드냐?

일단 무턱대고 데이터베이스를 연결하지 않고 전체적인 구조를 파악하기 위해서 공식문서를 읽으면서 조금씩 만들어 볼 생각이다.

그러니 기본적인 CRUD는 데이터베이스가 아닌 그냥 존재한다고 믿고 만들어볼 생각이다.

혹은 그냥 임의로 쿠키에 저장해도 괜찮다.

중요한 것은 공식문서를 읽는 것이다! 이것보다 더 중요한 언어 공부 방법은 없다.

시작하기

우선 이 글을 읽는 사람이 프레임워크를 처음 접하거나,

TypeScript에 대한 사전 지식이 없다면 기본적인 것들을 먼저 공부하고 오면 도움이 된다.

일단 Nest.js 관련 글이니 최대한 다른 설명은 지양하면서 글을 작성하도록 하겠다.

우리는 고양이 CRUD를 만들 것이다. 왜 고양이냐고? 고양이니까..

사실 Nest.js 공식 문서에 고양이가 예시다.

nest g controller cats
import { Controller } from '@nestjs/common';

@Controller('cats')
export class CatsController {}

해당 명령어를 입력하게 되면 위와 같이 컨트롤러가 만들어진다.

우선 고양이의 기본적인 단일 CRUD를 만들어보겠다.

차근차근 하기 위해서 처음부터 구조적으로 잡으면서 만들지 않고 수정을 반복하여 디자인을 갖추도록 할 것이다.

import { Controller, Delete, Get, Post, Put } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    private cats: Array<string> = [];

    @Post()
    create(): string {
        return "add cats";
    }

    @Get()
    find(): string {
        return "find cats";
    }

    @Put()
    update(): string {
        return "update cats";
    }

    @Delete()
    remove(): string {
        return "delete cats";
    }
}

기본적인 라우팅은 메소드 위에 @{Method} 방식으로 POST, GET, PUT, DELETE 를 정의해주면 된다.

5번째줄인 private cats: Array<string> = [] 를 임의로 만들어 값을 직접 받아 고양이들을 CRUD 할 수 있는 메소드로 만들어 보겠다.

import { Body, Param, Controller, Delete, Get, Post, Put } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    private cats: Array<string> = [];

    @Post()
    create(@Body('name') name: string): string[] {
        this.cats.push(name);
        return this.cats;
    }

    @Get(':name')
    find(@Param('name') name: string): string[] {
        return this.cats.filter(cat => cat === name);
    }

    @Put(':name')
    update(@Param('name') from: string, @Body('name') to: string): string[] {
        const idx = this.cats.indexOf(from);
        this.cats[idx] = to;

        return this.cats;
    }

    @Delete(':name')
    remove(@Param('name') name: string): string[] {
        return this.cats.filter(cat => cat !== name);
    }
}

코드를 보면 눈치 챘겠지만, Body 와 Query Param은 각각 @Body , @Param 데코레이터로 만들 수 있다.

 💡 여기서 나오는 데코레이터는 타입스크립트의 데코레이터를 사용한다.

 

GET, PUT, DELETE 데코레이터 안 :name 은 URL 자체를 변경시키니 주의하도록 하자.

예를 들어, @GET() 은 GET /cats 의 경로를 따르겠지만,

@GET(':name') 은 GET /cats/:name 의 경로로 라우팅 된다.

이번에는 간단히 컨트롤러만 사용하여 CRUD 하는 방법을 배웠고, 다음에는 DTO와 Service를 사용하여 좀 더 구조적으로 만들어볼 예정이다.

'개발 > Nest.js' 카테고리의 다른 글

[Nest.js] Nest.js Basic CRUD 만들기 - 2  (0) 2023.01.31
[Nest.js] Nest.js 설치  (0) 2023.01.28