Skip to content

[BUG] 데이터베이스 구성 문제 및 시작 시 크래시 #27

@eajnoeyeel

Description

@eajnoeyeel

문제 설명

Chat 서비스에 두 가지 문제가 있습니다:

  1. 데이터베이스 구성 문제: 공통 데이터베이스(mydatabase)에 연결되어 다른 서비스와 데이터를 공유함
  2. 시작 시 크래시: Entrypoint 스크립트에서 자동 마이그레이션 실행 중 데이터베이스 연결 실패로 인해 컨테이너가 시작되지 않음

증상

문제 1: 데이터베이스 구성

  • Chat 서비스가 mydatabase에 연결됨 (예상: chat_db)
  • User, Game 서비스와 같은 데이터베이스 공유

문제 2: 시작 크래시

PostgreSQL is up and running!
django.db.utils.OperationalError: connection failed: connection to server at "172.19.0.4", port 5432 failed: FATAL: password authentication failed for user "chat_user"

컨테이너가 즉시 종료되어 서비스가 시작되지 않음.

재현 단계

문제 1 재현

  1. Chat 서비스 컨테이너 실행
  2. Django 설정 확인:
    docker exec chat python manage.py shell -c "from django.conf import settings; print(settings.DATABASES['default']['NAME'])"
  3. 예상 출력: chat_db
  4. 실제 출력: mydatabase

문제 2 재현

  1. Chat 서비스 컨테이너 시작
  2. 컨테이너 로그 확인:
    docker logs chat
  3. 컨테이너 상태 확인:
    docker ps -a | grep chat
  4. 결과: 컨테이너가 Exited (1) 상태 ❌

현재 코드

문제 1: srcs/chat/config/settings.py

DATABASES = {
    'default': {
        'NAME': config('POSTGRES_DB', default=''),  # ❌ 공통 변수 사용
        'USER': config('POSTGRES_USER', default=''),  # ❌ 공통 변수 사용
        'PASSWORD': config('POSTGRES_PASSWORD', default=''),  # ❌ 공통 변수 사용
    }
}

문제 2: srcs/chat/utils/entrypoint.sh

echo "PostgreSQL is up and running!"

python manage.py makemigrations  # ❌ 자동 실행
python manage.py migrate          # ❌ 자동 실행

exec "$@"

예상 솔루션

문제 1 해결

Chat 서비스 전용 환경 변수 사용:

  • POSTGRES_DBDB_CHAT_NAME
  • POSTGRES_USERDB_CHAT_USER
  • POSTGRES_PASSWORDDB_CHAT_PASSWORD

문제 2 해결

Entrypoint에서 자동 마이그레이션 비활성화:

  • makemigrationsmigrate 명령을 주석 처리
  • 마이그레이션은 수동으로 실행하거나 별도의 health check 후 실행

영향 범위

  • 심각도: 높음 🔴
  • 영향받는 서비스: Chat 서비스
  • 영향받는 기능: 모든 채팅 기능
  • 서비스 가용성: Chat 서비스가 완전히 시작되지 않음 ❌
  • 데이터 손실 위험: 없음

참고사항

  • .env 파일에서 DB_CHAT_NAME, DB_CHAT_USER, DB_CHAT_PASSWORD 값이 설정되어 있어야 합니다.
  • Entrypoint 수정 후 마이그레이션은 다음 명령으로 수동 실행:
    docker exec chat python manage.py migrate
  • 관련 PR: fix/database-configuration

레이블 제안

  • bug
  • database
  • startup
  • critical
  • microservices

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions