Initial commit: 교육 프로젝트 배포
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# 배움터 인사 정보 일일 자동 동기화 로직 통합 및 최적화
|
||||
|
||||
작성일: 2026-04-20
|
||||
대상 파일: `www/edu/bbs/entry.php`, `www/edu/ajax/get_users_info.php`
|
||||
|
||||
## 1. 배경 및 목적
|
||||
- 현재 인사 정보 수집(`get_users_info.php`)과 진입 처리(`entry.php`)가 분리되어 있음.
|
||||
- 이를 통합하여 매일 배움터 첫 접속자가 자동으로 ERP API 데이터를 수집하고 DB를 동기화하도록 구성한다.
|
||||
- 이후 접속자는 동기화를 건너뛰고 기존 로그인/세션/리다이렉트 흐름을 유지한다.
|
||||
|
||||
## 2. 요구사항 정리
|
||||
### 2.1 동기화 체크
|
||||
- `entry.php`에서 DB 연결 직후 `edu_users_daily_logs`를 조회한다.
|
||||
- 조건: `CAST(injection_at AS DATE) = CURDATE()`.
|
||||
- 오늘 실행 이력이 없으면 `is_done === 0`으로 판단.
|
||||
|
||||
### 2.2 조건부 실행
|
||||
- `is_done === 0`일 때만 아래 2단계를 수행:
|
||||
1. `get_users_info.php`를 호출해 외부 ERP API 데이터를 `edu_users_temp`에 적재.
|
||||
2. `CALL proc_edu_users_daily(?)` 실행으로 `temp -> edu_users` 반영.
|
||||
|
||||
### 2.3 예외 처리
|
||||
- 대량 데이터(약 1.2만 건) 처리에서 타임아웃이 발생하지 않도록 `set_time_limit(0)` 적용 상태를 점검.
|
||||
- 동기화 실패는 별도 로그로 남기되, 사용자 로그인/세션 생성/리다이렉트를 차단하지 않도록 `try-catch`로 분리.
|
||||
|
||||
### 2.4 브라우저 판별 개선
|
||||
- 접속 로그 브라우저 판별에서 Whale을 Chrome보다 먼저 체크.
|
||||
- 판별 우선순위 예시: `Whale -> Edge -> Chrome -> Firefox -> Safari`.
|
||||
|
||||
## 3. 통합 처리 시퀀스
|
||||
1. `entry.php` POST 파라미터 검증.
|
||||
2. DB 연결.
|
||||
3. 오늘 동기화 이력 확인(`edu_users_daily_logs`).
|
||||
4. 이력 없음:
|
||||
- ERP API 수집 실행(`get_users_info.php`)
|
||||
- 일일 반영 프로시저 실행(`proc_edu_users_daily`)
|
||||
- 실패 시 로그 후 계속 진행.
|
||||
5. 사용자 조회(`edu_users`).
|
||||
6. 세션 초기화/재생성 후 세션 값 저장.
|
||||
7. 접속 로그 저장(Whale 우선 판별 반영).
|
||||
8. 기존 `intro_flag` 분기 유지:
|
||||
- `1` -> `/edu/skin/index.php`
|
||||
- `0` -> `intro_flag` 업데이트 후 `/edu/skin/intro.php`
|
||||
|
||||
## 4. 유지해야 할 기존 동작
|
||||
- `intro_flag` 기반 리다이렉트 분기 로직 유지.
|
||||
- 사용자 조회 키(`member_id`, `sys_comp_code`) 유지.
|
||||
- 기존 세션 초기화 및 재발급(`session_unset`, `session_regenerate_id`) 유지.
|
||||
|
||||
## 5. 운영 안정화 포인트
|
||||
- 첫 접속자 실행 중 동시 요청(레이스 컨디션) 방지를 위해 DB 레벨 동기화 잠금 전략 검토.
|
||||
- 동기화 스크립트의 표준 출력(`echo`)이 entry 응답 헤더에 영향을 주지 않도록 구조 분리 권장.
|
||||
- 동기화 실패 시 사용자 진입은 허용하되, 알람/로그로 운영자 추적 가능해야 함.
|
||||
|
||||
## 6. 기대 결과
|
||||
- 하루 첫 접속자만 동기화를 수행.
|
||||
- 이후 접속자는 동기화를 건너뛰고 빠르게 진입.
|
||||
- 목표 데이터 최신성은 일일 기준으로 자동 확보.
|
||||
- 사용자 진입 안정성(로그인 차단 방지) 보장.
|
||||
|
||||
## 7. 검증 체크리스트
|
||||
1. 당일 첫 접속 시 동기화 실행 여부 확인.
|
||||
2. 동일 날짜 두 번째 접속부터 동기화 미실행 확인.
|
||||
3. 동기화 실패 상황에서 로그인/리다이렉트 정상 진행 확인.
|
||||
4. Whale 접속 로그가 Chrome이 아닌 Whale로 저장되는지 확인.
|
||||
5. `intro_flag` 분기 동작이 기존과 동일한지 확인.
|
||||
Reference in New Issue
Block a user