Skip to content

refactor: Actor 기반 KeychainManager로 마이그레이션#1

Merged
Roy-wonji merged 4 commits intodevelopfrom
feature/actor-keychain-manager
Mar 3, 2026
Merged

refactor: Actor 기반 KeychainManager로 마이그레이션#1
Roy-wonji merged 4 commits intodevelopfrom
feature/actor-keychain-manager

Conversation

@Roy-wonji
Copy link
Copy Markdown
Contributor

🚀 개요

KeychainManager를 class에서 actor로 마이그레이션하여 Swift Concurrency 패턴을 적용했습니다.

✨ 주요 변경사항

  • Thread Safety 향상: Actor를 사용한 완전한 thread safety 보장
  • Async/Await API 추가: iOS 17+ 타겟에 맞는 모던 API 제공
  • Backward Compatibility: nonisolated 메서드로 기존 코드 호환성 유지
  • Error Handling 개선: 명확한 KeychainError enum으로 에러 처리 강화
  • Performance 향상: Swift Concurrency 활용으로 성능 개선

🔧 기술적 변경점

Before:

public final class KeychainManager: @unchecked Sendable {
    // manual thread safety
}

After:

public actor KeychainManager: KeychainManagingInterface {
    // automatic thread safety with Swift Concurrency
}

📋 API 변화

Legacy (계속 지원):

let token = keychain.accessToken() // 동기

Modern (권장):

let token = await keychain.accessToken() // 비동기

✅ 테스트 계획

  • 기존 동기 API 호환성 확인
  • 새로운 비동기 API 동작 확인
  • Thread safety 검증
  • TCA 통합 테스트
  • Error handling 테스트

🎯 Breaking Changes

없음 - 기존 API는 deprecated 없이 계속 지원됩니다.

📚 관련 이슈

iOS 17+ Swift Concurrency 적용을 위한 아키텍처 개선

- Networking 모듈을 Networks로 변경
- ThirdPartys 모듈 신규 추가
- 불필요한 테스트 파일 삭제 및 테스트 디렉토리 재구성
- 프로젝트 설정 파일 업데이트
✨ Improvements:
- Add accessGroup support for keychain sharing between apps
- Improve service configuration with Bundle identifier
- Enhance memory safety with explicit error handling in nonisolated methods
- Add security attributes (kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
- Refactor query building with baseQuery helper method
- Fix InMemoryKeychainManager thread safety with concurrent queue

🛡️ Security:
- Enhanced keychain access control
- Better error logging for debugging
- Thread-safe InMemoryKeychainManager implementation

🚀 Performance:
- Optimized query building
- Reduced code duplication
- Better async/await patterns
@Roy-wonji Roy-wonji self-assigned this Mar 3, 2026
✨ Improvements:
- Convert from class with complex concurrent queue to simple actor
- Remove @unchecked Sendable and complex DispatchQueue management
- Maintain backward compatibility with nonisolated methods
- Consistent pattern with KeychainManager implementation

🚀 Benefits:
- Automatic thread safety with Swift Concurrency
- Cleaner and simpler implementation
- No complex queue management needed
- Better testability and maintainability

📝 Breaking Changes: None
- Legacy sync API still supported via nonisolated methods
- Test code can use async API for better reliability
@Roy-wonji Roy-wonji added ♻️ 리팩토링 기존 코드 리팩토링 ⚙️ 환경설정 프로젝트 설정 ✨ 기능추가 새로운 기능 추가 🐛 버그 버그 수정 🔧 기타수정 간단한 코드 수정 및 코드 변경 labels Mar 3, 2026
@Roy-wonji Roy-wonji merged commit bdf4e63 into develop Mar 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♻️ 리팩토링 기존 코드 리팩토링 ⚙️ 환경설정 프로젝트 설정 ✨ 기능추가 새로운 기능 추가 🐛 버그 버그 수정 🔧 기타수정 간단한 코드 수정 및 코드 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant