JSCODE Logo
면접 스터디블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] 컨테이너 기반의 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (Nest.jS)

JSCODE 박재성
JSCODE 박재성
2025-12-01
author
JSCODE 박재성
category
CI/CD
createdAt
Dec 1, 2025
series
비전공자도 이해할 수 있는 CI/CD 입문
slug
ci-cd-for-container-project-nestjs
type
post
updatedAt
Dec 1, 2025 12:06 PM

✅ 이전 실습했던 내용 정리

  • 서버 종료
  • 프로젝트 폴더 삭제
 

✅ 1. Docker 기반으로 프로젝트 수정하기

  1. Dockerfile 작성하기
    1. Dockerfile
      FROM node:alpine WORKDIR /usr/src/app COPY . . RUN npm install RUN npm run build EXPOSE 3000 CMD [ "node", "dist/main.js" ]
 
 
  1. .dockerignore 파일 생성
    1. 컨테이너에 불필요한 파일들이 복사(COPY) 되는 걸 막아준다.
      node_modules
       

✅ 2. EC2가 Private ECR에 접근할 수 있게 셋팅하기

1. Amazon ECR Docker Credential Helper 설치하기
GitHub - awslabs/amazon-ecr-credential-helper: Automatically gets credentials for Amazon ECR on docker push/docker pull
Automatically gets credentials for Amazon ECR on docker push/docker pull - GitHub - awslabs/amazon-ecr-credential-helper: Automatically gets credentials for Amazon ECR on docker push/docker pull
GitHub - awslabs/amazon-ecr-credential-helper: Automatically gets credentials for Amazon ECR on docker push/docker pull
https://github.com/awslabs/amazon-ecr-credential-helper?tab=readme-ov-file
GitHub - awslabs/amazon-ecr-credential-helper: Automatically gets credentials for Amazon ECR on docker push/docker pull
# Ubuntu일 경우 $ sudo apt update $ sudo apt install amazon-ecr-credential-helper
 
  1. Configuration 설정하기
    1. ~ 경로에서 .docker라는 폴더 만들고, config.json 파일 만들어서 위와 같이 작성해라.
      ~/.docker/config.json
      { "credsStore": "ecr-login" }
       
 
  1. IAM Role을 활용해 EC2가 ECR에 접근할 수 있게 권한 부여하기
    1. notion image
      EC2에 연결되어 있는 IAM Role에 AmazonEC2ContainerRegistryFullAccess 정책 추가하기
 

✅ 3. Docker 기반 CI/CD 구축하기

  1. Github Actions 파일 작성하기
    1. .github/workflows/deploy.yml
      name: Deploy To EC2 on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: Node 설치 uses: actions/setup-node@v4 with: node-version: "20" - name: 의존성(라이브러리) 설치 run: npm ci - name: .env 파일 만들기 run: | touch .env echo '${{ secrets.ENV }}' >> .env - name: 테스트 코드 실행 run: npm run test - name: AWS Resource에 접근할 수 있게 AWS credentials 설정 uses: aws-actions/configure-aws-credentials@v4 with: aws-region: ap-northeast-2 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: ECR에 로그인하기 id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Docker 이미지 생성 run: docker build -t instagram-server . - name: Docker 이미지에 Tag 붙이기 run: docker tag instagram-server ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: ECR에 Docker 이미지 Push하기 run: docker push ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script_stop: true script: | docker stop instagram-server || true docker rm instagram-server || true docker pull ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest docker run -d --name instagram-server -p 3000:3000 ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest
       
  1. CI/CD 과정이 잘 작동하는 지 확인하기
    1.  
author
category
createdAt
series
비전공자도 이해할 수 있는 CI/CD 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 12:46 AM
📎
이 글은 비전공자도 이해할 수 있는 CI/CD 입문·실전 강의의 수업 자료 중 일부입니다.