20240402

귤금·2024년 4월 2일

Node.js 4기 TIL

목록 보기
69/86

최종 프로젝트

Docker ECS

📍 목표

  1. ECS를 왜 사용하는지 설명할 수 있다.
  2. ECR 레포지토리에 이미지를 업로드하고, ECS 배포를 하는 방법을 학습한다.
    • Amazon ECS로 지정된 EC2에서 컨테이너를 실행시킬 수 있음

🖊️ 언제 ECS를 사용할까?

  1. 컨테이너화된 애플리케이션의 관리와 운영을 간소화하고 싶을 때

    • ECS는 컨테이너를 쉽게 배포, 관리, 확장할 수 있는 플랫폼을 제공한다. 서버리스 아키텍처인 Fargate를 사용하면 인프라 관리 없이 컨테이너를 실행할 수 있어, 운영 부담을 크게 줄일 수 있다.
  2. 대규모, 고가용성 애플리케이션을 운영할 때

    • ECS는 자동 확장, 로드 밸런싱, 서비스 발견 등의 기능을 제공하여 대규모 애플리케이션의 고가용성을 지원한다. 이를 통해 트래픽 변동에 따라 자동으로 리소스를 조정할 수 있다.
  3. 마이크로서비스 아키텍처를 구현할 때

    • ECS를 사용하여 마이크로서비스를 컨테이너로 분리하고 관리하는 것을 효율적으로 수행할 수 있다. ECS는 서비스 간의 격리를 용이하게 하며, 각 마이크로서비스의 배포와 확장을 독립적으로 관리할 수 있다.
  4. CI/CD 파이프라인을 통한 자동화된 배포를 원할 때

    • ECS는 AWS CodePipeline, CodeBuild 등과 통합하여 지속적인 통합 및 배포를 자동화할 수 있는 환경을 제공한다. 이를 통해 개발자는 코드 변경 사항을 빠르게 배포하고, 배포 프로세스를 효율적으로 관리할 수 있다.
  5. 클라우드 네이티브 애플리케이션 개발에 초점을 맞출 때

    • AWS 클라우드 환경에서 네이티브 애플리케이션을 개발하고자 할 때, ECS는 AWS의 다른 서비스와 통합하기 쉽다. 예를 들어, Amazon RDS, Amazon S3, Amazon CloudWatch와의 통합을 통해 애플리케이션의 데이터 저장, 모니터링, 로깅 등을 쉽게 구성할 수 있다.
  6. 비용 효율적인 솔루션을 찾을 때

    • AWS Fargate를 사용하는 ECS는 실행하는 컨테이너에 대해서만 비용을 지불하는 모델을 제공한다. 이는 리소스 사용량을 최적화하고, 불필요한 인프라 비용을 절감하는 데 도움이 된다.

ECS를 사용하면 이러한 시나리오에서 큰 이점을 얻을 수 있으며, AWS 클라우드를 통한 애플리케이션 배포 및 관리가 훨씬 간편해짐!

우리 조는 CI/CD 파이프라인 구축을 목적으로 하였고, 다양한 기능에서 AWS 서비스를 이용할 예정이다. 또한, ECS에서 제공하는 보안, 모니터링, 로깅의 기능을 고려하여 Docker Compose말고 ECS를 선택하여 배포하기로 하였음.

Dockerfile과 .dockerignore 작성

- 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

image를 빌드하기

docker build -t potato-shop . 

도커 빌드 옵션 참고

생성된 ECR 리포지토리에 Docker 이미지를 푸시

  1. AWS CLI를 사용하여 Docker에 로그인함.
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.<your-region>.amazonaws.com

env와 함께 docker 컨테이너 실행하기

docker run --env-file .env -d potato-shop
docker run --env-file .env --rm -p 3000:3000 potato-shop

0개의 댓글