개발 일지
(WEB_PORTAL) 주간 업무 보고 취합 기능과 알림 시스템 구축
#Next.js#알림시스템#협업도구
개요
팀원들이 매주 작성하는 업무 보고를 개별 문서로 흩어져 있던 방식에서, 서비스 안에서 작성하고 관리자가 한 화면에서 취합해 볼 수 있는 기능으로 옮겼습니다. 동시에 서비스 전반에서 쓸 수 있는 공용 알림 시스템도 함께 구축했습니다.
핵심 구현 포인트
1. ISO 주차 계산 유틸리티
보고서를 "몇 주차" 단위로 관리하기 위해, 외부 라이브러리 없이 순수 계산 함수로 ISO 주차 규칙(연도 경계 처리 포함)을 직접 구현했습니다. 라이브러리 버전에 따라 주차 계산 결과가 미묘하게 달라지는 이슈를 사전에 피하고 싶었던 이유가 컸습니다.
toWeekId(date): "YYYY-W주차" 형식으로 변환
getCurrentWeekId(): 오늘 기준 현재 주차
getRecentWeekIds(n): 최근 n주 목록
weekIdToLabel(weekId): "2025년 16주차" 같은 사람이 읽기 좋은 라벨로 변환
2. 보고 작성 및 취합 화면
작성 화면에서는 이번 주 진행 상황·이슈·다음 주 계획 세 항목을 입력받고, 직전 2주치 내용을 참고할 수 있도록 옆에 함께 보여줬습니다. 취합 화면에서는 최근 몇 주를 골라, 아직 작성하지 않은 사람을 먼저 눈에 띄게 보여주고, 관리자가 미작성자에게 알림을 보낼 수 있는 버튼을 추가했습니다.
3. 공용 알림 시스템
특정 이벤트(보고 미작성 독촉, 승인 대기 항목 발생 등)가 생기면 알림 테이블에 기록을 남기고, 화면 우측 상단의 알림 벨 아이콘에서 주기적으로 폴링해 미확인 개수를 배지로 보여주도록 했습니다. 알림 종류별로 다른 아이콘을 사용해 한눈에 성격을 구분할 수 있게 했습니다.
회고
- 알림처럼 "여러 기능에서 공통으로 필요한 것"은 각 기능마다 따로 만들지 않고, 처음부터 공용 테이블과 컴포넌트로 설계해두는 편이 이후 새로운 알림 유형을 추가할 때 훨씬 수월했습니다.
- 날짜/주차 계산처럼 겉보기엔 간단해 보이지만 경계 조건(연말·연초)이 까다로운 로직은, 외부 의존성에 기대기보다 직접 작은 순수 함수로 만들어두니 테스트와 디버깅이 오히려 쉬웠습니다.
#Next.js#알림시스템#협업도구