Sprint 1 - 위치 권한 _ 현재 위치 기반 조회
목표
“위치”가 앱의 입력값으로 들어오고, 그 결과로 “주변 슬롯 리스트”가 안정적으로 갱신된다.
Sprint 1 종료 시점에서 Supabase가 아직 완전히 붙지 않아도 된다.
단, API 레이어는 “실데이터로 바꿔 끼울 수 있게” 분리되어 있어야 한다.
S1-1 위치 권한 요청 플로우 구현
목적
권한 허용/거부/재요청까지 앱이 끊기지 않고 안내한다.
작업
위치 권한 요청 (최초 진입 시)
권한 거부 상태 UI (권한 필요 안내)
설정으로 이동 CTA
권한 재확인 트리거(앱 포그라운드 복귀 시 재검사)
완료 조건
권한 허용 시 다음 티켓(위치 획득)으로 진행
권한 거부 시 홈에서 “권한 필요” 상태를 명확히 표시
설정에서 허용 후 앱으로 복귀하면 자동으로 정상 화면 전환
S1-2 현재 위치 1회 획득 및 store 반영
목적
현재 위치를 가져와 전역 상태로 저장한다.
작업
getCurrentPosition(1회) 구현
location store에 (lat, lng, accuracy, timestamp) 저장
위치 획득 실패 케이스 처리 (timeout, unavailable 등)
완료 조건
홈 화면에서 현재 위치 값이 store에 들어오는 것이 확인됨
실패 시 에러 화면이 아니라 “위치 획득 실패 상태”로 graceful 처리
S1-3 위치 갱신 정책 정의 및 구현
목적
위치를 과하게 갱신하지 않으면서도 “현재”에 충분히 가깝게 유지한다.
권장 정책(초기)
홈 진입 시 1회 갱신
수동 새로고침 시 갱신
포그라운드 복귀 시 (예: 60초 이상 경과했을 때만) 갱신
고주기 watchPosition은 Sprint 1에서 금지(배터리/복잡도 증가)
작업
“마지막 위치 갱신 시각” 관리
refreshLocation() 유틸/액션 작성
지나치게 잦은 요청 방지(간단한 throttle)
완료 조건
연속 새로고침에도 위치 요청이 폭주하지 않음
포그라운드 복귀 시 조건부 갱신이 동작
S1-4 슬롯 조회 API 계약(Contract) 확정
목적
UI와 데이터 소스(Supabase/Mock) 사이의 계약을 고정한다.
작업
Slot 타입 정의(필수 필드만)
slotId
startAt, endAt
benefitText(할인/혜택 요약)
remainingQty
distanceMeters(계산 결과)
merchantSummary(최소 정보)
getNearbySlots(params) 시그니처 확정
center(lat,lng)
radiusMeters
timeWindow(“now”, “next1h”, “today” 등)
category(optional)
완료 조건
- HomeScreen은 이 계약만 의존하고, 구현체(mock/supabase)는 교체 가능
S1-5 거리 계산 유틸 구현 및 단위 표기 규칙 확정
목적
거리 표시의 일관성 확보(정확도보다 일관성).
작업
haversine 기반 거리 계산(또는 라이브러리 1개 채택)
표시 규칙
1000m 미만: “xxx m”
1000m 이상: “x.x km”
거리 반올림 규칙(예: 10m 단위 또는 50m 단위)
완료 조건
동일 좌표 입력에 대해 거리 결과가 안정적으로 동일
SlotCard에서 거리 문자열 표시
S1-6 홈 화면: 위치 기반 슬롯 로딩 플로우 연결
목적
위치 → 슬롯 조회 → 리스트 렌더링까지 한 흐름으로 연결.
작업
홈 진입 시:
권한 체크
위치 획득
슬롯 조회
로딩/빈상태/에러 상태 분기
pull-to-refresh(또는 버튼 새로고침)로 위치+슬롯 갱신
완료 조건
최초 진입에서 자동 로딩이 동작
새로고침 시 리스트가 갱신(데이터가 달라도 UI 안정)
S1-7 검색 반경 기본값 및 조정 UI(초기 최소)
목적
초근거리 원칙을 UI/정책에 반영.
권장 초기값
기본 반경: 1km 또는 2km(도시 밀도에 따라 조정)
반경 조정은 “필터”로 Sprint 2로 넘겨도 되지만,
Sprint 1에서는 최소한 내부 상수로 고정하고 로그로 남긴다.
작업
radiusMeters 기본값 상수화
반경 변경은 아직 UI로 열지 않되, params로는 이미 지원
완료 조건
코드 상에서 반경 변경이 쉬운 구조
슬롯 조회 요청에 반경이 포함됨
S1-8 개발용 더미 데이터 시나리오 세트 작성
목적
백엔드 없이도 QA 가능한 시나리오를 만든다.
작업
주변 슬롯 0개(빈 상태)
5개(정상)
시간 임박 2개 + 수량 임박 1개(표시 테스트)
API 실패 1회(에러 처리 테스트)
완료 조건
개발자가 토글로 시나리오 변경 가능
홈 UI 상태 전부 확인 가능
Sprint 1 완료 정의
다음이 가능해야 한다.
위치 권한 처리(거부/허용/설정 이동 포함)
현재 위치 획득 후 store 반영
위치를 입력으로 주변 슬롯 조회 호출
홈에서 로딩/빈/에러/정상 상태가 명확히 분기
새로고침으로 위치+슬롯 갱신