Nest.js ์˜ controller๊ธฐ๋ณธ ๋ฐ ์žฅ์ 

2023. 7. 29. 17:16ใ†Study_Develop/์ธํ”„๋Ÿฐ - Slack ํด๋ก ์ฝ”๋”ฉ(๋ฐฑ์—”๋“œ)

๋ฐ˜์‘ํ˜•

 

๋ณดํ†ต express๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด,

 

// routes/index.js

const express = require('express');

const router = express.Router();

router.get('/in', (req, res) => {
    res.send('Hello, World !');
});

module.exports = router;

 

// routes/user.js

const express = require('express');

const router = express.Router();

router.get('/iam', (req, res) => {
    res.send('Hello, User');
});

module.exports = router;

 

์ด๋Ÿฐ์‹์œผ๋กœ ๋ผ์šฐํ„ฐ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•ด์ค˜์•ผ ์‹คํ–‰์ด ๋œ๋‹ค.

 

 

ํ•˜์ง€๋งŒ, nest.js์—์„œ๋Š” ์ด๋ฅผ controller์—์„œ ์‹คํ–‰ํ•œ๋‹ค. 

์ฆ‰, controller์—์„œ url์„ ๋งคํ•‘ํ•˜๊ณ , ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ฐ›๊ณ , query๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ body๋“ฑ์„ ๋„˜๊ธฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

app.controller.ts>

@Controller('abc') //๊ณตํ†ต์ฃผ์†Œ
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get('hello') //GET /abc/hello
  getHello(): string {
    return this.appService.getHello();
  }
  @Post('hi') //POST /abc/hi
  postHello(): string {
    return this.appService.postHello();
  }
}

 

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ controller('abc') ์ด๊ณณ์— ๋“ค์–ด ์žˆ๋Š” abc๋Š” ๊ณตํ†ต ์ฃผ์†Œ์ด๋ฉฐ,

Get('hello')  ์ด๊ฒƒ์€ abc/hello์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

 ๋‹ค๋งŒ, module์€ ์ง์ ‘ ๊ตฌ์„ฑ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

app.module.ts>

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

-> ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋จ.

 

 ๊ทธ๋ฆฌ๊ณ , Service

 

Service๋˜ํ•œ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•จ.

 

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }

  postHello():string{
     return 'post succeeded';
  }
}

 

์š”๋Ÿฐ ์‹์œผ๋กœ ์œ„์— Controller์—์„œ ๋งŒ๋“  ํ•จ์ˆ˜๋“ค์„ service์— ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค!

 

service์˜ ์—ญํ• ์€?

๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋กœ์ง์— ๋ถ„๋ฆฌํ•œ๋‹ค.

 

๋ผ์šฐํ„ฐ๊ฐ€ ํ•ด์•ผํ•  ๋™์ž‘์€ ์„œ๋น„์Šค์—, ์ปจํŠธ๋กค๋Ÿฌ์—” ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ๊ฐ’๋งŒ ๋ฐ›์•„ return ํ•ด์คŒ

 

express์™€ nest.js์˜ ์ฐจ์ด

 

1. Controller์™€ Service์˜ ๋ถ„๋ฆฌ

 

์™œ Nest.js ์—์„  ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋‚˜?

 

- ์„œ๋น„์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ์งœ๋Š”๋ฐ, ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•ด์„œ๋Š” ๋ชจ๋ฅธ๋‹ค. (req, res)๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , ํ•ด์•ผํ•˜๋Š” ๋™์ž‘๋งŒ, return ํ•ด์•ผ ํ•  ๊ฐ’๋งŒ ์ ์–ด์ค€๋‹ค.

 

- controller์—์„œ๋Š” req, res์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„์„œ res์— ๋„˜๊ธฐ๊ฑฐ๋‚˜ ์„œ๋น„์Šค๋กœ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๋“ฑ๋“ฑ

 

- espress์—์„œ๋Š” ์“ธ๋ฐ ์—†์ด (req, res, next) ->{ }์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๊ผญ mocking์„ ํ•ด์ค˜์•ผ ํ–ˆ์Œ.

 

- ํ•˜์ง€๋งŒ, service๋Š” mocking ํ•  ํ•„์š” X ์—†์–ด์ ธ ํ…Œ์ŠคํŠธ๋„ ํŽธ๋ฆฌ, ์žฌ์‚ฌ์šฉ๋„ ํŽธ๋ฆฌ

 

 

2. ๊ตฌ์กฐ์˜ ๊ฐ•์ œ์„ฑ

 

function findUser(email){
 return User.findOne({ email});
}
async (req, res, next) =>{
 const user=await User.findOne({ email: req.body.email);
 res.json(user);
}

 

์ด๋Ÿฐ ์‹์œผ๋กœ express์—์„œ๋„ ๋ถ„๋ฆฌํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?

 

- express์—์„œ๋Š” ๋ถ„๋ฆฌํ•ด๋„ ๋˜๊ณ  ์•ˆํ•ด๋„ ๋˜์ง€๋งŒ, nest.js์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ์ด๋Ÿฐ ๊ตฌ์กฐ๋„ ๊ผญ! ๋ถ„๋ฆฌํ•ด์„œ ์จ์•ผํ•จ.

 

- ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ, ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐ•์ œ์„ฑ์ด ๋ถ€์—ฌ๋œ๋‹ค! ๊ทธ๋ž˜์„œ ํ˜‘์—… ๋“ฑ์— ์œ ์šฉํ•จ.