신규 MyPageFeature를 구성합니다.#329
Conversation
endpoint 위치 정립 및 중복코드 제거 필요 테스트코드 작성 필요
Reactor / Repository / UseCase에 대해 테스트 코드 작성
There was a problem hiding this comment.
Code Review
This pull request introduces the MLSMyPageFeature module, including its interface, testing support, and a dedicated example application. Key additions include a WebViewController utility, string extensions for date formatting and Korean character validation, and a suite of compositional layout factory methods and reusable views for the design system. Review feedback highlights a logic error in the Korean character validation method, performance concerns regarding DateFormatter instantiation and Auto Layout constraint remakes in reusable views, and a recommendation for consistent use of static methods in the layout factory.
git 모듈 재설정.. 기존 커밋 잘못 찍힌듯..
isOnlyKorean() 메소드 수정 LayoutFacotry 내부 메소드들 static으로 변경
…S-iOS into feat/#326-MLSMyPageFeature
dongglehada
left a comment
There was a problem hiding this comment.
수고 많으셨습니다 :>
diff가 커서 전체를 꼼꼼히 확인하지는 못했지만, 두 가지 사항 확인 부탁드립니다!
-
Testing 모듈에 Core 관련 Mock들이 포함되어 있는 것을 확인했습니다. 해당 Mock 객체들은
CoreTesting모듈을 별도로 구성하여 배치하는 것이 모듈 경계를 명확히 하고 재사용성도 높일 수 있을 것 같아요. -
이전에 논의했던 "Repository를 단순 랩핑만 하는 UseCase는 제거하고 Repository를 직접 사용"하는 방향이 이번 PR 전반에 걸쳐 일관되게 적용되었는지도 확인 부탁드릴 수 있을까요? :)
|
|
…SMyPageFeature # Conflicts: # MLS/MLS.xcodeproj/project.pbxproj
📌 이슈
✅ 작업 사항
1. MLSMyPageFeature SPM 패키지 구조 정비 및 역할 분리
MyPage 영역을 독립 Feature 단위로 관리할 수 있도록 패키지 구조를 정리했습니다. 기존에 분산되어 있던 마이페이지 관련 기능들을 하나의 기능 모듈로 묶고, 내부적으로 Presentation / Domain / Data / Testing / Tests 역할이 명확히 구분되도록 구성했습니다. 이를 통해 마이페이지 기능 변경 시 다른 영역에 미치는 영향을 줄이고, 독립적인 개발 및 유지보수가 가능하도록 개선했습니다.
2. MyPage 기능 세분화 및 화면 책임 분리
하나의 범위로 묶여 있던 MyPage 기능들을 사용자 관점 기준으로 세분화했습니다. 프로필 수정, 캐릭터 정보 설정, 알림 설정, 고객지원(공지사항 / 이벤트 / 패치노트), 로그아웃, 회원탈퇴 등 내부 기능을 각각 독립적인 흐름으로 분리하여 이후 기능 추가 및 수정 시 영향 범위를 최소화할 수 있도록 정리했습니다.
3. Reactor 중심 상태 관리 구조 정리
각 화면별 Reactor의 Action / Mutation / State 흐름을 재정비했습니다. ViewController에 분산되어 있던 UI 상태 제어와 화면 이동 로직을 Reactor 중심으로 이동하여 화면 책임을 줄이고 상태 변화 흐름을 명확하게 관리할 수 있도록 개선했습니다.
4. UseCase 계층 정리 및 비즈니스 로직 분리
화면에서 직접 처리하던 검증 및 계정 관련 로직을 UseCase 계층으로 이동했습니다. 이를 통해 UI 코드와 비즈니스 로직을 분리하고 재사용성을 높였습니다.
5. Repository 계층 책임 명확화
네트워크 요청 및 DTO → Domain 변환 책임을 Repository로 집중시켰습니다. 화면 또는 Reactor에서 API 세부 구현을 알지 않도록 구성하여 의존성을 낮추고 테스트 가능한 구조로 정리했습니다.
Repository:
MyPageRepositoryImpl: 프로필 조회, 닉네임 수정, 프로필 이미지 변경, 직업 조회
AlarmAPIRepositoryImpl: 진행중 이벤트, 종료 이벤트, 공지사항, 패치노트, 전체 알림 조회 및 읽음 처리
6. Mock 객체 분리 및 Testing 모듈 재사용성 강화
테스트 코드 내부에 흩어져 있던 Mock 객체들을 별도 Testing 모듈로 이동했습니다. 이를 통해 테스트 대상별 Mock 재사용이 가능해졌고, 새로운 테스트 작성 시 반복 구현 비용을 줄일 수 있도록 개선했습니다.
7. 단위 테스트 작성 및 회귀 안정성 확보
구조 개선에 그치지 않고 주요 비즈니스 로직과 상태 흐름에 대한 테스트를 함께 작성했습니다. UseCase / Repository / Reactor 단위로 테스트를 분리하여 변경 시 회귀 버그를 빠르게 탐지할 수 있도록 구성했습니다.
UseCase
Repository
Reactor
8. 유지보수성 및 확장성 개선
이번 작업의 목적은 단순 기능 추가가 아니라 MyPage 영역의 구조를 장기적으로 유지 가능한 형태로 정비하는 데 있습니다. 이후 프로필 기능 확장, 알림 정책 변경, 신규 메뉴 추가, API 변경 대응 시 기존 구조를 크게 수정하지 않고 대응할 수 있는 기반을 마련했습니다.