MongoDB는 대표적인 NoSQL Database로, JSON 형태의 데이터를 저장하는 Document Database입니다.
관계형 Database인 MySQL, PostgreSQL과 달리 데이터를 Table과 Row 형태가 아닌 Document와 Collection 구조로 관리합니다.
기본 구조:
Application
↓
MongoDB
↓
Collection
↓
Document
MongoDB는 다음과 같은 서비스에서 많이 사용됩니다.
- 실시간 데이터 처리
- 사용자 프로필 관리
- 로그 저장
- IoT 데이터
- 콘텐츠 서비스
- 빠른 개발 환경
기존 MongoDB 설치 방식:
Linux Server
↓
MongoDB 설치
↓
설정 변경
↓
Database 생성
↓
사용자 관리
문제:
- 서버 환경 차이 발생
- 설정 반복 필요
- 이전 작업 복잡
- 백업 관리 어려움
Docker Compose 방식:
docker-compose.yml
↓
MongoDB Image
↓
MongoDB Container
↓
Volume 연결
↓
Database 실행
장점:
- 동일한 환경 구축 가능
- 빠른 서버 이전
- 쉬운 백업
- 개발과 운영 환경 통일
이번 글에서는 Docker Compose MongoDB Container 구성부터 환경 변수 설정, Volume 연결, Network 구성, Application 연동, Production 운영 방법까지 알아보겠습니다.
Docker Compose MongoDB 구조 이해하기
Docker Compose에서는 MongoDB를 하나의 Service로 정의합니다.
기본 구조:
services:
mongodb:
image: mongo:7
동작:
MongoDB Image
↓
MongoDB Container
↓
Database 실행
운영 환경에서는 다음 설정이 필요합니다.
필수 구성:
- Root User
- Password
- Database Name
- Volume
- Network
- Backup
Docker Compose MongoDB 기본 설정
docker-compose.yml:
services:
mongodb:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
volumes:
- mongodb-data:/data/db
volumes:
mongodb-data:
구조:
MongoDB Container
↓
mongodb-data Volume
↓
Database 저장
실행:
docker compose up -d
확인:
docker compose ps
결과:
mongodb
running
27017 port
Docker Compose MongoDB 환경 변수 설정
MongoDB Image는 초기 실행 시 Environment 값을 사용합니다.
MONGO_INITDB_ROOT_USERNAME
관리자 계정 생성
예:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD
관리자 비밀번호 설정
예:
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE
초기 Database 생성
예:
MONGO_INITDB_DATABASE: app
Docker Compose MongoDB .env 파일 사용
운영 환경에서는 비밀번호를 분리하는 것이 좋습니다.
.env:
MONGO_USERNAME=admin
MONGO_PASSWORD=securepassword
MONGO_DATABASE=production
docker-compose.yml:
services:
mongodb:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_DATABASE}
구조:
.env
↓
Docker Compose
↓
MongoDB Container
Docker Compose MongoDB Volume 연결
MongoDB 데이터는 반드시 Volume으로 관리하는 것을 권장합니다.
설정:
volumes:
- mongodb-data:/data/db
의미:
MongoDB 데이터
↓
Volume 저장
↓
Container 삭제 후 유지
확인:
docker volume ls
결과:
mongodb-data
Docker Compose MongoDB 접속 방법
Container 접속:
docker compose exec mongodb bash
Mongo Shell 접속:
mongosh
인증 접속:
mongosh -u admin -p password
Database 확인:
show dbs
Collection 확인:
show collections
데이터 조회:
db.users.find()
Docker Compose Application과 MongoDB 연결
Application은 MongoDB Service 이름으로 접근합니다.
구조:
Application
↓
Docker Network
↓
MongoDB
환경 변수:
MONGO_HOST=mongodb
MONGO_PORT=27017
MONGO_DATABASE=app
MONGO_USER=admin
MONGO_PASSWORD=password
중요:
잘못된 설정:
MONGO_HOST=localhost
올바른 설정:
MONGO_HOST=mongodb
이유:
Container 내부 localhost는 자기 자신을 의미합니다.
Docker Compose MongoDB Network 구성
예:
services:
app:
image: my-app
networks:
- backend
mongodb:
image: mongo:7
networks:
- backend
networks:
backend:
구조:
Application
↓
backend Network
↓
MongoDB
Docker Compose MongoDB Port 관리
MongoDB 기본 Port:
27017
개발 환경:
ports:
- "27017:27017"
외부 접속:
Server:27017
Production 권장:
expose:
- "27017"
구조:
Application
↓
MongoDB
외부 비공개
Docker Compose MongoDB 데이터 백업
MongoDB는 mongodump를 사용합니다.
백업:
docker compose exec mongodb \
mongodump \
-u admin \
-p password \
--out /backup
결과:
Database
↓
Backup File 생성
복원:
docker compose exec mongodb \
mongorestore \
-u admin \
-p password \
/backup
Docker Compose MongoDB Volume 백업
Volume 자체 백업도 가능합니다.
Volume 확인:
docker volume inspect mongodb-data
백업 구조:
MongoDB Volume
↓
압축 Backup
↓
외부 Storage
운영 환경에서는:
- Database Backup
- Volume Backup
두 가지를 함께 관리하는 것이 좋습니다.
Docker Compose MongoDB 업데이트 방법
Image 확인:
docker compose pull mongodb
재실행:
docker compose up -d
업데이트 과정:
Backup
↓
MongoDB Image Update
↓
Container 재생성
↓
데이터 확인
Docker Compose MongoDB 운영 설정
Production 추천:
services:
mongodb:
image: mongo:7
restart: unless-stopped
volumes:
- mongodb-data:/data/db
관리:
- Version 고정
- Password 설정
- Volume 사용
- Backup 구성
- Port 제한
권장:
mongo:7
비추천:
mongo:latest
Docker Compose MongoDB 장애 대응
MongoDB Container 실행 실패
확인:
docker compose logs mongodb
확인:
- 환경 변수
- Volume 권한
- Storage 상태
Application 연결 실패
확인:
Host
Port
Username
Password
Network
데이터 확인
Volume 확인:
docker volume ls
Docker Compose MongoDB 운영 Best Practice
추천:
- 인증 활성화
- 외부 Port 제한
- Volume 사용
- Backup 자동화
- Version 관리
- Monitoring 구성
운영 구조:
Nginx
↓
Application
↓
MongoDB
↓
Volume
↓
Backup
자주 묻는 질문
MongoDB는 MySQL과 다른 Database인가요?
네.
MySQL은 관계형 Database이고 MongoDB는 Document 기반 NoSQL Database입니다.
MongoDB 데이터는 Container에 저장되나요?
권장하지 않습니다.
Volume을 연결하여 관리해야 합니다.
MongoDB Port를 공개해야 하나요?
Production에서는 Application Network 내부 연결을 권장합니다.
Docker Compose에서 MongoDB 운영이 가능한가요?
가능합니다.
개발 환경부터 서비스 운영 환경까지 사용할 수 있습니다.
마무리
Docker Compose MongoDB 구성은 NoSQL 기반 서비스를 빠르게 구축하기 위한 효과적인 방법입니다.
핵심 구조:
MongoDB Container
↓
Volume 데이터 저장
↓
Network 연결
↓
Application 연동
↓
Backup 관리
이 구조를 이해하면 Docker Compose 환경에서 MongoDB 기반 서비스를 안정적으로 운영할 수 있습니다.
다음 글에서는 Database 관리 편의성을 높여주는 Docker Compose Adminer 관리 도구 구성 방법을 알아보겠습니다.