피드로 돌아가기
Dev.toBackend
원문 읽기
단일 Base Unit 기반 정규화를 통한 Time Arithmetic 버그 완전 제거
Time Math Is Harder Than It Looks: 6 Duration Bugs and How to Avoid Them
AI 요약
Context
HH:MM 형태의 문자열이나 Local Timestamp 기반의 연산 시 발생하는 Base-60 진법 오류 및 DST 변수 처리의 한계 분석. 시간 데이터의 비가산적(Non-additive) 표현 방식으로 인한 부정확한 Duration 계산 문제 직면.
Technical Solution
- Base-60 진법 오류 해결을 위한 모든 시간 데이터를 단일 Base Unit(초 또는 분)으로 정규화 후 연산하는 파이프라인 구축
- Midnight Wrap 현상 방지를 위해 종료 시간이 시작 시간보다 앞설 경우 24시간(1,440분)을 가산하는 보정 로직 적용
- 12h/24h 혼용 환경에서 데이터 정합성 확보를 위해 입력 단계에서 24h 포맷으로 Normalization 수행 및 내부 저장소 유지
- DST(Daylight Saving Time)로 인한 시간 왜곡 방지를 위해 Local Time 대신 UTC 또는 Epoch Seconds 기반의 연산 수행
- Epoch 단위 혼용(ms vs sec)으로 인한 1,000배 오차 방지를 위해 명시적인 단위 변환 및 타입 정의 적용
- 급여 계산 등 정밀도가 필요한 도메인을 위해 단순 반올림이 아닌 비즈니스 정책 기반의 Decimal Hours 변환 로직 구현
실천 포인트
- 시간 연산 전 모든 데이터를 단일 Base Unit(Epoch Seconds 등)으로 변환했는가 - Local Timestamp 대신 UTC 기반으로 Duration을 계산하고 있는가 - 날짜 경계(Midnight)를 넘어가는 케이스에 대한 예외 처리 로직이 포함되었는가 - 표시용 포맷팅(Presentation)과 연산용 데이터(Math Layer)가 엄격히 분리되었는가