๐ฏ serverless ์ฌ์ฉํ๋ฉด์ ์ฅ์ ๊ณผ ๊ฟํ, ์ฝ์ง๊ธฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
serverless ๋ ๋์ ์ผ๋ก ๋จธ์ ์์์ ํ๋นํ๊ณ ์ฌ์ฉํ ๋งํผ ๋์ ๋ด๋ ํด๋ผ์ฐ๋ ์ปดํจํ
์คํ๋ชจ๋ธ๋ก ๊ฐ๋ฐ์๋
์๋ฒ์ ๋ํด ์ ๊ฒฝ์ ์ ์ฐ๊ณ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ์๋น์ค ์
๋๋ค.
์ด ๊ธ์์๋ AWS ๋๋ค์ ์๋ฒ๋ฆฌ์ค ๊ด๋ฆฌ๋๊ตฌ์ธ serverless ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ๊ฐ ์ด์ํ๊ณ ์๋ ์ฑ๋ด ์๋น์ค๋ ํ๋ฃจ์ ์ฝ 200๊ฐ ์ ๋์ ์์ฒญ๋ง ์ค๋ ์์ฃผ ์์ ์๋น์ค์
๋๋ค.
serverless ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ GCP ์์ ๊ฐ์ฅ ๋ฎ์ ์ฌ์์ธ f1-micro( vCPU 1๊ฐ, 0.6GB ๋ฉ๋ชจ๋ฆฌ )
์์ ์๋ํ์ต๋๋ค.
๋งค๋ฌ ์ฝ 8000์ ์ ๋์ ๋น์ฉ์ด์๋ ๊ฑธ๋ก ๊ธฐ์ตํฉ๋๋ค. ( ํ๋ฆฌํฐ์ด ์... )
์ด๊ฑธ ์๋ฒ๋ฆฌ์ค๋ก ์ฎ๊ฒจ ๊ฐ๊ฒฉ์ ์ ๊ฐํ๊ณ ์ ํ๊ณ ๋น๊ต์ ์๋ฒ๋ฆฌ์ค๋ฅผ ์ ์ง์ํ๊ณ ์๋ AWS ๋ก ์ด์ฌ๋ฅผ ๊ฐ๊ธฐ๋ก
๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ ๊ฒ ์ด์ฌํ express ์ฝ๋๋ฅผ ํจ์๋ณ๋ก ๋๋์ด serverless ์ ์ฌ๋ฆฌ๋ ํ๋ฆฌํฐ์ด๋ฅผ ์ ์ธํ๊ณ ๊ณ์ฐํ ๊ฒฐ๊ณผ
(monthly): 0.03 USD
๋ผ๋ ์ฝ 36์ ์ด๋ผ๋ ์ด๋ง์ด๋งํ ๋ฎ์ ๊ฐ๊ฒฉ์ผ๋ก ์๋น์ค๋ฅผ ์ด์ ํ ์ ์์์ต๋๋ค.
๋จ์ง ๊ฐ๊ฒฉ์ ์ฅ์ ๋ง ์๊ฐํ๊ณ ์๋ ์ ๋ serverless ๋ก ๋์ด์ ์ ์๋ ๋ฐฐํฌ ๋ฅผ ๊ตฌ์ถํ๋์ง ์๊ฒ๋์์ต๋๋ค.
sls deploy
๋ช
๋ น์ด ํ๋๋ก ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ๋๋ ๊ฒ์ ๋ณด๊ณ ์์ฒญ ํธํ์ต๋๋ค.
์์ ์๋ ์ปดํจํฐ ์์ง์ ์ฌ์ฉํ ๋ ssh๋ก ์ฐ๊ฒฐํ๊ณ github ์ ์ฌ๋ฆฌ๊ณ clone ํ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋๋ฐ
๋ช
๋ น์ด ํ๊ฐ๋ก ์๋์ผ๋ก ๋ฐฐํฌ๋๋ ์
๋ฐ์ดํธ๋ ์ฆ์์ง๋ฉด์ ์ค๋ฅ ํด๊ฒฐ๋ ๋น ๋ฅด๊ณ ์์ฒญํ ๊ธฐ๋ฅ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ณ ๋ฐฐํฌํ์ฌ ์ฌ์ฉ์์ ๋ง์กฑ๋๊ฐ ๋์์ก์ต๋๋ค.
์ปดํจํฐ ์์ง์ ์ฌ์ฉํ ๋๋ ์์ฒญ ์, ์ค๋ฅ ๋ฐ์, ์๋ต ์๋๊ฐ ์ด๋ป๊ฒ ๋๋์ง ํ์ธ ํ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
๊ทธ๋ฌ๋ค๊ฐ serverless ๋ก ๋์ด์ค๋ ๋ฐ์ ์ฌ์ง์ฒ๋ผ ํ๋์ ๋ณด์ฌ์ฃผ๋ ์๋น์ค์ ์ฌ์ฉ๋๋ ์ค๋ฅ ์๋ฅผ ํ์ธ ํ ์ ์์ด์ ํธํ์ต๋๋ค.
๋ํ ์ ์๋ pm2๋ฅผ ์ด์ฉํด์ ๋ก๊ทธ๋ฅผ ๋จ๊ฒผ๋๋ฐ ๋ก๊ทธ๋ฅผ ํ์ธํด์ผ ํ ๋๋ง๋ค ssh๋ก ์ฐ๊ฒฐํด์ผํ๋๊ฒ ๊ท์ฐฎ์๊ณ
vim์ ํตํด ๋ก๊ทธ๋ฅผ ๋ณด๋๊ฒ ๋ถํธํ์ต๋๋ค. AWS lambda ์์๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ง ํด๋ ๋ฐ์ ์ฌ์ง์ฒ๋ผ ๋ก๊ทธ๋ฅผ ์ฐ์ด์ฃผ๋๊ฒ ํธํ์ต๋๋ค.
AWS lambda ๋ ์์ฒญ์ด ์ฐ์์ ์ผ๋ก ์ค์ง ์์ผ๋ฉด Cold ์ํ๊ฐ ๋์ด Response ๋ฆ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ์์ต๋๋ค. ์ธ์ด๋ณ๋ก ๋ค๋ฅด๊ธด ํ์ง๋ง Node.js ๋ ๋น ๋ฅธํธ์ด์ฌ์ ์ ๊ฒฝ ์ธ ์ ๋๋ ์๋์์ต๋๋ค.
ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์คํ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด webpack ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
์๋ ๋ฐฑ์๋๋ ๋ฐ๋ก ์ฝ๋ ์์ถ์ด ํ์์์์ง๋ง ๋๋ค๋ ๋ฐ๋ก๋ฐ๋ก ์คํํ๊ธฐ ๋๋ฌธ์ webpack์ ์ฌ์ฉํด์ ์ฝ๋ ์ฝ๋ ์๊ฐ์ ๋จ์ถ์์ผ ์ ๋ณด๋ค ๋น ๋ฅธ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
serverless ํ๋ฌ๊ทธ์ธ์ธ serverless-webpack ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
TMI velog๋
serverless-http
๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์!
serverless ํธ๋ค๋ฌ๋ฅผ ํ๋ํ๋์ ์์ฑํ๊ฒ ๋๋ฉด ์์ฐ์ฑ ํ๋ฝ, ํจ์ ๊ฐ์ ์ ํ ๋ฐ ํ๋ซํผ์ ์ข ์๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋ผ์ฐ๋๋ก ์ด์ฌ๋ฅผ ๊ฐ๋ ๋ค์ ์์ฑํด์ผ ํ ๊ฒฝ์ฐ๋ ๋ฐ์ํฉ๋๋ค.
์ด๋ด ๋ servereless ๋ฅผ express
, koa
๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ์
serverless-http ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํฉ๋๋ค
// src/serverless.ts
import serverless from 'serverless-http';
import { APIGatewayProxyHandler } from 'aws-lambda';
import app from './app';
const serverlessApp = serverless(app);
export const handler: APIGatewayProxyHandler = async(event, context) => {
const response = await serverlessApp(event, context);
return response;
};
# serverless.yml
functions:
app:
handler: src/serverless.handler
events:
- http:
path: /
method: ANY
- http:
path: /{any+}
method: ANY
์ ์ฝ๋๊ฐ์ด ์ฌ์ฉํ๋ฉด express
, koa
๋ฅผ ์ฌ์ฉํ๋ฉด์๋ serverelss๋ฅผ ์ฌ์ฉ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
( + express ๋ ์ฌ์ฉํ๊ธฐ ๋ฌด๊ฒ๋ค๋ ํ๊ฐ๋ ์กด์ฌํ๊ณ koa๋ณด๋ค ๋๋ฆฝ๋๋ค. ๋ฐ๋ผ์ ์คํ์๊ฐ์ ๋น๋กํด ๊ฐ๊ฒฉ์ด ์ธก์ ๋๋ serverless ์์๋ koa.js ๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข์ต๋๋ค. )
์ ๊ฐ์ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก websocket ๊ณ์ ์ฐ๊ฒฐํด์ผ ํ๋ ์ผ์ด
์๋๋ฉด serverless ์ฌ์ฉ์ ์ถ์ฒ๋๋ฆฝ๋๋ค!
๋ ์ฝ์ด๋ณด๊ธฐ
db์ฐ๊ฒฐ๋ ํ์ ง๋์?