-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
bugSomething isn't workingSomething isn't working
Description
문제 설명
Chat 서비스에 두 가지 문제가 있습니다:
- 데이터베이스 구성 문제: 공통 데이터베이스(
mydatabase)에 연결되어 다른 서비스와 데이터를 공유함 - 시작 시 크래시: 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 재현
- Chat 서비스 컨테이너 실행
- Django 설정 확인:
docker exec chat python manage.py shell -c "from django.conf import settings; print(settings.DATABASES['default']['NAME'])"
- 예상 출력:
chat_db - 실제 출력:
mydatabase❌
문제 2 재현
- Chat 서비스 컨테이너 시작
- 컨테이너 로그 확인:
docker logs chat
- 컨테이너 상태 확인:
docker ps -a | grep chat - 결과: 컨테이너가
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_DB→DB_CHAT_NAMEPOSTGRES_USER→DB_CHAT_USERPOSTGRES_PASSWORD→DB_CHAT_PASSWORD
문제 2 해결
Entrypoint에서 자동 마이그레이션 비활성화:
makemigrations및migrate명령을 주석 처리- 마이그레이션은 수동으로 실행하거나 별도의 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
레이블 제안
bugdatabasestartupcriticalmicroservices
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working