이 블로그에서는 AWS Serverless Framework를 사용하여 TypeScript와 Express를 사용하는 서버리스 애플리케이션을 구축하는 방법에 대해 설명합니다.
이 프로젝트에서는 serverless-plugin-typescript 대신 serverless-esbuild와 serverless-offline을 사용합니다.
준비 사항
- Node.js (v16 이상 권장)
- Serverless Framework
- AWS 계정 및 CLI 설정
프로젝트 생성 및 초기 설정
1. 프로젝트 디렉토리 생성 및 이동:
mkdir my-service
cd my-service
2. Serverless Framework를 초기화하고 TypeScript 템플릿을 사용합니다.
serverless create --template aws-nodejs-typescript
3. 생성된 프로젝트에서 필요한 npm 패키지를 설치합니다.
npm install
4. Express 및 관련 패키지를 설치합니다.
npm install express serverless-http
5. src 디렉토리에 app.ts 파일을 생성하고 다음 내용을 작성합니다.
import express, { Request, Response } from 'express';
const app = express();
app.get('/hello', (req: Request, res: Response) => {
res.send('Hello from Serverless TypeScript Express app!');
});
export default app;
6. src/handler.ts 파일을 열어, Express 앱을 AWS Lambda에 통합하기 위해 serverless-http를 사용하도록 수정합니다.
import serverless from 'serverless-http';
import app from './app';
export const handler = serverless(app);
Serverless 설정
1. serverless.yml 파일을 열어 다음과 같이 수정합니다.
service: my-service
provider:
name: aws
runtime: nodejs16.x
lambdaHashingVersion: 20201221
stage: dev
region: ap-northeast-2
plugins:
- serverless-esbuild
- serverless-offline
functions:
app:
handler: src/handler.handler
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy+}
method: ANY
cors: true
2. tsconfig.json 파일에서 "module": "commonjs"를 "module": "esnext"로 변경합니다. 그리고 package.json 파일에 다음과 같이 "type": "module"을 추가합니다.
{
"compilerOptions": {
"moduleResolution": "node",
"noUnusedLocals": true,
"noUnusedParameters": true,
"removeComments": true,
"sourceMap": true,
"target": "ES2020",
"baseUrl": "./src",
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"module": "esnext"
},
"include": ["src/**/*.ts"],
"exclude": [
"node_modules/**/*",
".serverless/**/*",
".webpack/**/*",
"_warmup/**/*",
".vscode/**/*"
]
}
{
"name": "my-service",
"version": "1.0.0",
"description": "Serverless aws-nodejs-typescript template",
"module": "type",
"main": "src/handler.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"engines": {
"node": ">=14.15.0"
},
"dependencies": {
"@middy/core": "^3.4.0",
"@middy/http-json-body-parser": "^3.4.0",
"express": "^4.18.2",
"serverless-http": "^3.2.0"
},
"devDependencies": {
"@serverless/typescript": "^3.0.0",
"@types/aws-lambda": "^8.10.71",
"@types/express": "^4.17.17",
"@types/node": "^14.14.25",
"esbuild": "^0.14.11",
"json-schema-to-ts": "^1.5.0",
"serverless": "^3.0.0",
"serverless-esbuild": "^1.43.0",
"serverless-typescript": "^0.0.5",
"ts-node": "^10.4.0",
"tsconfig-paths": "^3.9.0",
"typescript": "^4.9.5"
},
"author": "The serverless webpack authors (https://github.com/elastic-coders/serverless-webpack)",
"license": "MIT"
}
로컬에서 애플리케이션 실행
1. 로컬에서 애플리케이션을 실행하려면 다음 명령어를 실행하세요.
sls offline
이 명령어는 프로젝트를 빌드하고 로컬에서 테스트할 수 있는 HTTP 엔드포인트를 생성합니다.
2. 웹 브라우저에서 http://localhost:3000로 이동하거나 curl http://localhost:3000을 실행하여 애플리케이션의 작동을 확인하세요.
프로젝트 배포
1. AWS에 프로젝트를 배포하려면 다음 명령어를 실행하세요.
sls deploy
2. 배포가 완료되면 serverless.yml 파일에 정의된 API Gateway 엔드포인트를 사용하여 배포된 애플리케이션에 액세스할 수 있습니다.
AWS 서비스에서 해당 컴포넌트들이 잘 생성된 것을 아래와 같이 확인할 수 있습니다.
이제 Serverless Framework를 사용하여 TypeScript와 Express를 사용하는 서버리스 애플리케이션을 구축하는 방법에 대해 알게 되었습니다.
프로젝트에서는 serverless-plugin-typescript 대신 serverless-esbuild와 serverless-offline을 사용하여 개발 및 배포를 진행할 수 있습니다.
이를 통해 더 빠른 빌드 및 더 나은 개발 경험을 얻을 수 있습니다.
'ChatGPT > AWS Serverless' 카테고리의 다른 글
[AWS][LAMBDA] 소개 - 1 (0) | 2023.04.04 |
---|---|
[AWS][LAMBDA] SERVERLESS FRAMEWORK 개발하기 - 2 (0) | 2023.04.04 |
[AWS][SERVERLESS] 개발 환경 구축하기 - 2 (0) | 2023.04.03 |
[AWS][SERVERLESS] 개발 환경 구축하기 - 1 (0) | 2023.04.03 |
ChatGPT로 블로그 작성하기 : [AWS][SERVERLESS] 소개 (0) | 2023.04.03 |