Skip to content

[Work 36] 위치 권한 조회를 Data 계층으로 이동했습니다. - #14

Merged
snughnu merged 5 commits into
developfrom
WORK-36
Aug 14, 2026
Merged

[Work 36] 위치 권한 조회를 Data 계층으로 이동했습니다.#14
snughnu merged 5 commits into
developfrom
WORK-36

Conversation

@snughnu

@snughnu snughnu commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

JIRA

📝 작업 내용

📌 요약

  • 마이페이지 화면의 위치 권한 조회 로직이 MyPageViewModel(Presentation)에서
    CLLocationManager를 직접 소유하는 구조였습니다.
  • 이 로직을 Data 계층(CoreLocationRepository)으로 옮기고,
    Presentation은 Domain 타입(UseCase)을 통해서만 위치 권한 상태를 알 수 있도록 정리했습니다.
  • 위치 권한 조회 전용 LocationPermissionRepository 프로토콜을 새로 추가했습니다.

🔍 상세

1. Domain 확장

  • LocationPermissionStatus
    • CLAuthorizationStatus에 대응하는 순수 Domain 엔티티를 추가했습니다.
  • LocationPermissionRepository
    • 위치 권한 상태의 조회(authorizationStatus)
      구독(authorizationStatusPublisher)
      요청(requestAuthorization())을 담당하는 프로토콜을 새로 추가했습니다.
  • ObserveLocationPermissionUseCase
    • Repository를 감싸 Presentation에 노출하는 단일 UseCase입니다.

2. Data 구현

  • 기존에는 authorizationStatus를 좌표 조회 내부 분기용으로만 쓰고 있었는데,
    이번에 LocationPermissionRepository를 채택해 권한 상태를 외부에 노출하도록 확장했습니다.
  • 권한 변경 구독은 CurrentValueSubject로 발행하며,
    기존 CLLocationManagerDelegatelocationManagerDidChangeAuthorization을 활용합니다.

3. Presentation 정리

  • MyPageViewModel에서 사용되지 않을 코드를 모두 제거했습니다.
  • 대신 ObserveLocationPermissionUseCase를 생성자로 주입받아,
    최초 상태 조회와 변경 구독(Combine)을 모두 UseCase를 통해 처리합니다.
  • LocationPermissionState(표시 전용 모델)에
    LocationPermissionStatus를 받는 이니셜라이저를 추가했습니다.
  • MyPageViewController에서 CoreLocationRepository()를 조립해 ObserveLocationPermissionUseCase로 감싸 주입합니다.(DI 관련 추후 수정)

💬 리뷰 노트

  • DI 컨테이너가 아직 없어 기존 관례(각 ViewController에서 즉석 조립)를 그대로 따랐습니다.
  • 스크린샷(영상/이미지)는 제외했습니다.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 AI 코드 리뷰 - 아키텍처 관점

이번 PR은 위치 권한 로직을 ViewModel에서 분리해 Data/Domain 계층으로 이동시킨 리팩토링이다. CoreLocationRepository가 LocationPermissionRepository를 추가로 구현하도록 확장하고, ObserveLocationPermissionUseCase를 통해 ViewModel이 CoreLocation에 직접 의존하던 구조를 제거했다. 전반적인 방향은 계층 분리 측면에서 타당하나, 구체 타입을 Presentation 계층에서 직접 조립하는 방식과 UseCase 설계에 구조적 문제가 있다.

Comment thread WhereAreYou/WhereAreYou/Data/CoreLocationRepository.swift

@sangYuLv sangYuLv left a comment

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.

Combine을 잘 활용해주셨네요! (복습했습니다...)
LocationPermissionStatusLocationPermissionState가 다른 계층에 있는 모델인데, 비슷해서 헷갈릴 것 같아요. 다른 방안이 안 떠올라서 넘어가도 좋을 듯 합니다.

위 AI 리뷰에 답변하신 내용도 모두 확인했습니다.
수고 많으셨습니다 🦦

@snughnu
snughnu merged commit 171368b into develop Aug 14, 2026
9 checks passed
@snughnu
snughnu deleted the WORK-36 branch August 14, 2026 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants