최근 Vercel과 Neon DB를 활용한 서버리스 인프라 구성에 대해 고민하고 있습니다. 특히 소규모 개발 조직에서 인프라 관리를 효율적으로 하면서도 트래픽이 급증할 때 안정성을 유지하는 방법을 찾고 있었습니다. 제가 고민하고 조사한 내용을 기반으로 AWS ECS(Fargate), Vercel 서버리스 함수, Neon DB의 개념과 장단점에 대해 좀 더 자세히 정리했습니다.
1. AWS ECS(Fargate) 배포 구조
ECS(Fargate)는 컨테이너 기반의 서비스를 쉽게 배포하고 운영할 수 있도록 돕는 관리형 서비스입니다. 일반적인 배포 과정은 다음과 같습니다.
빌드 및 업로드 과정
- GitHub Actions를 통해 NestJS 프로젝트를 빌드하고 Docker 이미지를 생성합니다.
- 생성된 이미지를 AWS ECR(Elastic Container Registry)에 업로드합니다. 이는 Docker 이미지 레이어 형태로 저장됩니다.
Task Definition과 Task
- Task Definition은 Docker 이미지의 위치, CPU와 메모리 설정, 환경변수 등을 정의한 일종의 ‘설계도’입니다.
- Task는 Task Definition을 기반으로 실제로 프로비저닝되는 microVM 환경 위에 Docker 이미지를 실행하는 컨테이너 실행 단위입니다.
Service와 Task 관리
- ECS의 Service는 설정된 Task Definition을 기준으로 필요한 Task 수를 유지하고 관리합니다. Task가 종료되면 Service가 자동으로 새 Task를 생성합니다.
- 트래픽이 증가하면 오토스케일링을 통해 Task 개수를 늘리고, ALB(Application Load Balancer)가 자동으로 트래픽을 분산합니다.
- 각 Task는 독립된 microVM에서 실행되며, 동일한 NestJS 서버가 여러 개의 microVM에 복제되어 운영됩니다.
2. Vercel 서버리스 함수 구조
Vercel의 서버리스 함수는 ECS와는 다른 구조를 가지고 있습니다.
- 요청이 들어오면 그 순간 즉시 경량화된 microVM 혹은 sandbox 환경을 띄워 함수 형태의 코드만 실행하고, 처리 후 종료합니다.
- 최근 Vercel은 Fluid Compute라는 기능을 통해 미리 경량 microVM을 준비해놓아 성능을 최적화하여 콜드스타트를 완화하고 있습니다.
Vercel은 완전 관리형 플랫폼으로, 개발자가 별도의 설정 없이도 자동으로 배포, 스케일링, SSL, 캐싱, CDN 등 모든 인프라 요소를 처리합니다.
3. Neon DB 서버리스 데이터베이스
Neon DB는 기존 AWS RDS와 다른 완전 서버리스 형태의 데이터베이스를 제공합니다. 이 구조를 이해하기 쉽게 도서관에 비유해 설명하겠습니다.