Repository navigation
feat: 게스트 인증 전환 + 소셜 로그인 제거 - #365
Merged
Merged
Conversation
게스트 계정 전환으로 로그인 화면 단계 자체가 사라졌으므로, 더 이상 호출되지 않는 소셜 로그인(카카오·애플) 경로를 전부 걷어낸다. ## 제거 - `Projects/Feature/Auth` 모듈 전체(4타겟: Feature/Interface/Tests/Example) - `SignInUseCase`, `SocialLoginService`, `SocialCredential`, `SignUpForm` - `AuthEndpoint`(/auth/check·/auth/login·/auth/sign-up), `SignUpRequestDTO`, `AuthCheckResponseDTO` - `SocialLoginAdapter`, `KakaoConfig`, `AppCoordinator.showLogin()` - 카카오 SDK 링크(KakaoSDKCommon/Auth/User), Apple Sign In entitlement, 카카오 URL 스킴·LSApplicationQueriesSchemes·KAKAO_APP_KEY 주입, SceneDelegate의 카카오 복귀 URL 핸들링, AppDelegate의 KakaoSDK.initSDK ## 유지 - `Projects/Core/Auth` — 세션·토큰 관리(single-flight reissue, 401 복구)는 게스트 인증이 그대로 쓴다. - `LoginSession`·`LoginResponseDTO` — 게스트 응답 계약이 동일하다. - `Tuist/Package.swift`의 kakao-ios-sdk 선언 — **레거시 앱이 KakaoSDK umbrella를 직접 참조한다**(`Projects/Legacy/Project.swift:94`). V2 타겟에서만 링크를 뺀다. ## 검증 - Debug·Stage·Release 3구성 빌드 성공 - `tuist generate` 성공 — AuthFeature가 그래프에서 빠지고 AtchaLegacy는 유지 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
앞선 커밋에서 프로덕션 코드는 정리했으나 테스트 타겟에 삭제된 타입 참조가 남아 있었다. `xcodebuild build`는 테스트 타겟을 컴파일하지 않으므로 3구성 빌드 성공에 가려져 있었다. - `DefaultSignInAsGuestUseCaseTests`의 `StubGuestAuthRepository`에서 `AuthRepository`가 더 이상 요구하지 않는 소셜 메서드 3개 제거 - `AuthResponseDTOTests.checkResponse_decodesExists` 제거 (`/auth/check` 엔드포인트와 `AuthCheckResponseDTO`가 함께 사라졌다) 검증: 11개 모듈 391 테스트 전부 통과 (Domain 92 / AtchaData 52 / AtchaV2 20 / Home 66 / Search 26 / Settings 12 / DesignSystem 65 / CoreAuth 34 / CoreAlarm 11 / CoreNetwork 8 / CoreStorage 5) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
무엇을 고치나
앱 시작 시 스플래시에서 멈추고 타임아웃되던 문제를 해결합니다. 원인은 두 겹이었습니다.
겉: 앱이 바라보던 호스트가 둘 다 죽어 있었습니다.
atcha.online(LIVE)atcha.p-e.kr(DEV·STAGE)속 (진짜 원인): 서버가 소셜 로그인 → 게스트 계정 기반으로 옮겨갔고, 모든 경로에
/api접두어가 붙었습니다. 앱이 호출하던 엔드포인트는 하나도 존재하지 않는 상태였습니다.주요 변경
1. 부트스트랩을 게스트 인증으로
토큰이 없으면
POST /auth/guest {deviceId, fcmToken?}로 JWT를 받아 곧장 홈으로 갑니다. 로그인 화면 단계가 사라졌습니다.토큰 만료도 로그인 화면으로 튕기지 않습니다 —
reissue실패 시 같은deviceId로/auth/guest를 다시 불러 같은 계정이 조용히 돌아옵니다 (서버 계약).2.
deviceId는 IDFV를 키체인에 고정IDFV는 같은 개발사 앱을 전부 삭제 후 재설치하면 값이 바뀝니다. 게스트 모델에서
deviceId는 계정의 유일한 신원이라, 그대로 쓰면 재설치 시 기존 계정의 알림 설정·검색 이력에 영구히 접근 불가가 됩니다.→ 최초 1회 읽은 값을 키체인에 고정합니다(앱 삭제 후에도 잔존). 기존
KeychainStore/TokenStore패턴 재사용.3.
/api접두어는 base URL에서만URLSessionNetworkClient가baseURL.appendingPathComponent(path)로 조립하므로, base URL에/api를 두면 기존 15개 Endpoint의 path를 한 줄도 고치지 않고 새 체계에 맞습니다. 서버가 접두어를 또 바꾸면AppEnvironment한 줄만 고치면 됩니다.4. 네트워크 진단 (재발 방지)
원인 추적에 시간이 걸린 이유는 앱이 아무것도 말해주지 않았기 때문입니다:
Core/Network·Core/Auth·Data전체에 로깅 0건URLError가 전부.transport로 뭉개져 타임아웃(-1001)·연결 불가(-1004)·TLS 실패(-1200) 구분 불가→
NetworkError가 URLError 코드를 노출하고, DEBUG에서com.atcha.network에메서드·URL·상태코드·소요시간을 남깁니다. Authorization과 본문은 토큰이 실리므로 로깅하지 않습니다.부트스트랩이 비동기가 되면서, 기존에 호출처가 없던 데드코드였던
BootstrapFailureMessage와SplashViewController.showRetry가 비로소 제 역할을 합니다.소셜 로그인은 보존했습니다
AuthFeature·SignInUseCase·SocialLoginAdapter·AppCoordinator.showLogin()은 호출처만 끊고 남겨뒀습니다(@available(deprecated)표시). 계정 승격이 도입되면 그대로 진입점이 됩니다.검증
POST /api/auth/guest → 200, 홈 진입실제 실행 로그:
서버 계약 확인 (curl 직접):
deviceId두 번 호출 → 둘 다 동일id(같은 계정 복귀)deviceId→ 별도 계정{responseCode, result:{id, accessToken, refreshToken}}→ 기존LoginResponseDTO그대로 디코딩별도 커밋: tuist 4.209.0
mise.toml은 4.202.0을 고정하고 있었으나/usr/local/bin/tuist(3.33.3)가 PATH에서 앞서,tuist generate가 매니페스트 컴파일 단계에서 실패하던 상태였습니다. 우회법을 CLAUDE.md에 기록했습니다.이 PR 범위 밖
GET /api/routes/v3/guest/last-routes/stream) — 현재 네트워크 레이어가 단발 요청 전용이라 스트리밍 지원 추가가 필요. 서버 문서 두 곳의 경로가 갈려 백엔드 확인 필요./api/locations/histories) — 현재 UserDefaults 로컬.PUT /api/members/me) — 현재 no-op인UnconfirmedPushTokenRepository한 곳만 교체하면 됩니다./bus-arrival,/subway-arrival) — 신규 기능.🤖 Generated with Claude Code
추가: 소셜 로그인 전면 제거 (커밋
d9bb9ec)게스트 계정 전환으로 로그인 화면 단계 자체가 사라져, 호출처가 없어진 소셜 경로를 전부 걷어냈습니다.
제거:
Projects/Feature/Auth모듈 전체(4타겟) ·SignInUseCase/SocialLoginService/SocialCredential/SignUpForm·AuthEndpoint(/auth/check·/auth/login·/auth/sign-up) ·SocialLoginAdapter/KakaoConfig/showLogin()· 카카오 SDK 링크 · Apple Sign In entitlement · 카카오 URL 스킴·TUIST_KAKAO_APP_KEY유지:
Core/Auth(세션·토큰 관리는 게스트가 그대로 사용) ·LoginSession/LoginResponseDTO(응답 계약 동일) ·Tuist/Package.swift의 kakao 패키지 선언 — 레거시 앱이KakaoSDKumbrella를 직접 참조하므로(Projects/Legacy/Project.swift:94) V2 타겟에서만 링크를 뺐습니다검증: 11개 모듈 391 테스트 통과 (Domain 92 / AtchaData 53 / AtchaV2 20 / Home 66 / Search 26 / Settings 12 / DesignSystem 65 / CoreAuth 34 / CoreAlarm 11 / CoreNetwork 8 / CoreStorage 5)