DevOps 환경에서 어플리케이션 배포는 매우 중요한 과정입니다. 특히 Docker를 활용하면 애플리케이션의 배포와 관리를 더욱 간편하게 할 수 있습니다. 이번 포스트에서는 Docker Compose를 사용하여 간단한 웹 애플리케이션을 배포하는 방법을 설명하겠습니다.

Docker Compose란?

Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행할 수 있는 도구입니다. 하나의 YAML 파일을 사용하여 여러 서비스를 구성할 수 있으며, 이를 통해 개발, 테스트, 배포 환경을 간편하게 설정할 수 있습니다.

사전 준비

이번 예제에서는 간단한 Node.js 웹 애플리케이션과 MongoDB 데이터베이스를 사용해 보겠습니다. 다음을 설치해야 합니다:

  • Docker
  • Docker Compose

프로젝트 구조

먼저, 프로젝트 구조를 아래와 같이 설정합니다:

my-app/
│
├── docker-compose.yml
├── app/
│   ├── Dockerfile
│   ├── package.json
│   └── server.js

Node.js 애플리케이션 작성

app/ 디렉토리에 package.json 파일을 생성합니다:
{
  "name": "my-app",
  "version": "1.0.0",
  "description": "A simple Node.js web application",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "mongoose": "^5.10.9"
  }
}

이제 server.js 파일을 작성합니다:

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const PORT = process.env.PORT || 3000;
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://mongo:27017/mydb';

mongoose.connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('MongoDB connected'))
  .catch(err => console.error(err));

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(PORT, () => {
  console.log(Server is running on port ${PORT});
});

마지막으로 Dockerfile을 작성합니다:

FROM node:14

# 작업 디렉토리 생성
WORKDIR /usr/src/app

# package.json 및 package-lock.json 복사
COPY package*.json ./

# 의존성 설치
RUN npm install

# 모든 파일 복사
COPY . .

# 애플리케이션 포트
EXPOSE 3000

# 애플리케이션 시작
CMD ["npm", "start"]

Docker Compose 파일 작성

프로젝트 루트에 docker-compose.yml 파일을 생성합니다:

version: '3.8'

services:
  app:
    build:
      context: ./app
    ports:
      - "3000:3000"
    environment:
      MONGODB_URI: mongodb://mongo:27017/mydb
    depends_on:
      - mongo

  mongo:
    image: mongo:4.4
    ports:
      - "27017:27017"

애플리케이션 실행

이제 모든 설정이 완료되었습니다. 다음 명령어로 Docker Compose를 사용하여 애플리케이션을 실행합니다:

docker-compose up --build

위 명령어는 Docker 이미지 빌드와 컨테이너 실행을 동시에 수행합니다. 실행이 완료되면 브라우저에서 http://localhost:3000으로 접속하여 "Hello, World!" 메시지를 확인할 수 있습니다.

마무리

이번 포스트에서는 Docker Compose를 사용하여 간단한 Node.js 웹 애플리케이션과 MongoDB 데이터베이스를 배포하는 방법을 알아보았습니다. Docker Compose 덕분에 여러 서비스를 간편하게 관리하고 배포할 수 있는 장점을 누릴 수 있습니다. 더 복잡한 애플리케이션에서도 이러한 방식을 확장하여 사용할 수 있으며, DevOps 도구 체인에서 매우 유용하게 활용될 것입니다. Docker와 Docker Compose를 통해 자동화된 배포 프로세스를 만들어가는 여정을 계속해 보시기 바랍니다.