Skip to Content

문제 해결

CoreRx 운영 중 발생할 수 있는 일반적인 문제와 해결 방법을 정리합니다. 캐시 불일치, ETL 실패, Docker/Superset 이슈를 다룹니다.

캐시 관련 문제

대시보드 데이터가 오래됨

증상: 대시보드에 표시되는 데이터가 최신 업로드 내용을 반영하지 않습니다.

원인과 해결:

확인 순서확인 사항해결 방법
1캐시 메타 상태 확인데이터 관리 탭에서 last_refreshed 확인
2캐시 갱신이 실행되지 않음refresh_all_kpi_cache() 수동 실행
3캐시 갱신이 failed 상태error_message 확인 후 원인 해결
4ETL 자체가 실행되지 않음ETL 스크립트 실행 이력 확인

캐시 불일치 (원본과 캐시 수치 다름)

증상: SQL Lab에서 원본 테이블을 직접 조회한 결과와 캐시 테이블의 수치가 다릅니다.

원인과 해결:

원인해결 방법
캐시 갱신 후 원본 데이터가 변경됨캐시 재갱신 실행
캐시 갱신 중 에러로 부분만 갱신됨전체 캐시 재갱신 실행
원본 쿼리와 캐시 Function의 집계 기준 차이금액 단위(원 vs 백만원), 기간 범위, 필터 조건 확인

조치 절차:

  1. corerx_cache_meta에서 해당 캐시의 상태와 갱신 시각을 확인합니다.
  2. 상태가 failed이면 error_message를 확인합니다.
  3. 전체 캐시를 재갱신합니다.
SELECT refresh_all_kpi_cache( '4b5b1d04-23f6-42a7-9fe5-acb0a9998c55', 'manual' );

캐시 갱신 실패 (status = failed)

증상: corerx_cache_meta의 상태가 failed로 표시됩니다.

일반적인 원인:

에러 메시지원인해결
out of memoryPostgreSQL 메모리 부족work_mem 설정 확인 및 조정
deadlock detected동시 갱신 충돌단일 세션에서 재실행
relation does not exist테이블 미존재create_tables.py 실행 또는 마이그레이션 확인
division by zero분모가 0인 데이터NULLIF 처리 확인. DB Function 점검

ETL 관련 문제

UBIST 엑셀 파싱 실패

증상: ubist_import.py 실행 시 헤더 파싱 에러가 발생합니다.

원인과 해결:

원인해결 방법
UBIST 엑셀 파일 형식 변경새 파일의 컬럼 구조 확인. 헤더 행(1~2행) 매핑 코드 수정 필요
파일이 손상됨UBIST에서 파일 재다운로드
인코딩 문제엑셀 파일을 다시 저장 (UTF-8)

디버깅 절차:

  1. --dry-run 옵션으로 먼저 테스트합니다.
  2. 에러 메시지에서 실패한 행 번호를 확인합니다.
  3. 해당 행의 데이터를 엑셀에서 직접 확인합니다.
python3 scripts/ubist_import.py --file "UBIST_D1 Sales.xlsx" --dry-run

ETL 실행 중 DB 연결 끊김

증상: ETL 실행 중 connection reset 또는 server closed the connection 에러가 발생합니다.

원인과 해결:

원인해결 방법
네트워크 불안정서버 네트워크 상태 확인 후 재실행
PostgreSQL 타임아웃statement_timeout 설정 확인 (대용량 ETL은 제한 해제 필요)
Docker 컨테이너 재시작Supabase Docker 상태 확인 (docker ps)

supply_qty 타입 에러

증상: 매출 집계 시 cannot cast text to numeric 에러가 발생합니다.

원인: kpis_gap_rows.supply_qty는 TEXT 타입입니다. 합산 시 반드시 CAST가 필요합니다.

해결: 모든 쿼리에서 supply_qty::numeric 또는 CAST(supply_qty AS numeric)을 사용합니다.

주의: supply_qty 컬럼은 기존 테이블(kpis_gap_rows)의 컬럼이므로 타입 변경(ALTER)이 금지됩니다. KPIS, CSO Web 사이트에서 공유하는 테이블입니다.

Docker/Superset 관련 문제

Superset 컨테이너 시작 실패

증상: Superset Docker 컨테이너가 시작되지 않거나, 시작 후 즉시 종료됩니다.

확인 절차:

  1. Docker 컨테이너 상태를 확인합니다.
sudo docker compose -f docker-compose.superset.yml ps
  1. 실패한 컨테이너의 로그를 확인합니다.
sudo docker compose -f docker-compose.superset.yml logs --tail 100

일반적인 원인:

원인해결 방법
포트 충돌 (8050)해당 포트를 사용하는 다른 프로세스 확인 및 종료
메모리 부족서버 메모리 확인. 불필요한 컨테이너 정리
볼륨 권한 문제Docker 볼륨 권한 확인

Superset 대시보드 접속 불가

증상: 브라우저에서 대시보드 URL에 접속할 수 없습니다.

확인 절차:

확인 순서확인 사항명령어
1Docker 컨테이너 실행 중sudo docker ps
2Superset 포트 리스닝sudo ss -tlnp | grep 8050
3Nginx 프록시 동작sudo nginx -t && sudo systemctl status nginx
4SSL 인증서 유효sudo certbot certificates

Superset 재배포

문제 해결 후 Superset을 재배포해야 하는 경우:

bash scripts/redeploy_superset.sh

이 스크립트는 Docker 컨테이너를 중지, 재빌드, 재시작합니다.

PostgreSQL 관련 문제

DB 연결 실패

증상: ETL 스크립트 또는 Superset에서 DB 연결이 실패합니다.

확인 절차:

  1. Supabase Docker 컨테이너 상태를 확인합니다.
sudo docker ps | grep supabase
  1. PostgreSQL 포트(5432)가 리스닝 중인지 확인합니다.
sudo ss -tlnp | grep 5432
  1. 직접 연결을 시도합니다.
psql -h localhost -p 5432 -U postgres -d postgres

디스크 용량 부족

증상: ETL 실행 또는 캐시 갱신 시 no space left on device 에러가 발생합니다.

확인 및 해결:

  1. 디스크 사용량을 확인합니다.
df -h
  1. Docker 이미지/볼륨 정리로 공간을 확보합니다.
sudo docker system prune -f
  1. PostgreSQL WAL 로그가 과도하게 쌓인 경우 체크포인트를 실행합니다.

공통 진단 절차

문제 발생 시 다음 순서로 진단합니다:

  1. 증상 확인: 대시보드 화면, 에러 메시지, 로그를 수집합니다.
  2. 서비스 상태 확인: Docker 컨테이너, Nginx, PostgreSQL 상태를 확인합니다.
  3. 로그 확인: Superset 로그, PostgreSQL 로그, ETL 스크립트 출력을 확인합니다.
  4. 원인 특정: 네트워크, 디스크, 메모리, 데이터 문제 중 어떤 것인지 구분합니다.
  5. 해결 후 검증: 문제 해결 후 캐시 갱신 → 대시보드 확인으로 정상 동작을 검증합니다.

다음 단계

Last updated on