Files
sam-sales/hotfix.md

3.0 KiB

긴급 수정 보고서 (Hotfix Report): 영업관리 서버 에러 해결

1. 장애 개요

  • 에러 메시지: Session check failed: SyntaxError: Unexpected token 'E', "Error:SQLS"... is not valid JSON
  • 증상: 로컬 개발 환경에서는 정상 작동하나, 실서버(sales.codebridge-x.com) 접속 시 대시보드 로딩 실패 및 세션 체크 오류 발생.

2. 원인 분석

가. 환경 설정 불일치 (주요 원인)

  • 로컬/도커 환경: DB 호스트명을 mysql로 사용하도록 설정됨 (도커 컴포즈 표준).
  • 실서버 환경: 표준 리눅스 환경으로 DB 호스트가 localhost로 설정되어야 함.
  • .env 파일 누락: 보안상 Git 추적에서 제외된 .env 파일이 서버에 생성되지 않음. 이로 인해 시스템이 로컬용 기본값(mysql)을 사용하면서 접속 실패.

나. 부적절한 에러 핸들링 (연쇄 원인)

  • lib/mydb.php에서 DB 접속 실패 시 die("Error: " . $msg)를 사용하여 프로세스를 종료함.
  • 이로 인해 API가 JSON 형식이 아닌 일반 텍스트 문자열을 반환하게 됨.
  • React 프론트엔드가 이 문자열을 JSON으로 파싱하려다 첫 글자인 'E'에서 SyntaxError를 일으킴.

다. DB 접속 권한 차이

  • 실서버는 보안상 root 계정이 아닌 전용 계정(codebridge)을 사용해야 하는데, 설정 파일 부재로 기본값인 root 인증을 시도함.

3. 해결 단계

1단계: 에러 보고 방식 개선

lib/mydb.php에서 die() 대신 throw new Exception()을 사용하도록 수정. 이제 접속 실패 시에도 API가 구조화된 JSON 응답({success: false, error: "..."})을 반환하여 프론트엔드가 에러 내용을 정확히 표시할 수 있게 됨.

2단계: 자동 환경 설정 도구 배포 (fix_env.php)

SSH 접속이 제한된 상황에서 서버 환경을 진단하고 복구하기 위한 스크립트 제작:

  1. 서버 내 인접 폴더(sales_org)에서 실제 운영 중인 .env 파일을 자동으로 탐색.
  2. 탐색된 정보(DB 유저명, 비밀번호 등)를 현재 프로젝트 경로에 맞춰 재구성하여 새로운 .env 파일 생성.

3단계: 프로덕션 환경 최적화

  • lib/mydb.php의 기본 호스트값을 localhost로 변경하여 호환성 강화.
  • index.php 내 로그인 입력 필드에 autocomplete 속성을 추가하여 브라우저 경고 해결.

4. 향후 방지 대책

  1. 환경 설정 관리: 새로운 서버 배포 시 .env 설정 확인을 필수 체크리스트에 포함.
  2. 응답 구조 통일: JSON API를 제공하는 PHP 파일에서는 절대 die()echo를 직접 사용하지 않고, 반드시 제어된 JSON 인코더를 통해 응답.
  3. 진단 도구 활용: 이번에 사용된 fix_env.php와 같은 진단용 스크립트는 설정이 완료된 후 즉시 삭제하여 보안 유지.

상태: 해결 완료 일자: 2026-01-04 작성: Antigravity AI