AIXLOGIS 로고AIXLOGIS
개발 일지

(WEB_PORTAL) 근무시간 계산 로직을 서버에서 엑셀로 내려주기

#Next.js#xlsx#리포트생성

개요

담당 부서에서 매달 인원별 근무시간을 집계해 정산에 활용할 수 있도록, 기간을 지정하면 근무시간이 계산된 엑셀 파일을 바로 내려받을 수 있는 기능을 추가했습니다.

기술 선택 이유

  • 엑셀 생성 라이브러리는 서버 사이드에서 파일을 만들어 그대로 스트리밍할 수 있는 라이브러리를 선택해, 브라우저에 별도 변환 로직 없이 다운로드만 트리거하면 되도록 구성했습니다.
  • 날짜 계산이 많은 기능이라 날짜 유틸리티 라이브러리를 함께 도입해서, 기간 계산 로직을 직접 구현하지 않도록 했습니다.

핵심 구현 포인트

근무시간 계산 로직

출근·퇴근 기록을 바탕으로 실제 근무시간을 계산할 때, 무급 휴게시간 구간과 겹치는 부분을 제외하고, 정해진 기본 근로시간을 초과하는 부분은 별도로 집계하는 계산 흐름을 서버에 구현했습니다.

체류시간 = 퇴근시각 - 출근시각
휴게공제 = 체류시간과 무급휴게구간의 겹치는 시간
실근로 = 체류시간 - 휴게공제
기본근로 = min(실근로, 기준근로시간)
초과근로 = max(0, 실근로 - 기준근로시간)

설정 가능한 파라미터

휴게시간 구간이나 기준 근로시간은 조직마다, 시점마다 달라질 수 있는 값이라 하드코딩하지 않고, 관리자 화면에서 기간과 함께 입력받아 계산에 반영하도록 만들었습니다.

2-시트 구성

하나의 엑셀 파일 안에 요약 시트와 일자별 상세 시트를 나눠서, 정산 담당자가 전체 합계와 개별 일자 내역을 각각 확인할 수 있도록 구성했습니다.

회고

  • 시간 계산처럼 오차가 바로 정산 금액으로 이어지는 로직은, 계산 기준(휴게시간, 기준근로시간 등)을 코드에 고정하지 않고 화면에서 조정 가능하게 열어두는 편이 이후 정책 변경에 훨씬 유연하게 대응할 수 있다는 걸 확인했습니다.
#Next.js#xlsx#리포트생성

이슈와 관련된 다른 인사이트

DEV
개발 일지

(WEB_PORTAL) 주간 업무 보고 취합 기능과 알림 시스템 구축

DEV
개발 일지

(WEB_PORTAL) 통합 캘린더 구축과 외부 메신저 캘린더 연동

DEV
개발 일지

(WEB_PORTAL) 휴가 신청 폼 UX 개선 — 시간 선택과 다중 날짜 신청