DevOps 환경에서 애플리케이션의 지속적인 배포는 중요한 요소입니다. 이번 글에서는 Nginx와 Docker를 활용하여 무중단 배포 시스템을 구축하는 방법에 대해 알아보겠습니다. 이를 통해 개발자는 새로운 기능을 배포하더라도 사용자에게 끊김 없는 서비스를 제공할 수 있습니다.
1. 환경 설정
먼저, Docker와 Nginx가 설치된 환경이 필요합니다. Docker가 설치되어 있지 않은 경우 Docker 공식 문서를 참조하여 설치할 수 있습니다. Nginx는 Docker를 사용하여 컨테이너 내에서 실행할 것입니다.
sudo systemctl start docker
2. Nginx 설정
Nginx는 리버스 프록시 서버로서 애플리케이션 서버의 요청을 처리합니다. 먼저, Nginx의 설정 파일을 작성합니다.
nginx.conf 파일을 생성하고 다음과 같이 설정합니다.
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://app:3000; # Docker Compose에서 정의된 애플리케이션 컨테이너 이름
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3. Dockerize 애플리케이션
이제 배포할 애플리케이션을 Docker 이미지로 만들어야 합니다. 간단한 Node.js 애플리케이션을 예로 들어보겠습니다. 먼저, 애플리케이션의 Dockerfile을 생성합니다.
# Node.js 베이스 이미지 사용
FROM node:14
# 작업 디렉토리 설정
WORKDIR /usr/src/app
# 패키지 종속성 복사 및 설치
COPY package*.json ./
RUN npm install
# 소스 코드 복사
COPY . .
# 애플리케이션 실행
CMD ["node", "app.js"]
# 애플리케이션이 사용할 포트
EXPOSE 3000
애플리케이션 코드와 Dockerfile을 준비한 후, Docker 이미지를 빌드합니다.
docker build -t myapp .
4. Docker Compose 설정
여러 컨테이너를 효율적으로 관리하기 위해 Docker Compose를 사용합니다. docker-compose.yml 파일을 생성하고 다음과 같이 작성합니다.
version: '3'
services:
app:
build: .
restart: always
ports:
- "3000:3000"
nginx:
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
depends_on:
- app
5. 무중단 배포 구현
무중단 배포를 위해 Blue-Green Deployment 기법을 사용할 수 있습니다. 이를 구현하기 위해 두 개의 애플리케이션 버전(예: v1, v2)을 준비하고, Nginx의 설정을 통해 트래픽을 조절합니다.
upstream app {
server app_v1:3000;
# server app_v2:3000; # 새로운 버전이 준비되면 주석 해제
}
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://app;
...
}
}
애플리케이션의 새로운 버전이 준비되면, Nginx 설정을 업데이트하고 Nginx를 재시작하여 새로운 버전으로 트래픽을 전환합니다.
# Nginx 재시작
docker-compose exec nginx nginx -s reload
이렇게 하면 사용자에게 서비스 중단 없이 새로운 애플리케이션 버전을 배포할 수 있습니다.
마무리
이번 글에서는 Nginx와 Docker를 활용하여 무중단 배포 시스템을 구축하는 방법을 살펴보았습니다. Docker를 통해 애플리케이션을 컨테이너화하고, Nginx를 리버스 프록시로 설정하여 효율적인 트래픽 관리를 구현할 수 있었습니다. 이 튜토리얼을 통해 DevOps 환경에서 무중단 배포의 원리를 이해하고 실제로 적용할 수 있는 기초를 다졌기를 바랍니다.