- 목적: 팀 단위 미팅/스터디/프로젝트 일정 조율
- 방식: 백엔드 서버 없이 URL 기반으로 일정 생성 및 공유
- 범위: 7일 단위 시간표 조율
- 기준 날짜 선택 후 1주 일정 보드 생성
- 사용자별 가능 시간 입력/수정
- 일정 데이터 URL 인코딩 저장 및 링크 공유
- 전체 보기/사용자별 보기 전환
- 시간대별 참여 가능 인원 수 시각화
- 기본 경로:
/lite - 날짜 포함 경로:
/lite/{YYMMDD} - 사용자 일정 포함 경로:
/lite/{YYMMDD}/{이름.인코딩된일정} - 변경 사항은 URL에 반영되며, 공유한 URL만으로 동일한 일정 상태를 재현할 수 있습니다.
- 일정 상태를 고정 길이 비트열(
SCHEDULE_BIT_LENGTH)로 표현합니다. (현재 Lite 기준210bit) - 인코딩은 하이브리드 방식입니다.
- 방식 A(비트셋): 비트열을
BigInt로 변환한 뒤 URL-safe 문자셋A-Z a-z 0-9 - _로 인코딩합니다. - 방식 B(구간 압축):
1이 연속된 구간을(start, length)쌍으로 압축해 저장합니다. - 두 방식 결과를 모두 만든 뒤, 더 짧은 문자열을 자동으로 선택합니다.
- 스케줄이 전부
0인 경우는"0"1글자로 저장합니다. - 사용자별 URL 세그먼트는
{name}.{encodedSchedule}형태로 구성합니다. - 디코딩 시 인코딩 문자열을 다시 비트열로 복원하고,
padStart/slice로 고정 길이 정규화를 수행합니다. - 성과 1: 비트셋 상한은 최대
35 bytes이지만, 연속 구간이 많은 일정은 더 짧아집니다. - 성과 2: 예시(두 구간 일정)
bitset 30자 -> 구간압축 9자까지 단축됩니다. - 성과 3: URL-safe 문자만 사용해 퍼센트 인코딩 오버헤드를 줄이고, 복사/공유 시 안정적으로 유지됩니다.
초반에는 쉬운 사용성 덕분에 빠르게 사용자 유입이 이루어졌지만, 일정을 추가할 때마다 URL이 변경되어 매번 새 링크를 다시 공유해야 하는 불편함이 있었습니다.
- Language: TypeScript
- Framework: React 19
- Build Tool: Vite 6
- Styling: styled-components, SCSS
- Routing: react-router-dom
- State: zustand
- Package Manager: Yarn 4
yarn install
yarn dev- 기본 개발 서버:
http://localhost:5173
yarn dev: 개발 서버 실행yarn build: 프로덕션 빌드yarn preview: 빌드 결과 로컬 미리보기yarn lint: ESLint 검사
<type>/<issue-number>-<short-description>
feat/1234-add-user-login
fix/5678-fix-login-error
release/1.2.0
feat/: 새로운 기능 개발fix/: 버그 수정hotfix/: 긴급 버그 수정release/: 릴리즈 준비chore/: 문서/설정/빌드 등 비기능 작업
feat: 새로운 기능 추가fix: 버그 수정refactor: 리팩토링style: 포맷/스타일 수정test: 테스트 추가/수정docs: 문서 작업chore: 빌드/설정/의존성 작업
src/
├── assets/ # 이미지, 아이콘 등 정적 리소스
├── components/ # 캘린더/온보딩/헤더 등 UI 컴포넌트
├── constants/ # 시간, 알림 등 상수
├── icons/ # SVG 아이콘 컴포넌트
├── layout/ # 메인/라이트 레이아웃
├── pages/ # 라우트 페이지
├── store/ # Zustand 스토어
├── styles/ # 전역 스타일 및 테마
├── types/ # 타입 정의
├── utils/ # URL/날짜 유틸리티
├── App.tsx
└── main.tsx



