-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
문제 설명
두 가지 주요 문제가 있습니다:
-
PostgreSQL 18+ 호환성 문제: Docker 볼륨 마운트 경로가 PostgreSQL 18+의 새로운 디렉토리 구조와 맞지 않아 데이터베이스 초기화 실패
-
마이크로서비스 데이터베이스 격리 부족:
- 환경 변수 우선순위 문제로 일부 서비스가 여전히 SQLite 또는 잘못된 데이터베이스 사용
- 프론트엔드가 HTTPS를 사용하도록 설정되어 개발 환경에서 SSL 인증서 오류 발생
증상
문제 1: PostgreSQL 볼륨 오류
Error: in 18+, these Docker images are configured to store database data in a
format which is compatible with "pg_ctlcluster" (specifically, using
major-version-specific directory names).
Counter to that, there appears to be PostgreSQL data in:
/var/lib/postgresql/data (unused mount/volume)
문제 2: 서비스별 데이터베이스 연결 문제
- 일부 서비스가
DATABASE_ENGINE=sqlite3사용 - 프론트엔드에서 HTTPS 호출 시 인증서 오류
재현 단계
문제 1 재현
- Docker Compose로 데이터베이스 컨테이너 시작
- 데이터베이스 로그 확인:
docker logs database_user
- 결과: PostgreSQL 초기화 실패 오류 ❌
문제 2 재현
- 서비스 컨테이너 실행
- 환경 변수 확인:
docker exec user env | grep DATABASE_ENGINE
- 결과:
DATABASE_ENGINE=sqlite3(예상:postgresql) ❌
현재 코드
docker-compose.yml:
database_user:
volumes:
- db_user_data:/var/lib/postgresql/data # ❌ PostgreSQL 18+와 호환되지 않음
user:
env_file:
- ./.env
- ./user/.env # ❌ 로컬 .env가 DATABASE_ENGINE을 오버라이드할 수 있음
# ❌ DATABASE_ENGINE이 명시적으로 설정되지 않음예상 솔루션
1. PostgreSQL 볼륨 경로 수정
database_user:
volumes:
- db_user_data:/var/lib/postgresql # ✅ PostgreSQL 18+ 호환 경로2. 환경 변수 명시적 설정
user:
environment:
- DATABASE_ENGINE=postgresql # ✅ 명시적 설정 (최고 우선순위)
env_file:
- ./.env
- ./user/.env3. 프론트엔드 HTTP 설정
frontend:
environment:
- USER_API_URL=http://localhost/api/user # ✅ HTTP 사용
- CHAT_API_URL=http://localhost/api/chat
# ...영향 범위
- 심각도: 높음 🔴
- 영향받는 서비스: 모든 서비스 (데이터베이스, user, chat, game, frontend)
- 영향받는 기능:
- 데이터베이스 초기화 및 지속성
- 서비스 간 데이터 격리
- 개발 환경 테스트
- 데이터 손실 위험: 기존 볼륨 삭제 필요 가능
참고사항
- PostgreSQL 18+는 데이터를
/var/lib/postgresql/18/docker/에 저장합니다. - 환경 변수 우선순위:
environment:> 서비스별.env> 메인.env - 개발 환경에서는 HTTP 사용이 허용 가능하며, 프로덕션에서는 적절한 SSL 인증서 필요.
- 관련 PR:
fix/microservices-database-isolation
레이블 제안
bugdockerdatabaseconfigurationbreaking-changehigh-priority
Metadata
Metadata
Assignees
Labels
No labels