GitHub Actions를 선택하는 이유는 다양한 자동화 기능과 GitHub 플랫폼과의 통합성 때문입니다.
도커(Docker)는 애플리케이션을 컨테이너(Container)라는 단위로 패키징하고 실행할 수 있도록 도와주는 오픈 소스 플랫폼입니다. 컨테이너를 사용하면 애플리케이션과 해당 실행 환경을 독립적으로 묶어 어디서든 일관되게 실행할 수 있습니다.
컨테이너는 애플리케이션과 함께 필요한 모든 라이브러리, 종속성, 설정을 포함하는 가벼운 실행 환경입니다. 이를 통해 애플리케이션은 어떤 환경에서도 동일하게 작동할 수 있습니다.
FROM node:20-alpine
WORKDIR /var/app
RUN mkdir -p /var/app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start"]
node_modules
.git
dist
일단 로컬에서 도커로 실행을 한 후에 PostgreSQL과 서버가 잘 연결이 되어있는지 테스트를 하기 위해서 작성을 했습니다.
version: '3'
services:
db:
image: postgres:17
restart: always
environment:
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_DB=${DB_NAME}
container_name: postgresDB
volumes:
- ./postgresql-data:/var/lib/postgresql/data
ports:
- '5432:5432'
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
interval: 10s
retries: 5
app:
build:
context: .
dockerfile: Dockerfile
container_name: app
environment:
- DB_HOST=host.docker.internal
- DB_PORT=5432
- DB_USER=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- DB_NAME=${DB_NAME}
- PORT=${PORT}
ports:
- '3000:3000'
depends_on:
db:
condition: service_healthy
volumes:
- ./src:/app/src
CI/CD(Continuous Integration/Continuous Deployment)는 개발 프로세스를 자동화하고, 빠른 배포 및 테스트를 가능하게 합니다.
name: CI/CD Pipeline
on:
push:
branches: ['dev']
pull_request:
branches: ['dev']
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- run: npm ci
- run: npm test
build-and-push:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: |
docker build -t my-app .
- name: Push Docker image to Docker Hub
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
docker tag my-app $DOCKER_USERNAME/my-app:latest
docker push $DOCKER_USERNAME/my-app:latest
Docker 이미지 빌드
Node.js 애플리케이션을 Docker 이미지로 생성합니다.
Docker Hub 푸시
현재는 AWS와의 연결을 구현하지 않은 상태 입니다. 다음 블로그 작성 시 해당하는 글을 작성 하겠습니다.
테스트 자동화
CI/CD 파이프라인 실행