# 데이터베이스 연결 상태 확인 방법 ## 1. Hugging Face Spaces에서 확인 ### 방법 1: Logs 탭 확인 1. Hugging Face Spaces 페이지로 이동 2. **Logs** 탭 클릭 3. 다음 로그 메시지를 확인: **PostgreSQL 연결 성공 시:** ``` [데이터베이스] PostgreSQL 연결 시도: postgresql://***@... [데이터베이스] PostgreSQL 연결 성공! 버전: PostgreSQL 15.x... [데이터베이스] 테이블 생성 완료 ``` **SQLite 사용 시:** ``` [데이터베이스] SQLite 사용: sqlite:///... [데이터베이스] 테이블 생성 완료 ``` **PostgreSQL 연결 실패 시:** ``` [데이터베이스] PostgreSQL 연결 실패: ... [데이터베이스] SQLite로 폴백합니다. ``` ### 방법 2: API 엔드포인트 사용 (권장) 1. 관리자로 로그인 2. 브라우저 개발자 도구(F12) 열기 3. Console 탭에서 다음 명령 실행: ```javascript fetch('/api/admin/database/status', { credentials: 'include' }) .then(res => res.json()) .then(data => { console.log('DB 연결 상태:', data); console.log('연결됨:', data.connected); console.log('DB 타입:', data.type); console.log('테이블 개수:', data.table_count); console.log('사용자 개수:', data.user_count); console.log('설정 개수:', data.config_count); }); ``` 또는 브라우저 주소창에 직접 입력: ``` https://wiizm-soyailabs.hf.space/api/admin/database/status ``` **응답 예시 (PostgreSQL 연결 성공):** ```json { "connected": true, "type": "PostgreSQL", "uri_masked": "postgresql://***@host:port/database", "version": "PostgreSQL 15.3...", "test_query": "현재 시간: 2025-01-08 12:34:56", "table_count": 10, "user_count": 1, "config_count": 2 } ``` **응답 예시 (SQLite 사용):** ```json { "connected": true, "type": "SQLite", "uri_masked": "sqlite:///instance/finance_analysis.db", "version": "SQLite 3.42.0", "test_query": "현재 시간: 2025-01-08 12:34:56", "table_count": 10, "user_count": 1, "config_count": 2 } ``` ## 2. 로컬 서버에서 확인 ### 방법 1: 로그 파일 확인 ```powershell # 최근 로그 확인 Get-Content logs\server.log -Tail 50 | Select-String "데이터베이스" ``` ### 방법 2: API 엔드포인트 사용 브라우저에서: ``` http://localhost:5001/api/admin/database/status ``` 또는 PowerShell에서: ```powershell Invoke-RestMethod -Uri "http://localhost:5001/api/admin/database/status" -Method GET -SessionVariable session ``` ### 방법 3: Python 스크립트로 확인 ```python import requests # 로그인 (세션 유지) session = requests.Session() login_response = session.post('http://localhost:5001/login', data={ 'username': 'soymedia', 'password': 'your_password' }) # DB 상태 확인 db_status = session.get('http://localhost:5001/api/admin/database/status') print(db_status.json()) ``` ## 3. 데이터베이스 직접 확인 ### PostgreSQL인 경우 ```sql -- 연결 확인 SELECT version(); -- 테이블 목록 SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; -- 사용자 개수 SELECT COUNT(*) FROM "user"; -- 설정 개수 SELECT COUNT(*) FROM system_config; -- Gemini API 키 확인 (마스킹) SELECT key, CASE WHEN value IS NOT NULL THEN LEFT(value, 8) || '...' ELSE NULL END as masked_value FROM system_config WHERE key = 'gemini_api_key'; ``` ### SQLite인 경우 ```bash # SQLite CLI 실행 sqlite3 instance/finance_analysis.db # 테이블 목록 .tables # 사용자 개수 SELECT COUNT(*) FROM user; # 설정 개수 SELECT COUNT(*) FROM system_config; # Gemini API 키 확인 (마스킹) SELECT key, CASE WHEN value IS NOT NULL THEN substr(value, 1, 8) || '...' ELSE NULL END as masked_value FROM system_config WHERE key = 'gemini_api_key'; ``` ## 4. 문제 해결 ### PostgreSQL 연결이 안 되는 경우 1. **환경 변수 확인** - Hugging Face Spaces > Settings > Repository secrets - `DATABASE_URL`이 올바르게 설정되어 있는지 확인 - 형식: `postgresql://user:password@host:port/database` 2. **연결 정보 확인** - 데이터베이스 호스트, 포트, 사용자명, 비밀번호가 올바른지 확인 - 방화벽 설정 확인 3. **로그 확인** - Logs 탭에서 정확한 오류 메시지 확인 - 오류 메시지를 기반으로 문제 해결 ### SQLite로 폴백된 경우 - PostgreSQL 연결이 실패하면 자동으로 SQLite로 폴백됩니다 - 이 경우 데이터는 컨테이너 내부에 저장되어 업데이트 시 삭제됩니다 - PostgreSQL 연결을 수정해야 데이터가 영구적으로 저장됩니다 ### 설정이 사라지는 경우 1. **데이터베이스 타입 확인** - SQLite를 사용 중이면 업데이트 시 데이터가 삭제됩니다 - PostgreSQL을 사용해야 데이터가 영구적으로 저장됩니다 2. **설정 저장 확인** - 관리자 페이지에서 설정을 저장한 후 - `/api/admin/database/status`로 `config_count` 확인 - 저장 후에도 개수가 증가하지 않으면 저장 로직에 문제가 있을 수 있습니다 ## 5. 자동 확인 스크립트 ### PowerShell 스크립트 (로컬) ```powershell # check_db.ps1 $baseUrl = "http://localhost:5001" $username = "soymedia" $password = "your_password" # 로그인 $loginData = @{ username = $username password = $password } | ConvertTo-Json $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession $loginResponse = Invoke-WebRequest -Uri "$baseUrl/login" ` -Method POST ` -Body $loginData ` -ContentType "application/json" ` -WebSession $session # DB 상태 확인 $dbStatus = Invoke-RestMethod -Uri "$baseUrl/api/admin/database/status" ` -WebSession $session Write-Host "DB 연결 상태:" -ForegroundColor Cyan Write-Host " 연결됨: $($dbStatus.connected)" -ForegroundColor $(if ($dbStatus.connected) { "Green" } else { "Red" }) Write-Host " 타입: $($dbStatus.type)" Write-Host " 테이블 개수: $($dbStatus.table_count)" Write-Host " 사용자 개수: $($dbStatus.user_count)" Write-Host " 설정 개수: $($dbStatus.config_count)" if ($dbStatus.error) { Write-Host " 오류: $($dbStatus.error)" -ForegroundColor Red } ``` ### Python 스크립트 ```python # check_db.py import requests BASE_URL = "http://localhost:5001" USERNAME = "soymedia" PASSWORD = "your_password" session = requests.Session() # 로그인 login_response = session.post( f"{BASE_URL}/login", json={"username": USERNAME, "password": PASSWORD} ) # DB 상태 확인 db_status = session.get(f"{BASE_URL}/api/admin/database/status").json() print(f"DB 연결 상태: {'✅ 연결됨' if db_status['connected'] else '❌ 연결 실패'}") print(f"DB 타입: {db_status['type']}") print(f"테이블 개수: {db_status['table_count']}") print(f"사용자 개수: {db_status['user_count']}") print(f"설정 개수: {db_status['config_count']}") if db_status.get('error'): print(f"오류: {db_status['error']}") ```