애플리케이션 처리 시스템에서 근무일 기준 마감일 계산하기
애플리케이션 처리 시스템은 정확한 마감일 계산을 위해 달력일이 아닌 근무일을 기준으로 추적해야 합니다. 카운트는 업무 시간 내에 게시된 날부터 시작되며, 업무 시간 외에 게시된 경우 다음 근무일부터 시작됩니다. 달력은 시스템 시작 시 외부 서비스에서 자동으로 로드되며, 올해와 내년 데이터를 매일 확인합니다. 달력이 없을 경우 시스템은 달력일로 대체됩니다.
등록은 게시 즉시 이루어지며, 근무일을 기다리지 않습니다. 예를 들어: 근무일 오후 11시에 게시된 경우 시작일은 다음 근무일로 이동합니다; 같은 날 오전 6시에 게시된 경우, 업무 시작 시간이 이후라면 현재 날짜로 유지됩니다.
카운터 표시 규칙
카운터는 경과한 전체 근무일 수를 표시합니다. 게시 시간과 관계없이, 마감일 시작 날에는 0/N으로 표시됩니다.
- 업무 시간 내 게시일: 다음 날 00:00까지 0/N으로 표시.
- 업무 시간 외 게시: 첫 번째 근무일 00:00까지 0/N으로 표시.
카운터는 전체 근무일이 끝난 후 00:00에 증가합니다. 값이 ≥ N(예: 5/5)일 때 마감을 놓친 것으로 간주됩니다.
논의에서 거부된 대안
- 게시 시점부터 1/N으로 카운터 시작 — 전체 일수 인식이 복잡해짐.
- 근무일 종료 시 증가 — 직원 지연을 무시함.
- 근무일 종료 시 초과 표시 — 오후 5:59와 오후 6:01 사이 직관적이지 않음.
계산 예시
예시 1: 1월 1일(휴일) 게시, 첫 근무일 1월 12일, 마감일 1월 16일(5일). 1월 13일 처리 — 카운터 1/5(전체 일수: 1월 12일만).
예시 2: 처리 기간 2일, 근무일 오전 9:00(월요일) 게시. 월요일: 0/2; 화요일: 1/2; 화요일 자정: 2/2(초과).
예시 3: 동일 작업, 월요일 오후 8:00 게시. 월요일: 0/2; 화요일: 0/2; 수요일: 1/2; 수요일 자정: 2/2.
시간대는 단순화를 위해 서버 시간으로 통일됩니다.
백엔드 구현 세부 사항
- 메모리에 달력 캐싱: 올해 + 내년(오래된 데이터 정리 포함).
- 각 애플리케이션에 대해 카운터 값과 원본 마감일을 데이터베이스에 기록 — 재계산 최소화.
- 마감일 이력 저장: 유형/기간별 구성용 별도 테이블 또는 엔티티 컬럼.
달력 업데이트: 시작 시 API 요청, 매일 00:00.
주요 시나리오 테스트
실시간으로 동작 테스트 또는 데이터베이스/API 시뮬레이션:
- 정상 근무일.
- 휴일.
- 근무일 저녁(업무 시간 후).
- 달력 없음 — 대체 및 자동 업데이트.
- 초과 및 정상 마감일.
- 부하: 여러 해에 걸친 다중 달력.
- 비활성 API 서비스.
핵심 포인트
- 카운트는 업무 시간 내 게시일 또는 다음 근무일부터 시작.
- 카운터: 경과한 전체 일수, 0/N으로 시작.
- 초과: 마감일 후 00:00에 ≥ N.
- 캐싱 및 데이터베이스 기록으로 부하 감소.
- 테스트 경계 사례: 휴일, 저녁 시간, 데이터 누락.
— Editorial Team
아직 댓글이 없습니다.