이 글의 성격은 무엇인가요?
질문 / 문제 해결
내용을 설명해주세요
codex 을 통해서 위치 정보 수신 하는 앱을 구현해 보고 있는 중입니다.
2번쨰 앱을 만들어 보고 있는데, 앱에서 위치 정보를 수신해 현재 위치를 저장하는 코딩을 해 보는 중인데
codex 가 말하는 아래 의견에 대해, 어떻게 판단 해야 하는 지 알 수 없어서 글을 남깁니다.
의견을 들을 수 있을까요 ?
차이는 명확합니다.
jeju는 브라우저/웹뷰 표준 위치 API를 씁니다:
- billcorea-jeju/src/App.tsx:572에서 navigator.geolocation.getCurrentPosition(…)
- billcorea-jeju/src/App.tsx:573에서 isSecureContext 체크
- 즉, 브라우저 권한창 + OS 위치 서비스 조합으로 동작합니다
반면 membership은 Toss 앱 전용 네이티브 브릿지 API를 씁니다:
- billcorea-membership/src/features/location/locationPermission.ts:5에서 getCurrentLocation.getPermission()
- billcorea-membership/src/features/location/locationPermission.ts:11에서 getCurrentLocation.openPermissionDialog()
- billcorea-membership/src/features/location/locationPermission.ts:34에서 getCurrentLocation(…)
그리고 지금 membership에는 이 가드도 있습니다:
- billcorea-membership/src/MemberCardDetail.tsx:5
- Toss 앱이 아니면 아예 진행하지 않도록 막고 있습니다
즉, 왜 jeju는 되고 membership은 안 되냐면:
- jeju는 브라우저 위치 API라서 AVD/Chrome 환경에서도 동작할 수 있음
- membership은 Toss 앱 런타임의 위치 브릿지라서, 같은 AVD라도 Toss 앱 안에서 돌아야 함
- 브라우저/일반 에뮬레이터 화면에서 보면 membership 쪽은 정상 권한 플로우가 아닙니다
결론:
- AVD 자체가 “무조건 안 된다”는 건 아닙니다
- 하지만 membership은 TossApp 런타임 + OS 위치 서비스 + 에뮬레이터 위치 주입이 모두 맞아야 합니다
- jeju는 그보다 훨씬 관대한 브라우저 geolocation 기반이라 더 잘 되는 것처럼 보일 수 있습니다
지금 상태에서 가장 가능성 높은 원인:
- membership을 Toss 앱이 아닌 브라우저/일반 미리보기로 보고 있음
- Toss 앱 안에서 돌더라도 AVD에 위치가 주입되지 않았거나 위치 서비스가 꺼져 있음
- Toss 브릿지 위치 권한은 잡혔지만 에뮬레이터 위치 공급이 없어 실제 좌표가 안 내려옴
원하면 다음에는 제가 membership에도 jeju처럼 브라우저 fallback을 넣어서, Toss 앱 밖에서는 navigator.geolocation으로라도 위치를 잡게 바꿔드릴 수 있습니다.
appName (선택)
billcorea-jeju( 출시 완료) billcorea-membership (작업중, 테스트 버전은 출시됨)