Docker Compose 환경에서 Database를 운영할 때 단순히 Container를 실행하는 것보다 중요한 것은 안정적인 관리 전략입니다.
Database는 서비스의 핵심 데이터가 저장되는 공간이기 때문에 다음 요소를 함께 고려해야 합니다.
- 데이터 보존
- Backup
- 보안
- Version 관리
- 성능 관리
- 장애 대응
일반적인 서비스 구조:
사용자
↓
Nginx
↓
Application
↓
Database
↓
Storage Backup
Docker Compose에서는 Database도 Container 형태로 운영할 수 있지만, 일반 Container와 다르게 특별한 관리가 필요합니다.
잘못된 Database 운영:
Database Container
↓
데이터 저장
↓
Container 삭제
↓
데이터 손실
올바른 운영 구조:
Database Container
↓
Volume
↓
Backup
↓
Recovery
이번 글에서는 Docker Compose에서 MySQL, PostgreSQL, MongoDB 같은 Database를 안정적으로 운영하기 위한 구조와 관리 방법을 알아보겠습니다.
Docker Compose Database 운영 기본 구조
Production 환경의 Database 구성은 일반적으로 다음 구조를 사용합니다.
Application Container
↓
Private Network
↓
Database Container
↓
Volume Storage
↓
Backup Storage
각 역할:
Application:
- 사용자 요청 처리
- Business Logic 실행
Database:
- 데이터 저장
- Query 처리
Volume:
- 데이터 영구 저장
Backup:
- 장애 복구
Database Container는 외부 공개하지 않는다
Database 운영에서 가장 중요한 보안 원칙은 Database Port를 외부에 직접 공개하지 않는 것입니다.
잘못된 구조:
Internet
↓
3306 Port
↓
MySQL
문제:
- 무차별 로그인 공격
- Database 노출
- 보안 위험 증가
권장 구조:
Internet
↓
Nginx
↓
Application
↓
Database
Database는 내부 Network에서만 접근합니다.
Docker Compose Database Network 설계
예:
services:
app:
image: my-app
networks:
- backend
database:
image: mysql:8
networks:
- backend
networks:
backend:
구조:
Application
↓
backend Network
↓
Database
장점:
- 외부 접근 차단
- 서비스 간 통신 관리
- 보안 향상
Docker Compose Database Volume 관리
Database 데이터는 반드시 Volume에 저장해야 합니다.
예:
services:
mysql:
image: mysql:8
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
구조:
MySQL Container
↓
mysql-data Volume
↓
Database File
Container 재생성:
docker compose down
docker compose up -d
결과:
Container 변경
↓
데이터 유지
Database Version 관리 방법
Database Version은 반드시 고정하는 것이 좋습니다.
좋은 예:
image: mysql:8.0
좋은 예:
image: postgres:16
비추천:
image: mysql:latest
이유:
- 예상하지 못한 업데이트
- 호환성 문제
- 장애 원인 분석 어려움
운영 환경:
현재 Version 유지
↓
테스트
↓
업데이트
순서가 필요합니다.
Docker Compose Database Backup 전략
Database 운영에서 Backup은 필수입니다.
두 가지 Backup 방식을 사용합니다.
Logical Backup
Database 명령어로 백업
MySQL:
mysqldump
PostgreSQL:
pg_dump
MongoDB:
mongodump
장점:
- 특정 데이터 복원 가능
- Database 이전 편리
Physical Backup
Volume 자체 백업
구조:
Volume
↓
압축 Backup
↓
복원
장점:
- 빠른 복구
- 전체 환경 보존
Docker Compose Database 자동 Backup 구성
운영 서버에서는 자동화를 권장합니다.
구조:
Cron
↓
Backup Script
↓
Database Backup
↓
External Storage
예:
매일 새벽 3시
↓
MySQL Backup 실행
↓
백업 파일 저장
관리 항목:
- Backup 주기
- 보관 기간
- 저장 위치
- 복원 테스트
Docker Compose Database 장애 대응 순서
Database 장애 발생 시 순서대로 확인합니다.
1단계
Container 상태 확인:
docker compose ps
2단계
로그 확인:
docker compose logs database
3단계
Volume 확인:
docker volume ls
4단계
Network 확인:
docker network inspect 네트워크명
5단계
Backup 복구 검토:
Backup
↓
Restore
↓
서비스 복구
Docker Compose Database Monitoring
운영 환경에서는 상태 확인이 필요합니다.
확인 항목:
- CPU 사용량
- Memory 사용량
- Disk 사용량
- Connection 수
- Query 속도
Docker 확인:
docker stats
Database 내부 확인:
Connection
↓
Query
↓
Lock
↓
Performance
Docker Compose Database 성능 관리
성능 개선 방법:
Index 관리
검색 속도 향상
Query 최적화
불필요한 Query 감소
Connection Pool 사용
Database 연결 관리
Cache 사용
Redis 활용
구조:
Application
↓
Redis Cache
↓
Database
Docker Compose Database 보안 관리
추천 설정:
Password 분리
.env 사용:
DB_PASSWORD=securepassword
Port 제한
Database Port 외부 공개 금지
최소 권한 User 사용
Root 계정 사용 최소화
Backup 암호화
중요 데이터 보호
Docker Compose 여러 Database 운영 구조
실제 서비스에서는 여러 Database를 사용할 수 있습니다.
예:
Application
↓
MySQL
↓
사용자 데이터
Application
↓
Redis
↓
Cache 데이터
Application
↓
MongoDB
↓
로그 데이터
각 Database 역할을 분리합니다.
Docker Compose Database 업데이트 전략
Database 업데이트는 신중하게 진행해야 합니다.
권장 순서:
Backup 생성
↓
Test 환경 업데이트
↓
데이터 확인
↓
Production 업데이트
↓
Rollback 준비
운영 중 바로 업데이트:
Database
↓
Version 변경
↓
서비스 장애
위험이 있습니다.
Docker Compose Database 운영 Best Practice
Production 추천:
데이터:
- Volume 사용
- 자동 Backup
- 복원 테스트
보안:
- 내부 Network 사용
- Port 제한
- Secret 관리
관리:
- Version 고정
- Monitoring
- Log 확인
최종 구조:
사용자
↓
Nginx
↓
Application
↓
Redis Cache
↓
Database Container
↓
Volume
↓
Backup Storage
자주 묻는 질문
Database Container를 재시작해도 데이터가 유지되나요?
Volume을 사용하면 유지됩니다.
Database Port를 열어도 되나요?
가능하지만 Production에서는 권장하지 않습니다.
Docker Compose로 Production Database 운영이 가능한가요?
가능합니다.
다만 Backup, Monitoring, 보안 설정이 함께 필요합니다.
Database Backup은 얼마나 자주 해야 하나요?
서비스 중요도에 따라 다르지만 운영 서비스는 자동 Backup 구성이 일반적입니다.
마무리
Docker Compose Database 운영은 단순히 Container를 실행하는 것이 아니라 데이터 보호와 안정적인 관리가 핵심입니다.
안정적인 구조는 다음과 같습니다.
Database Container
↓
Private Network
↓
Volume Storage
↓
Backup
↓
Monitoring
이 구조를 기반으로 구성하면 Docker Compose 환경에서도 안정적인 Database 서버를 운영할 수 있습니다.
다음 글에서는 장애 발생 시 빠른 복구를 위한 Docker Compose Backup 자동화 구성 방법을 알아보겠습니다.