Skip to content

신규 MyPageFeature를 구성합니다.#329

Merged
pinocchio22 merged 9 commits intodevfrom
feat/#326-MLSMyPageFeature
May 7, 2026
Merged

신규 MyPageFeature를 구성합니다.#329
pinocchio22 merged 9 commits intodevfrom
feat/#326-MLSMyPageFeature

Conversation

@pinocchio22
Copy link
Copy Markdown
Contributor

📌 이슈

✅ 작업 사항

1. MLSMyPageFeature SPM 패키지 구조 정비 및 역할 분리

MyPage 영역을 독립 Feature 단위로 관리할 수 있도록 패키지 구조를 정리했습니다. 기존에 분산되어 있던 마이페이지 관련 기능들을 하나의 기능 모듈로 묶고, 내부적으로 Presentation / Domain / Data / Testing / Tests 역할이 명확히 구분되도록 구성했습니다. 이를 통해 마이페이지 기능 변경 시 다른 영역에 미치는 영향을 줄이고, 독립적인 개발 및 유지보수가 가능하도록 개선했습니다.

2. MyPage 기능 세분화 및 화면 책임 분리

하나의 범위로 묶여 있던 MyPage 기능들을 사용자 관점 기준으로 세분화했습니다. 프로필 수정, 캐릭터 정보 설정, 알림 설정, 고객지원(공지사항 / 이벤트 / 패치노트), 로그아웃, 회원탈퇴 등 내부 기능을 각각 독립적인 흐름으로 분리하여 이후 기능 추가 및 수정 시 영향 범위를 최소화할 수 있도록 정리했습니다.

3. Reactor 중심 상태 관리 구조 정리

각 화면별 Reactor의 Action / Mutation / State 흐름을 재정비했습니다. ViewController에 분산되어 있던 UI 상태 제어와 화면 이동 로직을 Reactor 중심으로 이동하여 화면 책임을 줄이고 상태 변화 흐름을 명확하게 관리할 수 있도록 개선했습니다.

  • 프로필 화면: 편집 모드 진입, 로그아웃/탈퇴 Alert 라우팅
  • 캐릭터 설정 화면: 직업/레벨 입력값 검증 및 저장 가능 여부 제어
  • 알림 설정 화면: 권한 상태 조회 및 스위치 상태 반영
  • 마이페이지 메인 화면: 로그인/비로그인 상태에 따른 메뉴 분기 처리

4. UseCase 계층 정리 및 비즈니스 로직 분리

화면에서 직접 처리하던 검증 및 계정 관련 로직을 UseCase 계층으로 이동했습니다. 이를 통해 UI 코드와 비즈니스 로직을 분리하고 재사용성을 높였습니다.

  • CheckNickNameUseCase: 닉네임 길이, 공백, 특수문자 포함 여부 검증
  • CheckValidLevelUseCase: 캐릭터 레벨 유효 범위 검증 (1 ~ 200)
  • FetchProfileUseCase: 프로필 조회 후 직업 ID 기준 직업명 매핑
  • LogoutUseCase: 저장된 access / refresh / fcm token 삭제
  • WithdrawUseCase: 회원탈퇴 요청 후 토큰 정리

5. Repository 계층 책임 명확화

네트워크 요청 및 DTO → Domain 변환 책임을 Repository로 집중시켰습니다. 화면 또는 Reactor에서 API 세부 구현을 알지 않도록 구성하여 의존성을 낮추고 테스트 가능한 구조로 정리했습니다.

Repository:

  • MyPageRepositoryImpl: 프로필 조회, 닉네임 수정, 프로필 이미지 변경, 직업 조회

  • AlarmAPIRepositoryImpl: 진행중 이벤트, 종료 이벤트, 공지사항, 패치노트, 전체 알림 조회 및 읽음 처리

6. Mock 객체 분리 및 Testing 모듈 재사용성 강화

테스트 코드 내부에 흩어져 있던 Mock 객체들을 별도 Testing 모듈로 이동했습니다. 이를 통해 테스트 대상별 Mock 재사용이 가능해졌고, 새로운 테스트 작성 시 반복 구현 비용을 줄일 수 있도록 개선했습니다.

  • MockMyPageRepository
  • MockAlarmRepository
  • MockNotificationPermissionRepository
  • MockNetworkProvider
  • MockInterceptor

7. 단위 테스트 작성 및 회귀 안정성 확보

구조 개선에 그치지 않고 주요 비즈니스 로직과 상태 흐름에 대한 테스트를 함께 작성했습니다. UseCase / Repository / Reactor 단위로 테스트를 분리하여 변경 시 회귀 버그를 빠르게 탐지할 수 있도록 구성했습니다.

UseCase

  • 닉네임 유효성 검사 (빈 문자열 / 길이 제한 / 공백 / 특수문자)
  • 레벨 유효성 검사 (경계값 / nil)
  • 로그아웃 시 토큰 삭제
  • 회원탈퇴 성공 및 토큰 삭제
  • 프로필 조회 성공 / 실패 / 직업명 매핑

Repository

  • 프로필 DTO → Domain 변환
  • 직업 조회 응답 매핑
  • 닉네임 수정 결과 검증
  • 알림 목록 응답 매핑
  • 읽음 처리 성공 / 실패

Reactor

  • 버튼 탭에 따른 Route 이동
  • 입력값 변경 시 상태 업데이트
  • 메뉴 선택 시 로그인 여부 분기
  • 알림 권한 상태 반영
  • 리스트 reset / append 동작 검증

8. 유지보수성 및 확장성 개선

이번 작업의 목적은 단순 기능 추가가 아니라 MyPage 영역의 구조를 장기적으로 유지 가능한 형태로 정비하는 데 있습니다. 이후 프로필 기능 확장, 알림 정책 변경, 신규 메뉴 추가, API 변경 대응 시 기존 구조를 크게 수정하지 않고 대응할 수 있는 기반을 마련했습니다.

endpoint 위치 정립 및 중복코드 제거 필요
테스트코드 작성 필요
Reactor / Repository / UseCase에 대해 테스트 코드 작성
@pinocchio22 pinocchio22 requested a review from dongglehada April 30, 2026 06:59
@pinocchio22 pinocchio22 self-assigned this Apr 30, 2026
@pinocchio22 pinocchio22 added feat 새로운 기능을 추가 fix 버그 수정, 잔잔바리 수정, 병합 시 충돌 해결 refactor 프로덕션 코드 리팩토링, 파일 삭제, 네이밍 수정 및 폴더링 test 테스트 코드 추가 chore 빌드 설정, 프로젝트 설정 등 “로직에 영향 없는” 변경 labels Apr 30, 2026
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

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.

Comment thread MLS/MLSCore/Sources/MLSCore/Extension/String+.swift Outdated
pinocchio22 and others added 5 commits April 30, 2026 16:08
git 모듈 재설정.. 기존 커밋 잘못 찍힌듯..
isOnlyKorean() 메소드 수정
LayoutFacotry 내부 메소드들 static으로 변경
Copy link
Copy Markdown
Member

@dongglehada dongglehada left a comment

Choose a reason for hiding this comment

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

수고 많으셨습니다 :>

diff가 커서 전체를 꼼꼼히 확인하지는 못했지만, 두 가지 사항 확인 부탁드립니다!

  1. Testing 모듈에 Core 관련 Mock들이 포함되어 있는 것을 확인했습니다. 해당 Mock 객체들은 CoreTesting 모듈을 별도로 구성하여 배치하는 것이 모듈 경계를 명확히 하고 재사용성도 높일 수 있을 것 같아요.

  2. 이전에 논의했던 "Repository를 단순 랩핑만 하는 UseCase는 제거하고 Repository를 직접 사용"하는 방향이 이번 PR 전반에 걸쳐 일관되게 적용되었는지도 확인 부탁드릴 수 있을까요? :)

@pinocchio22
Copy link
Copy Markdown
Contributor Author

  1. Testing 모듈에 Core 관

@pinocchio22 pinocchio22 closed this May 7, 2026
@pinocchio22
Copy link
Copy Markdown
Contributor Author

  1. Testing 모듈에 Core 관련 Mock들이 포함되어 있는 것을 확인했습니다. 해당 Mock 객체들은 CoreTesting 모듈을 별도로 구성하여 배치하는 것이 모듈 경계를 명확히 하고 재사용성도 높일 수 있을 것 같아요.
    -> 동의합니다! network 관련된 Mock들이 재사용되는 시점에 Core에도 Testing모듈을 생성하는게 좋아보입니다!

  2. 이전에 논의했던 "Repository를 단순 랩핑만 하는 UseCase는 제거하고 Repository를 직접 사용"하는 방향이 이번 PR 전반에 걸쳐 일관되게 적용되었는지도 확인 부탁드릴 수 있을까요? :)
    -> 네 적용되었습니다. 그에따라 MyPageFeature - domain이 실제로 현저하게 줄어들었습니다!

@pinocchio22 pinocchio22 reopened this May 7, 2026
@dongglehada dongglehada self-requested a review May 7, 2026 06:21
…SMyPageFeature

# Conflicts:
#	MLS/MLS.xcodeproj/project.pbxproj
@pinocchio22 pinocchio22 merged commit 400f508 into dev May 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore 빌드 설정, 프로젝트 설정 등 “로직에 영향 없는” 변경 feat 새로운 기능을 추가 fix 버그 수정, 잔잔바리 수정, 병합 시 충돌 해결 refactor 프로덕션 코드 리팩토링, 파일 삭제, 네이밍 수정 및 폴더링 test 테스트 코드 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants