์ด ๊ท์ฌ์ด ๊ณ ์์ด๋ nodejs ํ๋ ์์ํฌ์ธ nestjs์ ๊ท์ผ๋ฅ์ด ๋ง์ค์ฝํธ ๋ก๊ณ ์ด๋ค. node๊ณ์ ์คํ๋ง๋ถํธ ๊ฐ์ ๋๋์ธ๋ฐ ๊ธฐ์กด์ nodejs์ ๋ํ์ ์ธ ํ๋ ์์ํฌ์ธ express์ ๋น๊ตํ์ ๋ ์์กด์ฑ ์ฃผ์ ๊ฐ๋ ๋ ์๊ณ ์ด๋ฏธ ๋ง๋ จ๋ ๋ฏธ๋ค์จ์ด ๋ฑ์ด ์์ด ๊พธ์คํ ์ฆ๊ฐํ๊ณ ์๋ nodejs์ ํ๋ ์์ํฌ์ด๋ค. ๋๋ ๊ท์ฌ์ด ๊ณ ์์ด๊ฐ ์ข์ nestjs๊ฐ ์ฃผ์ข ๋ชฉ์ธ ๊ฐ๋ฐ ์ฃผ๊พธ๋ฏธ
์๋ฒ๋ฆฌ์ค๋ ๋ง ๊ทธ๋๋ก ์๋ฒ๊ฐ ์๋ค๋ ๋ป์ธ๋ฐ, ์ข ๋ ๊ฐ๋ฐ์ ์ผ๋ก ์ ๊ทผํ์๋ฉด ์๋ฒ๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค๋ผ๋ ๋๋์ผ๋ก ํด์์ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์ข ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ๋ ๋๋์ผ๋ก ์ง์ง ์๋ฒ๊ฐ ์๋ ๊ฒ์ ์๋๋ค. ๊ทธ์ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค๋ฅผ ๋์ด๋ธ ์๋ฏธ์ ์๋ฒ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ํด๋นํ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋น ๋ฅด๊ฒ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค.
์ด ์ฌ๋ค๋ฆฌ๋ ๋๋ค์ธ๋ฐ, ์ด ๋ํ ์๋ฒ๋ฆฌ์ค ํด๋ผ์ฐ๋ ๋ชจ๋ธ์ ํ๋๋ก ๊ฐ๋จํ ๋์์ ๋ถ๋ฆฌ์์ผ ํด๋นํ๋ ์ผ๋ง์ ์คํํ์ฌ ์ฝ๋๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํ ์ ์๋ ์ฅ์ ์ด ์๋ค. ๊ฐ๋จํ ์ฝ๋ ๋์์ด ์๋์ด๋ ์๊ด์๋ค. ์ฌ์ฉํ ๋งํผ๋ง ๋น์ฉ์ด ์ฒญ๊ตฌ๋๋ ์ฅ์ ์ด ์๋ค.
api gateway๋ก ์ด๋ฒคํธ๊ฐ ์คํ๋๋ ์๋ํฌ์ธํธ๋ก์ ๋๋ค๊ฐ ์คํ๋ ์ ์๋ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐ์์ผ ์ค ๊ฒ์ด๋ค.
์ด๋ฒ ์ ๋ฆฌ ๊ธ์ ์๋์ ๊ฐ์ ์์ ์ ์์ฝํ์๋ค.
1. nestjs ํ๋ ์์ํฌ๋ก ๋ด๋ถ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
2. nestjs์ ์ ์ฒด ๋์ ์ง์ ์ serverlessํ๋ ์์ํฌ๋ก ๊ฐ์ผ ๋ค ๋์ ํ๋ํ๋๋ฅผ ๋ถ๋ฆฌ์์ผ lambda์ ๋ฐฐํฌํ ๊ฒ์ด๋ค.
3. ํด๋นํ๋ ๋๋ค๊ฐ ์คํ๋ ์ ์๋ ์ง์ ์ ์ apigateway๋ฅผ ๋ถ์ฌ ํ๋์ restapi ์๋ฒ๋ก์ ๋์ํ ์ ์๋๋ก ํ ๊ฒ์ด๋ค.
์๋ ๋ค๋ฅธ ๊ธฐ์ ๋ธ๋ก๊ทธ ์ฐ๋ ์ฌ๋๋ค์ ์๋ง ์ฐ๋๋ฐ ์ ๋๋ ์ด๋ ๊ฒ ๋๋ฑ ๊ฑฐ๋ฆฌ์ง..
๊ทผ๋ฐ ์ฌ์ค ๋ณด๋ ์ฌ๋๋ ์์ด์ ๋ง ์จ๋ ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฅ ๋์ ๊ฒฝํ์ ํธํ ํ์ด ๋ณด์์ผ๊ฒ ๋ค.
๊ธ์ ์ฐ๋ฉด์ ํด๋น ๋ด์ฉ์ ๋ค์ ํ๋ฒ ์์งํ๊ณ ์ ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธ๋ฅผ ๋์ด์ผ์ง.
1. nestjs ์์ํ๊ธฐ
nest new test
๋ค์คํธ๋ก ๊ธฐ๋ณธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ localhost:3000์ผ๋ก ์ ์ํ๊ฒ ๋๋ฉด hello world๋ฅผ ๋ฑ์ด์ค๋ค.
ํด๋นํ๋ ๋ถ๋ถ์ ๋ณดํต์ ์๋ฒ์ ๋ฐฐํฌํ๋ ๊ฒ์ด ์๋ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์ผ๋ก lambda์ ๋ฐฐํฌํ๊ณ api๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๋ค.
2. serverless.yml ์ค์ ํ๊ธฐ
๋ค๋ฅธ ๊ฑด ์ฐจ์ฐจ ์๋ฉด ๋๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํด๋นํ๋ ๋๋ค๊ฐ ์ด๋ค ํ์ผ์ ๋ฐ๋ผ๋ณด๊ณ ์์ผ๋ฉฐ ์ด๋ค ํจ์๋ฅผ ์ธ์ ๋ฐ์์ด ๋๋์ง๋ฅผ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ ํ์ผ์์ ์ ์ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ ๋ถ๋ถ์ด function๊ตฌ๋ฌธ์ธ๋ฐ index.handler๋ถ์ ๋ชจ๋ ํจ์๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์์ผ๋ฉฐ ํด๋นํ๋ ์ด๋ฒคํธ๊ฐ ์ธ์ ๋ฐ์์ด ๋๋์ง๋ event ๋ถ๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
service: test
provider:
name: aws
runtime: nodejs12.x
region: ap-northeast-2
plugins:
- serverless-offline
package:
exclude:
- .git/**
- src/**
- test/**
- e2e/**
- nodemon.json
- README.md
functions:
index:
handler: dist/index.handler
events:
- http:
cors: true
path: '/'
method: any
- http:
cors: true
path: '{proxy+}'
method: any
nest๊ฐ ์ฒ์ ์๋ฒ๋ฅผ ์์ฑํด์ฃผ๋ main์ index.ts๋ผ๋ ํ์ผ์ ๋ง๋ค์ด ์๋ฒ๋ฅผ ์์ฑํด์ฃผ๊ณ handler๋ก ๊ฐ์ธ์ฃผ๋ฉด
์๋ฒ๋ฆฌ์ค๊ฐ ๊ตฌ๋๋ ๋์ nest๋ก ๋ง๋ค์ด์ง ์๋ฒ๋ฅผ ์ฝ์ด ๋์ด์ฃผ๊ฒ ๋๋ค.
index.ts
import { APIGatewayProxyHandler } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Server } from 'http';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as awsServerlessExpress from 'aws-serverless-express';
import * as express from 'express';
let cachedServer: Server;
const bootstrapServer = async (): Promise<Server> => {
const expressApp = express();
const adapter = new ExpressAdapter(expressApp);
const app = await NestFactory.create(AppModule, adapter);
app.enableCors();
await app.init();
return awsServerlessExpress.createServer(expressApp);
};
export const handler: APIGatewayProxyHandler = async (event, context) => {
if (!cachedServer) {
cachedServer = await bootstrapServer();
}
return awsServerlessExpress.proxy(cachedServer, event, context, 'PROMISE')
.promise;
};
ํด๋นํ๋ ์๋ฒ๋ฆฌ์ค๊ฐ ์ ์๋ํ๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์๋ ์ฝ๋๋ฅผ ์คํํด์ฃผ๋ฉด ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ ํ์ผ์ ์ฝ์ด ๋ก์ปฌ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
serverless offline
๊ทธ๋ฆฌ๊ณ ์๋ ๋น๋์ํจ ํ , ์๋ฒ๋ฆฌ์ค ๋ฐฐํฌ๋ฅผ ํ๊ฒ ๋๋ฉด ๋๋ค ํ๊ฒฝ์ ์ ์ฌ๋ผ๊ฐ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
yarn build && sls:deploy
๊ฒ์ดํธ์จ์ด ๋ถ์ด๋ ๊ฒ์ ๋ค์์ ์์ฑํด์ผ์ง.
'node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณต๊ณต API ์ฌ์ฉํ์ฌ ์นํ์ด์ง ๋ง๋ค๊ธฐ -2 (0) | 2022.10.10 |
---|---|
nestjs swagger ๋ณด์์ค์ ํ๊ธฐ (0) | 2022.04.06 |
nestjs passport base64 ์ต์ ์ฌ์ฉํ๊ธฐ (0) | 2022.02.22 |
DND 5๊ธฐ 8์ฃผ์ฐจ - ์ต์ข ๋ฐํ (0) | 2021.08.29 |
DND 5๊ธฐ 7์ฃผ์ฐจ - ๋ฅ์คํธ ํ๋ ๋ฐ ํ๊ณ (0) | 2021.08.16 |