카카오톡 예약하기, 캘린더 UI 구현 비하인드 스토리

by DD
1개월 전
조회수 44

카카오톡 예약하기 서비스의 FE 개발자가 예약 관리 탭의 캘린더 UI 구현 과정을 회고

타임 블록(Time Block) 형태의 캘린더 UI 구현을 위해 배치 및 확장 알고리즘 설계

이용 시간, 소요 시간을 고려한 예약 블록 배치 전략 및 그래프 자료구조 활용

예외 케이스 발생 및 해결을 통해 UI 완성도(UI Completion)를 높임

타임 블록 캘린더 UI 구현의 핵심 요구사항

본문에서는 카카오톡 예약하기 서비스의 캘린더 UI 구현을 위한 핵심 요구사항을 제시한다.

최대 10개의 예약을 한 시간대에 표시하고, 각 예약은 최대 6시간의 소요 시간을 가질 수 있다.

예약 블록들이 빈 공간 없이 최대한 잘 보이도록 배치해야 한다.

이러한 요구사항을 바탕으로, 개발자는 예약 데이터(Reservation Data)를 효율적으로 시각화하는 알고리즘을 설계해야 했다.

이러한 요구사항은 캘린더 UI 구현의 복잡성을 높이는 주요 원인이 되었다.

예약 블록 배치를 위한 두 가지 핵심 규칙

글에 따르면, 캘린더 UI에서 예약 블록을 효율적으로 배치하기 위해 두 가지 핵심 규칙을 적용했다.

이용 시간이 이른 순서대로 정렬: 판매자가 가장 먼저 확인해야 할 예약을 우선 배치하여 사용자 경험(User Experience)을 개선한다.

같은 시간 내 소요 시간이 긴 순서대로 정렬: 블록 확장을 가로막는 긴 예약 건을 먼저 배치하여 공간 효율성(Space Efficiency)을 높인다.

이러한 규칙들은 캘린더 UI의 가독성을 높이고, 예약 정보를 직관적으로 파악할 수 있도록 돕는다.

그래프 자료구조를 활용한 예약 블록 확장 전략

본문에서는 예약 블록의 확장을 위해 그래프(Graph) 자료구조를 활용한 방법을 설명한다.

각 예약 건을 그래프의 노드로 표현하고, DFS(Depth-First Search) 알고리즘을 통해 각 노드의 깊이(Depth)와 최대 거리(maxLength)를 계산한다.

계산된 값을 기반으로 각 노드의 left와 width 값을 계산하여 블록을 확장한다.

예외 케이스 발생 시, 남은 공간을 찾아 최소 공간만큼 노드를 확장하는 방식으로 문제를 해결한다.

이러한 그래프 기반의 확장 전략은 복잡한 예약 상황에서도 유연한 UI(Flexible UI)를 구현하는 데 기여한다.

예외 케이스 처리 및 UI 완성도 향상

글에서는 캘린더 UI 구현 과정에서 발생한 예외 케이스와 해결 방법을 제시한다.

상위 루트 노드로 인해 하위 노드가 채워지지 않는 경우, 남은 공간을 찾아 노드 확장을 통해 문제를 해결한다.

최소 공간만큼 확장하는 방식을 택하여 UI의 일관성을 유지한다.

이러한 예외 처리 과정을 통해 캘린더 UI의 완성도를 높이고, 다양한 예약 상황에 대응할 수 있도록 한다.

결과적으로, 예외 처리는 UI의 안정성(UI Stability)을 확보하는 데 중요한 역할을 한다.

카카오톡 예약하기에서 그려 본 캘린더