3.0 KiB
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 접속이 제한된 상황에서 서버 환경을 진단하고 복구하기 위한 스크립트 제작:
- 서버 내 인접 폴더(
sales_org)에서 실제 운영 중인.env파일을 자동으로 탐색. - 탐색된 정보(DB 유저명, 비밀번호 등)를 현재 프로젝트 경로에 맞춰 재구성하여 새로운
.env파일 생성.
3단계: 프로덕션 환경 최적화
lib/mydb.php의 기본 호스트값을localhost로 변경하여 호환성 강화.index.php내 로그인 입력 필드에autocomplete속성을 추가하여 브라우저 경고 해결.
4. 향후 방지 대책
- 환경 설정 관리: 새로운 서버 배포 시
.env설정 확인을 필수 체크리스트에 포함. - 응답 구조 통일: JSON API를 제공하는 PHP 파일에서는 절대
die()나echo를 직접 사용하지 않고, 반드시 제어된 JSON 인코더를 통해 응답. - 진단 도구 활용: 이번에 사용된
fix_env.php와 같은 진단용 스크립트는 설정이 완료된 후 즉시 삭제하여 보안 유지.
상태: 해결 완료 일자: 2026-01-04 작성: Antigravity AI