Files
edu/daily_sync_integration_plan.md

3.3 KiB

배움터 인사 정보 일일 자동 동기화 로직 통합 및 최적화

작성일: 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 분기 동작이 기존과 동일한지 확인.