컨테이너화된 애플리케이션의 관리와 운영을 간소화하고 싶을 때
대규모, 고가용성 애플리케이션을 운영할 때
마이크로서비스 아키텍처를 구현할 때
CI/CD 파이프라인을 통한 자동화된 배포를 원할 때
클라우드 네이티브 애플리케이션 개발에 초점을 맞출 때
비용 효율적인 솔루션을 찾을 때
ECS를 사용하면 이러한 시나리오에서 큰 이점을 얻을 수 있으며, AWS 클라우드를 통한 애플리케이션 배포 및 관리가 훨씬 간편해짐!
우리 조는 CI/CD 파이프라인 구축을 목적으로 하였고, 다양한 기능에서 AWS 서비스를 이용할 예정이다. 또한, ECS에서 제공하는 보안, 모니터링, 로깅의 기능을 고려하여 Docker Compose말고 ECS를 선택하여 배포하기로 하였음.
- Dockerfile
# Node.js 기반 이미지 선택
FROM node:20.11.0
# 애플리케이션 디렉토리 생성
WORKDIR /usr/src/app
# 애플리케이션 의존성 파일 복사
COPY package*.json ./
# 패키지 설치
RUN npm install
# 애플리케이션 소스 복사 (src 폴더와 나머지 필요한 파일만 복사)
COPY src ./src
COPY tsconfig*.json ./
COPY nest-cli.json ./
# 애플리케이션 빌드
RUN npm run build
# 애플리케이션 시작
CMD ["node", "dist/main"]
- dockerignore
# 노드 모듈 제외
node_modules
# NestJS 빌드 폴더 제외
dist
# 환경 설정 파일 제외
.env
# Git 관련 파일/디렉토리 제외
.git
.gitignore
# npm 디버그 로그
npm-debug.log
# 에디터 설정 파일 제외
.vscode
*.swp
*.swo
# 운영체제 생성 파일 제외
.DS_Store
Thumbs.db
docker build -t potato-shop .
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.<your-region>.amazonaws.com
docker run --env-file .env -d potato-shop
docker run --env-file .env --rm -p 3000:3000 potato-shop