Skip to content

[FEAT] 로그인 및 회원가입 플로우 구현#21

Merged
duthd3 merged 21 commits into
developfrom
feature/#19
May 12, 2026
Merged

[FEAT] 로그인 및 회원가입 플로우 구현#21
duthd3 merged 21 commits into
developfrom
feature/#19

Conversation

@khyeji98
Copy link
Copy Markdown
Collaborator

@khyeji98 khyeji98 commented May 6, 2026

Summary

  • 회원가입 플로우(TempLogin → TermsAgreement → ProfileInput → DepartureSearch → Home)를 TCA 기반으로 구현
  • Kakao Local 키워드 검색 데이터 레이어 (Network → Data/API → Repository → UseCase) 구축, 서울 한정 + 역명 prefix + anchor 거리 정렬 적용
  • TCA @DependencyClient 컨벤션을 도입해 CoreDependencies 모듈로 분리, Composition Root(BangawoApp.init)에서만 live 조립
  • RootFeature/AuthFlowFeature/HomeFeature Presentation 모듈 분리 및 앱 진입점 교체
  • 카메라/사진 권한 plist, AppEnvironment 환경값 헬퍼, 인터셉터 미적용 쿼리 요청 등 인프라 보강
  • TCA Dependency Client 컨벤션 문서(docs/conventions/tca-dependency-convention.md) 추가

To Reviewer

  • 데이터 레이어는 SearchStationsUseCaseImpl + StationResultProcessor에서 서울 한정 / 역명 prefix / anchor 거리 정렬 순으로 후처리하도록 분리했습니다. 키워드 검색 차용 범위는 이슈 본문 정책을 그대로 따랐습니다.
  • TCA Client는 CoreDependencies에 모아두고, Feature는 @Dependency만 사용하도록 했습니다. 새 컨벤션 상세는 docs/conventions/tca-dependency-convention.md에 정리해 두었습니다.
  • 프로필 이미지 선택 시트는 카메라/갤러리/3D Face placeholder를 같은 그리드에 배치했고, 권한 거절 시 설정 이동 알럿을 노출합니다.

Demo

Screen Recording 2026-05-06 at 2 05 27 AM

Test plan

  • ./tuisttool generatexcodebuild -workspace Bangawo.xcworkspace -scheme Bangawo build 빌드 성공
  • 임시 로그인 → 약관 동의 → 프로필 입력 → 출발지 검색 → Home 플로우 진행
  • 약관 전체 동의 ↔ 개별 동의 동기화 및 "시작하기" 활성화
  • 닉네임 클리어(x) 버튼 동작 및 "다음" 활성화
  • 프로필 이미지 시트에서 카메라/갤러리 선택, 권한 거절 시 설정 이동 알럿 노출
  • 출발지 검색 시트에서 키워드 입력 → 서울/역명 prefix 결과 노출 및 선택 후 placeholder 교체

Closes #19

khyeji98 added 16 commits May 5, 2026 17:31
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로 해결하고
닫기 아이콘 상하 호흡 공간을 추가
@khyeji98 khyeji98 self-assigned this May 6, 2026
@khyeji98 khyeji98 added the feature New feature or request label May 6, 2026
@khyeji98 khyeji98 requested a review from duthd3 May 6, 2026 04:41
import Repository

enum SearchStationsFactory {
static func makeClient() -> SearchStationsClient {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

중요한건 아닌데, 해당 네이밍도 컨벤션을 맞추면 좋을것 같아요.
현재 makeClient는 너무 포괄적이니, 도메인을 포함한 네이밍은 어떠신가요? 예를들면 makeSearchStationsClient 처럼요.

Copy link
Copy Markdown
Collaborator Author

@khyeji98 khyeji98 May 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Factory 객체 네이밍 자체가 특정 Client를 지칭하고 있어서 호출시 네이밍이 중복되는 것 같기도 해요..!
만약 제안해주신 방향대로 한다면, 공통 팩토리에서 각 Client 생성메서드에 따라 네이밍을 설정하는 것이 좋지 않을까용?

Copy link
Copy Markdown
Collaborator

@duthd3 duthd3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AuthFlowView와 RootView 플로우를 잘 모르겠습니다 ㅠ

khyeji98 added 4 commits May 6, 2026 22:35
- 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으로 교체
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전반적으로 매우 우수하고, 모듈 아키텍처 및 TCA 컨벤션을 잘 준수했습니다. App 모듈이 컴포지션 루트 역할을 하는 데 필요한 의존성 선언이 적절하게 이루어졌으며, 데이터 레이어와 도메인 레이어의 책임 분리가 명확합니다. SwiftUI 컴포넌트들도 재사용 가능한 형태로 잘 구조화되어 있습니다. 다만, Tuist 프로젝트 설정 파일 내의 사소한 공백(settings: .settings()) 오타가 발견되었습니다. 이 부분을 수정하면 더욱 완벽해질 것입니다.

bundleId: .appBundleID(name: ".CoreDependencies"),
product: .staticFramework,
settings: .settings(),
settings: .settings(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P5] Nitpick

settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.

Comment thread Projects/Data/DataUseCase/Project.swift Outdated
bundleId: .appBundleID(name: ".DataUseCase"),
product: .staticFramework,
settings: .settings(),
settings: .settings(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P5] Nitpick

settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.

name: "AuthFlowFeature",
bundleId: .appBundleID(name: ".AuthFlowFeature"),
product: .staticFramework,
settings: .settings(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P5] Nitpick

settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.

name: "HomeFeature",
bundleId: .appBundleID(name: ".HomeFeature"),
product: .staticFramework,
settings: .settings(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P5] Nitpick

settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.

name: "RootFeature",
bundleId: .appBundleID(name: ".RootFeature"),
product: .staticFramework,
settings: .settings(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P5] Nitpick

settings: .settings() 부분에 불필요한 공백이 포함되어 있습니다. 일관성을 위해 settings: .settings()로 수정하는 것이 좋습니다.

@github-actions
Copy link
Copy Markdown

{
"summary": "전반적으로 TCA 컨벤션, 모듈 아키텍처 및 Swift 코드 품질 지침을 잘 따르고 있습니다. 특히 @DependencyClient 도입과 prepareDependencies를 통한 의존성 주입 방식이 좋습니다. 그러나 일부 모듈의 명명과 의존성 방향에 대한 개선이 필요하며, TCA Action 처리 방식에 작은 개선점이 있습니다.",
"comments": [
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift",
"line": 53,
"code_snippet": "case DataUseCase",
"body": "🟠 [P2] Major\n\nDomain 레이어에 UseCase가 정의되어 있고, Data 레이어가 이 UseCase 프로토콜을 구현하는 것이 일반적인 클린 아키텍처 구조입니다. DataUseCase라는 모듈명은 Data 레이어 자체의 UseCase를 의미하는 것처럼 보여 혼란을 줄 수 있습니다. Domain/UseCase 프로토콜의 구현체들이 위치하는 모듈이라면, DataImplementations 또는 DataServices와 같이 좀 더 명확한 이름으로 변경하는 것을 고려해볼 수 있습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift",
"line": 80,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift",
"line": 90,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift",
"line": 94,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift",
"line": 95,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift",
"line": 67,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift",
"line": 61,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/InfoPlistDictionary.swift",
"line": 164,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/InfoPlistDictionary.swift",
"line": 206,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/App/Project.swift",
"line": 14,
"code_snippet": ".Domain(implements: .UseCase),",
"body": "🟠 [P2] Major\n\nApp 모듈(Composition Root)은 직접적으로 Domain/UseCase 프로토콜에 의존하기보다는 CoreDependencies를 통해 추상화된 클라이언트를 주입받아야 합니다. CoreDependenciesDomain/UseCase 프로토콜을 사용하고, AppCoreDependencies만 바라보도록 의존성 방향을 유지하는 것이 Clean Architecture 원칙에 더 부합합니다."
},
{
"path": "Projects/App/Project.swift",
"line": 17,
"code_snippet": ".Data(implements: .DataUseCase),",
"body": "🟠 [P2] Major\n\nApp 모듈(Composition Root)이 Data 레이어의 구체적인 구현 모듈인 DataUseCase에 직접 의존하는 것은 Presentation -> Domain <- Data 의존성 방향을 위반합니다. AppCoreDependencies를 통해 필요한 의존성을 주입해야 하며, Data 레이어의 구현체들은 CoreDependencies 내부에서 Domain 프로토콜에 대한 구체적인 인스턴스를 생성하는 데만 사용되어야 합니다.\n\n또한, DataUseCase 모듈명에 대한 이전 피드백을 참고하여, 이 모듈이 Domain/UseCase 프로토콜의 구현체들을 포함한다면 명확한 이름으로 변경을 고려해 주세요."
},
{
"path": "Projects/App/Sources/Application/BangawoApp.swift",
"line": 15,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Application/BangawoApp.swift",
"line": 21,
"code_snippet": " prepareDependencies {",
"body": "TCA prepareDependencies를 사용하여 의존성을 주입하는 방식이 매우 좋습니다. Composition Root에서 모든 라이브 의존성을 조립하는 CoreDependencies 컨벤션에 부합합니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 2,
"code_snippet": "// SearchStationsFactory.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 3,
"code_snippet": "// App",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/App/Sources/Factory/SearchStationsFactory.swift",
"line": 11,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/Base.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/Base.swift",
"line": 2,
"code_snippet": "// Base.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/Base.swift",
"line": 3,
"code_snippet": "// CoreDependencies",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/Base.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/Base.swift",
"line": 5,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 2,
"code_snippet": "// SearchStationsClient.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 3,
"code_snippet": "// CoreDependencies",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 12,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 17,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 27,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Core/CoreDependencies/Sources/SearchStationsClient.swift",
"line": 32,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 2,
"code_snippet": "// KakaoLocalEndpoint.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 3,
"code_snippet": "// API",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 10,
"code_snippet": "import Foundations",
"body": "🔵 [P4] Readability\n\nNetwork/Foundations 모듈에서 제공하는 EndPoint 프로토콜을 사용하기 위해 import Foundations를 사용한 것으로 보입니다. 하지만 Swift의 표준 Foundation 프레임워크와 이름이 같아 혼동을 줄 수 있습니다. 모듈의 명확성을 위해 NetworkFoundations와 같이 모듈의 실제 이름을 사용하는 것이 좋습니다.\n\nsuggestion\nimport NetworkFoundations\n"
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 12,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 15,
"code_snippet": "}",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 16,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 21,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 27,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 33,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/API/Sources/KakaoLocalEndpoint.swift",
"line": 40,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/Base.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/Base.swift",
"line": 2,
"code_snippet": "// Base.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/Base.swift",
"line": 3,
"code_snippet": "// DataUseCase",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/Base.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/Base.swift",
"line": 5,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 2,
"code_snippet": "// SearchStationsUseCaseImpl.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 3,
"code_snippet": "// DataUseCase",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 12,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 15,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 19,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/SearchStationsUseCaseImpl.swift",
"line": 23,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\nguard 문 뒤의 빈 줄은 가독성을 높여주므로 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 2,
"code_snippet": "// StationResultProcessor.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 3,
"code_snippet": "// DataUseCase",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 10,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 15,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\nguard 문 뒤의 빈 줄은 가독성을 높여주므로 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 20,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 26,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 29,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 33,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 38,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 41,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 44,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 47,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 51,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\nguard 문 뒤의 빈 줄은 가독성을 높여주므로 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 62,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 68,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 74,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/DataUseCase/Sources/StationResultProcessor.swift",
"line": 80,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 2,
"code_snippet": "// KakaoLocalSearchResponseDTO.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 3,
"code_snippet": "// Model",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 10,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 13,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 20,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 29,
"code_snippet": "}",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 30,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 33,
"code_snippet": " guard let xCoordinate = Double(x), let yCoordinate = Double(y) else {",
"body": "⚪ [P5] Nitpick\n\nguard 문 뒤의 빈 줄은 가독성을 높여주므로 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Model/Sources/KakaoLocalSearchResponseDTO.swift",
"line": 41,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 2,
"code_snippet": "// LocationSearchRepositoryImpl.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 3,
"code_snippet": "// Repository",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 14,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 18,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Data/Repository/Sources/LocationSearchRepositoryImpl.swift",
"line": 21,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 2,
"code_snippet": "// LocationSearchRepositoryProtocol.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 3,
"code_snippet": "// DataInterface",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/DataInterface/Sources/LocationSearchRepositoryProtocol.swift",
"line": 10,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 2,
"code_snippet": "// Station.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 3,
"code_snippet": "// Entity",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 9,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/Entity/Sources/Station.swift",
"line": 17,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 2,
"code_snippet": "// SearchStationsUseCase.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 3,
"code_snippet": "// UseCase",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 6,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 7,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Domain/UseCase/Sources/SearchStationsUseCase.swift",
"line": 10,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Project.swift",
"line": 1,
"code_snippet": "import Foundation",
"body": "⚪ [P5] Nitpick\n\nTuist 프로젝트 파일에서 Foundation 프레임워크는 일반적으로 명시적인 import가 필요하지 않습니다. 제거하여 의존성을 간결하게 유지하는 것이 좋습니다.\n\nsuggestion\n\n"
},
{
"path": "Projects/Presentation/AuthFlowFeature/Project.swift",
"line": 6,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 2,
"code_snippet": "// AuthFlowFeature.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 3,
"code_snippet": "// Presentation",
"body": "⚪ [P5] Nitpick\n\n파일 헤더에 명시된 모듈 이름이 실제 모듈 이름(AuthFlowFeature)과 다릅니다. 이는 복사/붙여넣기 시 자주 발생하는 실수이므로 수정하는 것이 좋습니다.\n\nsuggestion\n// AuthFlowFeature\n"
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 7,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 8,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 11,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 20,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 25,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 34,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 39,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 44,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 46,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 51,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 57,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 60,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 63,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 67,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 71,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 74,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 77,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowFeature.swift",
"line": 80,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 1,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 2,
"code_snippet": "// AuthFlowView.swift",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 3,
"code_snippet": "// Presentation",
"body": "⚪ [P5] Nitpick\n\n파일 헤더에 명시된 모듈 이름이 실제 모듈 이름(AuthFlowFeature)과 다릅니다. 이는 복사/붙여넣기 시 자주 발생하는 실수이므로 수정하는 것이 좋습니다.\n\nsuggestion\n// AuthFlowFeature\n"
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 4,
"code_snippet": "//",
"body": "⚪ [P5] Nitpick\n\n새 파일 생성 시 자동 생성되는 불필요한 주석 헤더는 제거하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 5,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 8,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 11,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 15,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 23,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드의 간결성을 유지하는 것이 좋습니다."
},
{
"path": "Projects/Presentation/AuthFlowFeature/Sources/AuthFlow/AuthFlowView.swift",
"line": 26,
"code_snippet": "",
"body": "⚪ [P5] Nitpick\n\n불필요한 빈 줄은 제거하여 코드

@duthd3 duthd3 merged commit 0ef3a91 into develop May 12, 2026
1 check failed
@khyeji98 khyeji98 deleted the feature/#19 branch May 12, 2026 18:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants