Skip to content

[refactor] 앱 버전별 히든 프로필 제출 로직 분리 (Strategy Pattern)#370

Merged
sgo722 merged 3 commits intodevelopfrom
feat/#369
Dec 17, 2025
Merged

[refactor] 앱 버전별 히든 프로필 제출 로직 분리 (Strategy Pattern)#370
sgo722 merged 3 commits intodevelopfrom
feat/#369

Conversation

@sgo722
Copy link
Contributor

@sgo722 sgo722 commented Dec 17, 2025

PR의 목적이 무엇인가요?

본인인증 기능 추가로 인한 앱 버전 차이를 대응하기 위해 Strategy Pattern을 활용한 하위호환성 구현.
iOS와 Android의 릴리즈 시점이 다르더라도 구버전(< 1.2.0)과 신규버전(>= 1.2.0) 모두 정상 동작하도록 개선.

이슈 ID는 무엇인가요?

설명

📋 변경 사항

1. 신규 생성 파일 (프로덕션 코드)

  • SignupStrategy.kt: 회원가입 히든 이미지 처리 전략 인터페이스
  • SignupStrategyResolver.kt: X-App-Version 헤더 기반 전략 선택 로직
  • PreVerificationStrategy.kt: 본인인증 기능 추가 전 전략 (< 1.2.0)
  • PostVerificationStrategy.kt: 본인인증 기능 추가 후 전략 (>= 1.2.0)

2. 신규 생성 파일 (테스트 코드)

  • SignupStrategyResolverTest.kt: 전략 선택 로직 테스트(10개 테스트)
    • 다양한 앱 버전에 대한 전략 선택 검증
    • 경계값 테스트 (1.2.0, 1.1.9 등)
    • 예외 케이스 처리 (null, 잘못된 형식 등)
  • PreVerificationStrategyTest.kt: 구버전 전략 테스트 (1개 테스트)
    • 회원 상태별 동작 검증
  • PostVerificationStrategyTest.kt: 신규버전 전략 테스트 (3개 테스트)
    • 히든 이미지 등록만 수행
    • 상태 변경 없음 검증
    • 다양한 회원 상태에서 일관된 동작 검증

3. 수정된 파일

  • SignupController.kt:
    • X-App-Version 헤더 추가
    • SignupStrategyResolver를 통한 전략 패턴 적용
    • registerHiddenImages() 메서드에서 전략 선택 및 실행
  • SignupControllerSwagger.kt:
    • API 문서에 앱 버전별 동작 방식 명시
    • X-App-Version 파라미터 설명 추가

🔄 동작 흐름

클라이언트 요청 (X-App-Version 헤더 포함)
    ↓
SignupController.registerHiddenImages()
    ↓
SignupStrategyResolver.resolveStrategy(appVersion)
    ↓
    ├─ appVersion >= 1.2.0 → PostVerificationStrategy
    │   └─ SignupService.registerHiddenImages() 호출
    │       (히든 이미지만 등록, 이후 본인인증 이미지 제출 필요)
    │
    └─ appVersion < 1.2.0 or null → PreVerificationStrategy
        └─ SignupService.registerHiddenImages() 호출
            └─ REJECT 상태인 경우 → PENDING으로 전환

🎯 핵심 설계 결정

  1. Strategy Pattern 선택 이유

    • URL 버전 관리(v1, v2, v3...)는 버전이 증가할수록 컨트롤러 수가 폭발적으로 증가
    • 헤더 기반 버전 관리로 동일 엔드포인트에서 버전별 처리 가능
    • 신규 버전 추가 시 새로운 Strategy만 구현하면 되어 확장성 우수
  2. SignupService 변경 최소화

    • 기존 registerHiddenImages() 메서드는 그대로 유지
    • 상태 전환 로직만 Strategy에서 처리하여 기존 코드 영향 최소화
  3. 하위호환성 보장

    • X-App-Version 헤더가 없는 요청은 구버전으로 간주
    • 버전 파싱 실패 시에도 안전하게 구버전 로직 적용

✅ 테스트 결과

전체 테스트: 14개 통과 (실패 0, 에러 0)

SignupStrategyResolverTest - 10개 테스트 ✅

  • ✅ 앱 버전이 1.2.0 이상이면 PostVerificationStrategy를 반환한다
  • ✅ 앱 버전이 1.5.0이면 PostVerificationStrategy를 반환한다
  • ✅ 앱 버전이 2.0.0이면 PostVerificationStrategy를 반환한다
  • ✅ 앱 버전이 1.1.9이면 PreVerificationStrategy를 반환한다
  • ✅ 앱 버전이 1.0.0이면 PreVerificationStrategy를 반환한다
  • ✅ 앱 버전이 null이면 PreVerificationStrategy를 반환한다 (하위호환)
  • ✅ 앱 버전 파싱 실패 시 PreVerificationStrategy를 반환한다
  • ✅ 앱 버전이 빈 문자열이면 PreVerificationStrategy를 반환한다
  • ✅ 앱 버전이 1.2 형식이면 정상 파싱하여 PostVerificationStrategy를 반환한다
  • ✅ 앱 버전이 1.1 형식이면 정상 파싱하여 PreVerificationStrategy를 반환한다

PreVerificationStrategyTest - 1개 테스트 ✅

  • ✅ PERSONALITY_COMPLETED 상태에서는 히든 이미지만 등록하고 상태를 변경하지 않는다

PostVerificationStrategyTest - 3개 테스트 ✅

  • ✅ 히든 이미지를 등록한다
  • ✅ 회원 상태를 변경하지 않는다
  • ✅ 다양한 회원 상태에서 모두 동일하게 동작한다

✅ 빌드 결과

컴파일 에러 및 테스트 실패 없이 정상 완료.

질문 혹은 공유 사항 (Optional)

향후 고려사항

  1. 버전 관리 기준 명확화

    • 현재는 1.2.0을 기준으로 하드코딩되어 있음
    • 향후 버전 기준이 자주 변경될 경우 application.yml로 외부화 고려
  2. 신규버전에서의 재심사 플로우

    • 현재는 구버전에서만 /v1/signup/hidden/images로 재심사 가능
    • 신규버전은 /v1/profile/review/resubmit API 사용 필요
    • 해당 API가 아직 구현되지 않았다면 추가 작업 필요
  3. 모니터링

    • X-App-Version 헤더 분포 모니터링으로 구버전 사용자 추이 파악
    • 구버전 사용자가 충분히 감소하면 PreVerificationStrategy 제거 고려

@sgo722 sgo722 merged commit 47d9c58 into develop Dec 17, 2025
1 check passed
sgo722 added a commit that referenced this pull request Dec 17, 2025
[feat] 하위버전 알람가도록 수정, 히든이미지 제출 시 PENDING바뀌도록 수정
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant