Skip to content

[BUG] Docker Compose 설정: PostgreSQL 18+ 호환성 및 마이크로서비스 데이터베이스 격리 문제 #9

@eajnoeyeel

Description

@eajnoeyeel

문제 설명

두 가지 주요 문제가 있습니다:

  1. PostgreSQL 18+ 호환성 문제: Docker 볼륨 마운트 경로가 PostgreSQL 18+의 새로운 디렉토리 구조와 맞지 않아 데이터베이스 초기화 실패

  2. 마이크로서비스 데이터베이스 격리 부족:

    • 환경 변수 우선순위 문제로 일부 서비스가 여전히 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 재현

  1. Docker Compose로 데이터베이스 컨테이너 시작
  2. 데이터베이스 로그 확인:
    docker logs database_user
  3. 결과: PostgreSQL 초기화 실패 오류 ❌

문제 2 재현

  1. 서비스 컨테이너 실행
  2. 환경 변수 확인:
    docker exec user env | grep DATABASE_ENGINE
  3. 결과: 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/.env

3. 프론트엔드 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

레이블 제안

  • bug
  • docker
  • database
  • configuration
  • breaking-change
  • high-priority

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions