Node.js · 2026-03-03

Node.js API 서버리스 배포 (AWS Lambda + API Gateway)

AWS Lambda와 API Gateway를 활용해 Serverless 환경에서 Node.js API를 설계·구현·배포하는 전체 흐름과 예제 코드를 포함한 설명

작성일 : 2026-03-03 ㆍ 작성자 : 관리자
post
목차

서론: 왜 서버리스로 Node.js API를 만드는가

서버리스는 운영 부담을 줄이고 비용을 사용량 기반으로 최적화할 수 있다. 특히 빠르게 변하는 서비스에서 인프라 관리를 최소화하면서 Node.js로 API를 개발해 배포하는 흐름이 유용하다. 이 글은 Node.js AWS Lambda 배포를 중심으로, Serverless Framework Node.js 사용법과 Lambda Express 연동 예제를 포함해 처음 보는 사람도 쉽게 따라갈 수 있도록 정리한다.

아키텍처 개요

일반적인 구성은 다음과 같다. API Gateway는 외부 요청을 수신하고 Lambda가 비즈니스 로직을 처리한다. 정적 파일이나 장기 저장소는 S3나 DynamoDB를 활용한다. 서버리스는 수평 확장이 자동으로 적용되므로 트래픽 급증에 유연하게 대응한다.

핵심 컴포넌트

  • API Gateway: REST/HTTP 엔드포인트 제공
  • AWS Lambda: Node.js 런타임에서 코드 실행
  • S3/DynamoDB: 데이터 저장
  • Serverless Framework: 배포 자동화 도구

사전 준비

아래 항목이 필요하다.

  • AWS 계정 및 IAM 권한
  • Node.js (>=14 권장)
  • Serverless Framework 설치 (npm로 설치)
  • AWS CLI 설정 (Credentials 입력)

프로젝트 시작과 기본 설정

간단한 Express 앱을 Lambda에서 동작시키려면 serverless-http 같은 어댑터를 사용한다. 다음은 프로젝트 초기 구성 예제다.

package.json 예시

{
  "name": "serverless-node-api",
  "version": "1.0.0",
  "main": "handler.js",
  "dependencies": {
    "express": "^4.18.2",
    "serverless-http": "^2.8.0"
  }
}

app.js (Express 앱)

const express = require('express');
const app = express();
app.use(express.json());

app.get('/', (req, res) => {
  res.json({ message: 'Hello from Lambda + Express' });
});

app.post('/echo', (req, res) => {
  res.json({ body: req.body });
});

module.exports = app;

handler.js (Lambda 핸들러)

const serverless = require('serverless-http');
const app = require('./app');
module.exports.handler = serverless(app);

serverless.yml (배포 설정)

service: serverless-node-api
provider:
  name: aws
  runtime: nodejs14.x
  region: ap-northeast-2
functions:
  api:
    handler: handler.handler
    events:
      - http:
          path: /{proxy+}
          method: any
          cors: true
plugins:
  - serverless-offline

배포 과정

Serverless Framework를 사용하면 배포는 간단하다. 로컬에서 테스트 후 아래 명령을 실행하면 CloudFormation으로 스택이 생성되고 Lambda와 API Gateway가 연결된다.

  • 로컬 테스트: npm start 또는 serverless-offline 사용
  • 배포 명령: serverless deploy

테스트 예제

배포 후 API Gateway 엔드포인트에 curl로 호출해 확인한다.

curl https://{api_id}.execute-api.{region}.amazonaws.com/dev/
curl -X POST https://{api_id}.execute-api.{region}.amazonaws.com/dev/echo -d '{"hello":"world"}' -H 'Content-Type: application/json'

Lambda에서 Express 연동 시 고려사항

Lambda는 상태 비저장(stateless) 환경이므로 세션을 사용하지 않는 디자인이 권장된다. cold start를 줄이려면 패키지 크기를 줄이고 초기화 로직을 최소화한다. serverless.yml에서 메모리와 타임아웃을 적절히 설정하면 성능을 개선할 수 있다. 또한 Lambda Express 연동 예제에서는 serverless-http가 내부적으로 이벤트를 변환하므로 미들웨어 호환성을 확인한다.

모니터링과 최적화

운영 중에는 CloudWatch 로그와 X-Ray로 추적한다. 비용 모델을 이해해 빈번한 호출에 대한 비용을 예측한다. 필요 시 API Gateway 대신 Application Load Balancer를 사용해 HTTP/2나 특정 라우팅 요구사항을 충족한다. 배포 자동화와 버전 관리는 CI/CD 파이프라인과 Serverless Framework의 단계별 배포 기능을 활용하면 수월하다.

결론

이 글은 Node.js AWS Lambda 배포를 중심으로 Serverless Framework Node.js 활용법과 Lambda Express 연동 예제를 소개했다. 서버리스는 빠른 개발과 운영 간소화를 돕지만, 비용과 성능 특성을 이해하고 설계하는 것이 중요하다. 위 예제를 기반으로 프로젝트 요구에 맞게 확장하면 효과적인 서버리스 API 구축이 가능하다.

Node.js AWS Lambda 배포 Serverless Framework Node.js Lambda Express 연동 예제 서버리스 API Gateway serverless-http 배포 자동화 AWS Lambda 최적화