You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+22-26Lines changed: 22 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,42 +44,42 @@ Poppool은 팝업 스토어 방문을 즐기는 사용자를 위해 제작된
44
44
## 주요 기능
45
45
46
46
### 1. 지도 탐색
47
-
- 네이버 지도 SDK(NMapsMap)를 연동하여 실시간 위치, 마커 클러스터링, 카테고리 기반 필터를 제공하고, 팝업 상세 정보를 캐러셀로 노출합니다.【F:Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapViewController.swift†L1-L199】
48
-
- 지도 영역 이동 시 ViewPort에 맞춘 스토어 데이터를 가져오고, 선택한 마커에 대한 상세 화면으로 네비게이션합니다.【F:Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapViewController.swift†L92-L180】
47
+
- 네이버 지도 SDK(NMapsMap)를 연동하여 실시간 위치, 마커 클러스터링, 카테고리 기반 필터를 제공하고, 팝업 상세 정보를 캐러셀로 노출합니다.
48
+
- 지도 영역 이동 시 ViewPort에 맞춘 스토어 데이터를 가져오고, 선택한 마커에 대한 상세 화면으로 네비게이션합니다.
49
49
50
50
### 2. 팝업 검색 및 필터링
51
-
- ReactorKit 기반 검색 화면에서 최근 검색어, 카테고리 태그, 필터 시트를 제공하며 북마크·페이지네이션을 포함한 풍부한 액션을 정의합니다.【F:Poppool/PresentationLayer/SearchFeature/SearchFeature/PopupSearch/Reactor/PopupSearchReactor.swift†L10-L159】
52
-
- 키워드 기반 팝업 목록을 유스케이스로부터 전달받아 상태를 갱신하고, 프리패칭으로 스크롤 경험을 개선합니다.【F:Poppool/PresentationLayer/SearchFeature/SearchFeature/PopupSearch/Reactor/PopupSearchReactor.swift†L92-L159】
51
+
- ReactorKit 기반 검색 화면에서 최근 검색어, 카테고리 태그, 필터 시트를 제공하며 북마크·페이지네이션을 포함한 풍부한 액션을 정의합니다.
52
+
- 키워드 기반 팝업 목록을 유스케이스로부터 전달받아 상태를 갱신하고, 프리패칭으로 스크롤 경험을 개선합니다.
53
53
54
54
### 3. 도메인 로직과 데이터 접근
55
-
- 지도 관련 유스케이스는 선택한 카테고리와 지도 영역을 받아 저장소에서 데이터를 가져오며, 위치 기반 필터링 로직을 제공합니다.【F:Poppool/DomainLayer/Domain/Domain/UseCaseImpl/MapUseCaseImpl.swift†L8-L70】
56
-
- 데이터 레이어는 Alamofire Provider를 통해 API를 호출하고, 응답 DTO를 도메인 모델로 변환합니다.【F:Poppool/DataLayer/Data/Data/RepositoryImpl/MapRepositoryImpl.swift†L8-L73】【F:Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift†L5-L190】
55
+
- 지도 관련 유스케이스는 선택한 카테고리와 지도 영역을 받아 저장소에서 데이터를 가져오며, 위치 기반 필터링 로직을 제공합니다.
56
+
- 데이터 레이어는 Alamofire Provider를 통해 API를 호출하고, 응답 DTO를 도메인 모델로 변환합니다.
57
57
58
58
### 4. 디자인 시스템
59
-
- 공통 버튼, 레이블, 검색바 등 재사용 가능한 UI 컴포넌트를 정의하여 화면 간 일관성을 유지합니다.【F:Poppool/PresentationLayer/DesignSystem/DesignSystem/Components/PPButton.swift†L5-L132】
59
+
- 공통 버튼, 레이블, 검색바 등 재사용 가능한 UI 컴포넌트를 정의하여 화면 간 일관성을 유지합니다.
60
60
61
61
## 아키텍처
62
62
63
-
-**모듈화된 클린 아키텍처**: Presentation, Domain, Data, Core(Infrastructure) 레이어로 나누어 책임을 분리하였으며, 각 레이어는 Interface 모듈을 통해 서로 통신합니다.【F:Poppool/Poppool/Application/AppDelegate.swift†L4-L108】
-**리액티브 상태 관리**: ReactorKit과 RxSwift를 통해 화면 상태를 선언적으로 기술하고, 사용자 액션을 명확히 분류합니다.【F:Poppool/PresentationLayer/SearchFeature/SearchFeature/PopupSearch/Reactor/PopupSearchReactor.swift†L10-L160】
63
+
-**모듈화된 클린 아키텍처**: Presentation, Domain, Data, Core(Infrastructure) 레이어로 나누어 책임을 분리하였으며, 각 레이어는 Interface 모듈을 통해 서로 통신합니다.
-**Networking**: Alamofire 기반 Provider, TokenInterceptor, RxSwift Observables【F:Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift†L5-L190】
82
-
-**Third-Party Services**: Kakao SDK, Naver Maps 인증 설정을 앱 실행 시 초기화합니다.【F:Poppool/Poppool/Application/AppDelegate.swift†L15-L31】
79
+
-**Reactive**: ReactorKit, RxSwift, RxCocoa
80
+
-**UI/UX**: SnapKit, FloatingPanel, NMapsMap, Custom Design System
81
+
-**Networking**: Alamofire 기반 Provider, TokenInterceptor, RxSwift Observables
82
+
-**Third-Party Services**: Kakao SDK, Naver Maps 인증 설정을 앱 실행 시 초기화합니다.
83
83
84
84
## 시작하기
85
85
@@ -88,16 +88,12 @@ Poppool은 팝업 스토어 방문을 즐기는 사용자를 위해 제작된
88
88
git clone https://github.com/PopPool/iOS.git
89
89
```
90
90
2. 필요한 서브모듈 또는 Swift Package Dependencies를 Xcode에서 Resolve합니다.
91
-
3.`Poppool.xcworkspace`를 열고, `Secrets` 구조체에 필요한 API 키(카카오, 네이버 지도 등)를 설정합니다.【F:Poppool/Poppool/Application/AppDelegate.swift†L22-L31】
91
+
3.`Poppool.xcworkspace`를 열고, `Secrets` 구조체에 필요한 API 키(카카오, 네이버 지도 등)를 설정합니다.
92
92
4. iOS 16 이상 시뮬레이터 혹은 기기에서 빌드 및 실행합니다.
93
93
94
94
## 협업 규칙
95
95
96
-
- 새로운 의존성은 `DIContainer.register`를 통해 등록하고, 필요한 곳에서는 `@Dependency` 래퍼로 주입받습니다.【F:Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DIContainer.swift†L31-L65】【F:Poppool/Poppool/Application/AppDelegate.swift†L40-L109】
97
-
- 화면 상태는 ReactorKit을 통해 Action/Mutation/State 패턴으로 정의하며, RxSwift DisposeBag을 이용해 메모리를 관리합니다.【F:Poppool/PresentationLayer/SearchFeature/SearchFeature/PopupSearch/Reactor/PopupSearchReactor.swift†L10-L159】
98
-
- 네트워크 로깅과 에러 처리는 Provider 레벨에서 공통적으로 처리하고, 도메인에서는 순수 모델만 노출합니다.【F:Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift†L22-L190】【F:Poppool/DataLayer/Data/Data/RepositoryImpl/MapRepositoryImpl.swift†L16-L73】
99
-
100
-
---
101
-
102
-
> 💡 **Tip**: 지도, 검색, 마이페이지 등 주요 기능은 각각 독립적인 모듈로 분리되어 있으니, 기능 추가 시 해당 모듈의 Interface 프로토콜을 우선 확인하면 빠르게 진입할 수 있습니다.
96
+
- 새로운 의존성은 `DIContainer.register`를 통해 등록하고, 필요한 곳에서는 `@Dependency` 래퍼로 주입받습니다.
97
+
- 화면 상태는 ReactorKit을 통해 Action/Mutation/State 패턴으로 정의하며, RxSwift DisposeBag을 이용해 메모리를 관리합니다.
98
+
- 네트워크 로깅과 에러 처리는 Provider 레벨에서 공통적으로 처리하고, 도메인에서는 순수 모델만 노출합니다.
0 commit comments