Skip to content

알림 수신 시간대 설정해보기

실무에서 알림 메시지를 어떤 요일·어떤 시간대에 수신할지 사용자가 직접 설정해야 한다는 요구사항이 있었어요. "평일 업무 시간대에만 알림을 받을게요" 같은 설정이죠. 단순해 보이지만 막상 구현하려고 보면 결정해야 할 사항들이 생각보다 많았어요.

이 글은 요구사항을 해결하면서 알게 된 정보들을 정리해 공유 해보려고 해요. 다루고자 하는 내용은 다음과 같아요.

  • 사용자가 선택한 요일을 어떻게 관리할까?
  • 주의 시작은 어떻게 정해야 할까?
  • DayOfWeek 의 표준은 무엇인가?

1. 사용자가 선택한 요일을 어떻게 관리할까?

당연하게도 설계와 구현은 AI 에이전트에게 맡겼는데 사용자가 선택한 요일을 dayOfWeekMask 라는 필드를 두고 관리하더라고요. 저는 Boolean 배열을 사용해야 하지 않을까 생각했는데 비트마스크로 구현했더라고요. 그러면, 왜 비트마스크를 사용할까요?

비트마스크로 구현하면 매일과 평일 그리고 주말에 대한 표현을 비트 연산으로 빠르고 쉽게 판단할 수 있어요. 물론 비트로 관리하는 게 인간에게 코드 가독성을 주진 않아요.

2. 주의 시작은 어떻게 정해야 할까?

AI 에이전트는 저에게 주의 시작(weekStart)에 대해서 결정을 요구했어요. 그래서 찾아보니 ISO 8601 표준은 월요일을 시작으로 하는데 달력처럼 일부에서는 일요일을 시작으로 하는 걸 볼 수 있어요.

대한민국도 한 주의 시작은 월요일이지만 달력만큼은 일요일 시작으로 유지하고 있어요.

그래서 기술적인 표준과 다르게 일반적인 사용자는 달력 순서에 익숙하다는 생각으로 weekStart를 0으로 두고 나중을 위한 유연한 설계로 남기기로 했어요.

3. DayOfWeek 의 표준은 무엇인가?

하나의 웹 시스템을 구성하는 프론트엔드, 백엔드 그리고 데이터베이스 사이에도 표준은 갈렸어요. PostgreSQL 은 ISO 8601 표준에 따라 월요일을 주의 시작으로 하는 isodow 를 지원하지만 기본값은 일요일을 0으로 하는 dow 를 사용해요.

다만, 자바의 DayOfWeek 은 월요일(1)부터 시작하기 때문에 서비스 로직에서 무언가를 판단할 때에는 기준을 맞추는 게 중요해져요. 실무 프론트엔드에서 사용중인 Day.js 는 기본적으로는 일요일(0) 시작이지만 isoWeekday() 메서드를 통해 월요일(1)을 기준으로 할 수 있도록 지원해요.

사용자가 보게될 결과물

알림 수신 시간대 설정 UI 목업 — 요일 토글과 시작/종료 시각 입력

사용자가 보게 될 결과물은 dayOfWeekMaskstartTime/endTime 두 시각 필드, 그리고 weekStart 가 결합된 토글 UI 로 단순합니다. 이 단순함을 유지하기 위해 어떤 결정들이 오갔는지는 사용자 화면 너머에 남아요.

참고 자료

Released under the MIT License.