[FEAT] 로그인 및 회원가입 플로우 구현#21
Conversation
Core/AuthFlowFeature/HomeFeature/DataUseCase 모듈을 ModulePath, Path, TargetDependency 헬퍼에 등록
회원가입 프로필 이미지용 NSCameraUsageDescription, NSPhotoLibraryUsageDescription과 Kakao Local API용 KAKAO_REST_API_KEY를 InfoPlist 헬퍼와 산출 plist에 반영
Info.plist에 노출된 KAKAO_APP_KEY, KAKAO_REST_API_KEY를 디버그/릴리즈에서 안전하게 읽기 위한 정적 헬퍼 도입
외부 API(Kakao Local) 호출용으로 인터셉터를 거치지 않는 URLEncoding 쿼리 파라미터 task case와 NetworkManager 분기 추가
출발지(역) Station 엔티티와 SearchStationsUseCase, LocationSearchRepositoryProtocol 프로토콜을 정의하고 Domain 모듈 간 의존성을 Entity 기반으로 정리
KakaoLocalEndpoint, 응답 DTO 및 Entity 매핑, LocationSearchRepository 구현체 추가 DataUseCase 모듈에 서울 한정/역명 prefix 필터, anchor 거리 정렬 후처리 SearchStationsUseCaseImpl 구현
UseCase를 Feature 레이어에 노출하기 위한 struct 기반 @DependencyClient와 DependencyValues 진입점 추가
TempLogin → Terms → ProfileInput → DepartureSearch로 이어지는 TCA 기반 회원가입 스택 구성 프로필 이미지 피커 시트, 약관 PDF 뷰어, 출발지 검색 시트와 사진/카메라 권한 안내 등 공통 컴포넌트 추가 회원가입 완료 후 진입할 임시 HomeFeature 모듈 추가
Presentation umbrella가 AuthFlowFeature/HomeFeature를 @_exported로 노출하도록 정리하고 사용되지 않는 Presentation-Info.plist와 Test.swift 제거
토큰 보유 여부로 Auth/Main 모드를 분기하는 RootFeature와 RootView 추가 SearchStationsClient 라이브 인스턴스를 조립하는 SearchStationsFactory 추가 BangawoApp에서 prepareDependencies로 의존성 주입, KAKAO_APP_KEY는 AppEnvironment 통해 조회 사용되지 않는 ContentView 제거
회원가입 플로우용 신규 모듈 추가에 따라 graph.png 재생성
SearchSheetHeader 내부 Color clear의 수직 확장으로 검색필드가 시트 가운데로 밀리던 문제를 fixedSize로 해결하고 닫기 아이콘 상하 호흡 공간을 추가
| import Repository | ||
|
|
||
| enum SearchStationsFactory { | ||
| static func makeClient() -> SearchStationsClient { |
There was a problem hiding this comment.
중요한건 아닌데, 해당 네이밍도 컨벤션을 맞추면 좋을것 같아요.
현재 makeClient는 너무 포괄적이니, 도메인을 포함한 네이밍은 어떠신가요? 예를들면 makeSearchStationsClient 처럼요.
There was a problem hiding this comment.
Factory 객체 네이밍 자체가 특정 Client를 지칭하고 있어서 호출시 네이밍이 중복되는 것 같기도 해요..!
만약 제안해주신 방향대로 한다면, 공통 팩토리에서 각 Client 생성메서드에 따라 네이밍을 설정하는 것이 좋지 않을까용?
duthd3
left a comment
There was a problem hiding this comment.
AuthFlowView와 RootView 플로우를 잘 모르겠습니다 ㅠ
- CoreDependencies / DataUseCase 모듈을 단일 폴더로 통합 - App 진입점 RootFeature 유지, Kakao 로그인 SDK 초기화 결합 - Info.plist에 카메라/사진/Kakao REST 키 + 카카오 로그인 스킴 통합 - Domain/Data/Presentation Project.swift dependencies 합집합 정리
- TempLogin 제거 후 develop의 LoginFeature/LoginView를 AuthFlow 진입 화면으로 사용 - LoginFeature가 SocialAuthClientError를 사용하므로 AuthFlow에 DomainInterface 의존성 추가 - TempLoginView에 있던 PrimaryFilledButton/PrimaryOutlinedButton을 Common으로 분리 (Terms/Profile/Departure에서 공용 사용 중)
- Presentation 엄브렐러의 미사용 의존성 4개 제거 (CoreDependencies, Shared, Entity, DomainInterface) - RootFeature를 PresentationExported에 추가해 Feature 진입점 노출 경로 일원화 - App 진입점에서 import RootFeature를 import Presentation으로 교체
| bundleId: .appBundleID(name: ".CoreDependencies"), | ||
| product: .staticFramework, | ||
| settings: .settings(), | ||
| settings: .settings(), |
There was a problem hiding this comment.
⚪ [P5] Nitpick
settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.
| bundleId: .appBundleID(name: ".DataUseCase"), | ||
| product: .staticFramework, | ||
| settings: .settings(), | ||
| settings: .settings(), |
There was a problem hiding this comment.
⚪ [P5] Nitpick
settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.
| name: "AuthFlowFeature", | ||
| bundleId: .appBundleID(name: ".AuthFlowFeature"), | ||
| product: .staticFramework, | ||
| settings: .settings(), |
There was a problem hiding this comment.
⚪ [P5] Nitpick
settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.
| name: "HomeFeature", | ||
| bundleId: .appBundleID(name: ".HomeFeature"), | ||
| product: .staticFramework, | ||
| settings: .settings(), |
There was a problem hiding this comment.
⚪ [P5] Nitpick
settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.
| name: "RootFeature", | ||
| bundleId: .appBundleID(name: ".RootFeature"), | ||
| product: .staticFramework, | ||
| settings: .settings(), |
There was a problem hiding this comment.
⚪ [P5] Nitpick
settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.
|
{ |
Summary
TempLogin → TermsAgreement → ProfileInput → DepartureSearch → Home)를 TCA 기반으로 구현@DependencyClient컨벤션을 도입해CoreDependencies모듈로 분리, Composition Root(BangawoApp.init)에서만 live 조립RootFeature/AuthFlowFeature/HomeFeaturePresentation 모듈 분리 및 앱 진입점 교체AppEnvironment환경값 헬퍼, 인터셉터 미적용 쿼리 요청 등 인프라 보강docs/conventions/tca-dependency-convention.md) 추가To Reviewer
SearchStationsUseCaseImpl+StationResultProcessor에서 서울 한정 / 역명 prefix / anchor 거리 정렬 순으로 후처리하도록 분리했습니다. 키워드 검색 차용 범위는 이슈 본문 정책을 그대로 따랐습니다.CoreDependencies에 모아두고, Feature는@Dependency만 사용하도록 했습니다. 새 컨벤션 상세는docs/conventions/tca-dependency-convention.md에 정리해 두었습니다.Demo
Test plan
./tuisttool generate후xcodebuild -workspace Bangawo.xcworkspace -scheme Bangawo build빌드 성공x) 버튼 동작 및 "다음" 활성화Closes #19