ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐ŸŽฏ NestJS Controller ์™„์ „ ์ •๋ณต – ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๋ชจ๋“  ํ๋ฆ„ ์ดํ•ดํ•˜๊ธฐ


NestJS์—์„œ Controller๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ ๋ฐ›์•„ ์„œ๋ฒ„์˜ ์‘๋‹ต(Response)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ธ€์—์„œ๋Š” NestJS ๊ณต์‹ ๋ฌธ์„œ์˜ Controllers๋ฅผ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜๊ณ , ์‹ค๋ฌด ์ค‘์‹ฌ์˜ ํ•ด์„์„ ๋ง๋ถ™์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

NestJS ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด Controller๋Š” ๋ฐ˜๋“œ์‹œ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.


โœจ Controller๋ž€?

NestJS์—์„œ Controller๋Š” ๋ผ์šฐํŒ…(๊ฒฝ๋กœ ์ฒ˜๋ฆฌ)๊ณผ ์š”์ฒญ ๋งคํ•‘์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ๋Š” @Controller() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋ถ™์—ฌ ๋งŒ๋“  ํด๋ž˜์Šค์ด๋ฉฐ, ์—ฌ๊ธฐ์— HTTP ๋ฉ”์„œ๋“œ(@Get, @Post, ๋“ฑ) ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋ถ™์ธ ๋ฉ”์„œ๋“œ๋“ค์ด ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


1๏ธโƒฃ Controller ์ƒ์„ฑ ๋ฐฉ๋ฒ•

nest g controller cats

Nest CLI๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ cats.controller.ts ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

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

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return '๋ชจ๋“  ๊ณ ์–‘์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค';
  }
}

ํ•ด์„

  • @Controller('cats'): /cats ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  • @Get(): HTTP GET ์š”์ฒญ์„ ๋งคํ•‘

2๏ธโƒฃ ๋‹ค์–‘ํ•œ HTTP ๋ฉ”์„œ๋“œ ๋งคํ•‘

๋ฐ˜์‘ํ˜•
import { Controller, Get, Post, Body, Param } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return '๋ชจ๋“  ๊ณ ์–‘์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค';
  }

  @Get(':id')
  findOne(@Param('id') id: string): string {
    return `${id}๋ฒˆ ๊ณ ์–‘์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค`;
  }

  @Post()
  create(@Body() body: any): string {
    return `์ƒˆ๋กœ์šด ๊ณ ์–‘์ด๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค: ${JSON.stringify(body)}`;
  }
}

์‹ค๋ฌด ํŒ

  • @Param(): URL ๊ฒฝ๋กœ์— ํฌํ•จ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”์ถœ
  • @Body(): POST ์š”์ฒญ์˜ ๋ณธ๋ฌธ(body)์„ ํŒŒ์‹ฑ
  • @Query(): ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ

3๏ธโƒฃ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋น„์Šค ํ˜ธ์ถœํ•˜๊ธฐ

NestJS๋Š” ์„œ๋น„์Šค(Service) ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  findAll(): string {
    return this.catsService.findAll();
  }
}

์„œ๋น„์Šค๋Š” @Injectable()๋กœ ์„ ์–ธ๋˜๋ฉฐ, ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ƒ์„ฑ์ž์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.


4๏ธโƒฃ ๋ผ์šฐํŒ… ๊ฒฝ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

@Controller({
  path: 'cats',
})
export class CatsController {
  @Get('my')
  getMyCats() {
    return '๋‚ด ๊ณ ์–‘์ด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค';
  }
}

๊ฒฝ๋กœ๋Š” ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ์˜ค๋ธŒ์ ํŠธ ํ˜•ํƒœ๋กœ๋„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“บ ๊ด‘๊ณ 

์ด ๋ถ€๋ถ„์— AdSense ๊ด‘๊ณ  ์ฝ”๋“œ ์‚ฝ์ž…: ์ค‘๋‹จ ๊ด‘๊ณ  ์œ„์น˜ (ํด๋ฆญ๋ฅ ์ด ๋†’์€ ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค)
์˜ˆ: <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-xxxx" data-ad-slot="yyyy"></ins>


5๏ธโƒฃ RESTful API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ์˜ Controller ์ „๋žต

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์˜ˆ์‹œ ์„ค๋ช…

@Get() /cats ์ „์ฒด ๋ชฉ๋ก ์กฐํšŒ
@Get(':id') /cats/1 ํŠน์ • ID ์กฐํšŒ
@Post() /cats ์ƒˆ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
@Patch(':id') /cats/1 ํŠน์ • ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ์ˆ˜์ •
@Delete(':id') /cats/1 ํŠน์ • ๋ฐ์ดํ„ฐ ์‚ญ์ œ

REST API ์„ค๊ณ„ ์›์น™์— ๋”ฐ๋ผ HTTP ๋ฉ”์„œ๋“œ์™€ URL์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ ๋ชจ๋‘์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์‹ค์ œ ์„œ๋น„์Šค ๊ตฌ์กฐ์—์„œ Controller ์—ญํ• 

  1. ์š”์ฒญ์„ ๋ฐ›๊ณ 
  2. ์„œ๋น„์Šค ๊ณ„์ธต์œผ๋กœ ์œ„์ž„ํ•˜๋ฉฐ
  3. ํ•„์š”ํ•œ ๊ฒฝ์šฐ DTO๋กœ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ•˜๊ณ 
  4. ์ ์ ˆํ•œ ์‘๋‹ต ๋˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ

์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ ˆ๋Œ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ , ๋ผ์šฐํŒ…๊ณผ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์—๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”š ๋งˆ๋ฌด๋ฆฌ

NestJS์—์„œ Controller๋Š” ๊ฐ€์žฅ ์•ž๋‹จ์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
๋ผ์šฐํŒ…, ๋งคํ•‘, ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ถ”์ถœ, ์„œ๋น„์Šค ์—ฐ๊ฒฐ ๋“ฑ์˜ ํŒจํ„ด์„ ์ž˜ ์ตํ˜€๋‘๋ฉด, ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์†์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 

NestJS Controller,NestJS ๋ผ์šฐํŒ…,NestJS ์š”์ฒญ ์ฒ˜๋ฆฌ,NestJS ์„œ๋น„์Šค ์—ฐ๋™,NestJS Get Post,NestJS Param Body,TypeScript ๋ฐฑ์—”๋“œ,REST API ์„ค๊ณ„,Node.js ๋ฐฑ์—”๋“œ,NestJS ์‹ค๋ฌด ์˜ˆ์ œ


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•