[HabitStack 개발 일지] - 시간 제한 기능 구현 및 GitHub Pages 배포 완료
HabitStack 프로젝트, 시간 제한 기능 구현 및 GitHub Pages 배포 완료!
HabitStack 프로젝트의 핵심 기능인 시간 제한 시스템이 성공적으로 구현되었습니다. 이번 업데이트를 통해 특별 습관 블록이 실제 시간 주기에 맞춰 관리되도록 개선되었으며, GitHub Pages를 통한 배포까지 완료되었습니다.
✅ 프로젝트 주요 구현 내용
- 시간 제한 기능 핵심 구현:
- 특별 블록(“하루 시작하기”, “새로운 주 시작하기”)에 실제 시간 기반 제한 로직을 적용했습니다.
- 매일 반복 블록은 자정(00:00) 이후에만, 매주 반복 블록은 다음 주 월요일에만 재활성화되도록 구현했습니다.
Habit인터페이스에lastCompletedAt필드를 추가하여 각 특별 블록의 마지막 완료 시간을 정확히 추적합니다.
- 시간 검증 유틸리티 시스템 구축:
src/utils/timeUtils.ts파일을 새로 생성하여 시간 관련 로직을 체계적으로 관리합니다.canCompleteSpecialHabit(),getNextAvailableTime(),isSameDay(),getNextMonday()등의 함수를 통해 정확한 시간 검증을 수행합니다.- JavaScript Date 객체를 활용한 정밀한 시간 계산 로직을 구현했습니다.
- 사용자 인터페이스 개선:
- 비활성화된 특별 블록을 시각적으로 구분할 수 있도록 회색 처리와 “🔒 대기중” 표시를 추가했습니다.
- 완료하기 버튼도 특별 블록의 활성화 상태에 따라 자동으로 비활성화되도록 개선했습니다.
- 사용자가 제한된 블록을 클릭할 때 다음 활성화 시간을 포함한 명확한 안내 메시지를 제공합니다.
- GitHub Pages 배포 시스템 구축:
gh-pages패키지를 활용한 자동 배포 시스템을 구축했습니다.- Vite 설정에
base: '/HabitStack/'경로를 추가하여 GitHub Pages 환경에 최적화했습니다. package.json에predeploy와deploy스크립트를 추가하여npm run deploy명령어로 원클릭 배포가 가능하도록 구성했습니다.
- 데이터 구조 확장:
- 기존
Habit인터페이스에lastCompletedAt?: string필드를 추가하여 시간 추적 기능을 지원합니다. - 기존 localStorage 데이터와의 호환성을 유지하면서 새로운 기능을 안전하게 추가했습니다.
- 타입 안전성을 보장하며 점진적 업그레이드가 가능하도록 설계했습니다.
- 기존
- 완료 처리 로직 개선:
- 특별 블록 완료 시 현재 시간을 ISO 문자열(
new Date().toISOString())로 저장하여 정확한 시간 추적을 수행합니다. - 일반 블록과 특별 블록의 완료 처리를 구분하여 각각에 적합한 로직을 적용합니다.
- 시간 검증 실패 시 사용자에게 친화적인 알림 메시지를 표시합니다.
- 특별 블록 완료 시 현재 시간을 ISO 문자열(
💡 기술적 도전과 해결
- 시간 계산의 복잡성: JavaScript Date 객체를 사용한 정확한 자정 계산과 다음 월요일 계산 로직을 구현하는 데 어려움이 있었으나, 체계적인 유틸리티 함수 분리로 해결했습니다.
- UI 상태 동기화: 시간 제한 상태와 UI 컴포넌트의 활성화 상태를 실시간으로 동기화하는 시스템을 구축하기 위해 React의 상태 관리 패턴을 활용했습니다.
- 사용자 경험 최적화: 제한 기능이 사용자에게 혼란을 주지 않도록 명확한 시각적 피드백(비활성화 스타일링, 대기중 텍스트, 버튼 비활성화)과 정보 제공 시스템을 설계했습니다.
🚀 배포 완료된 기능 목록
현재 GitHub Pages에 배포된 HabitStack 애플리케이션은 다음과 같은 완전한 기능을 제공합니다:
- 시간 기반 습관 관리: 특별 블록의 실제 시간 주기에 맞춘 활성화/비활성화 시스템
- 동적 색상 시스템: HSL 기반 무지개 스펙트럼 자동 분배 (3개 = 빨초파, 7개 = 빨주노초파남보)
- 물리학 기반 애니메이션: 자연스러운 블록 움직임과 완료/재등장/드롭 전환 효과
- 반복 타입 선택: 매일/매주 반복 옵션과 그에 따른 자동 특별 블록 생성
- 데이터 영속성: localStorage를 통한 자동 저장 및 복원 (사용자별 개별 데이터)
- 반응형 디자인: Bootstrap 기반 모바일 및 데스크톱 환경 완전 지원
🎓 배운 점
이번 개발 과정에서 JavaScript의 Date 객체를 활용한 복잡한 시간 로직 구현, React 환경에서의 조건부 렌더링과 상태 관리의 고급 패턴, 그리고 Vite와 GitHub Pages를 활용한 효율적인 정적 사이트 배포 워크플로우를 깊이 있게 학습할 수 있었습니다. 특히 사용자 중심 설계의 중요성과 제한 기능을 사용자 친화적으로 구현하는 방법론을 체득했습니다.
HabitStack 프로젝트는 이제 단순한 습관 추적 도구를 넘어서 실제 생활 패턴과 시간의 흐름에 맞춘 의미 있는 습관 관리 애플리케이션으로 완성되었습니다. 사용자는 실제 시간 제약 속에서 자연스럽게 건전한 습관 형성 리듬을 만들어갈 수 있게 되었습니다.