피드로 돌아가기
올리브영 테크블로그Mobile
원문 읽기
하이브리드 앱에 구축하는 iOS 개발자모드
올리브영이 SwiftUI 기반 개발자모드 도입으로 웹뷰 디버깅 요청 0건 달성 및 기능 플래그 관리 자동화
AI 요약
Context
올리브영 iOS 앱은 WebView 기반의 하이브리드 아키텍처로 구성되어 있어 FE와 앱 간 데이터 송수신(WKScriptMessage 기반)을 위해 매일 매일 디버깅 요청이 발생했습니다. 기능 플래그를 사용한 개발/QA 프로세스에서 서버 값을 직접 수정해야 하므로 운영 환경 오동작 리스크와 불필요한 커뮤니케이션 비용이 발생했습니다.
Technical Solution
- SwiftUI 선언형 UI로 개발자모드 구현: 기획에서 배포까지 주기 단축 및 개발 속도 향상을 위해 UIKit 대신 @State, @Binding 기반의 선언형 UI 채택
- 별도 UIWindow에 플로팅 버튼 배치: 개발자모드가 모든 화면 위에 오버레이되도록 구현하여 어디서나 접근 가능하게 설계
- WebView 디버거 기능 집계: URL Editor, 웹 로그 탐색기(WKScriptMessage/Javascript 로그), 웹 스토리지 뷰어, Javascript Console, View Hierarchy 시각화 제공
- Protocol 기반 Flag Provider 분리: FlagProvidable 프로토콜을 정의하고 RemoteFlag(서버), LocalFlag(테스트폰) 구현을 분리하여 추상화
- Dependency Container 패턴 도입: 운영 환경은 RemoteFlag Provider, 개발 환경은 LocalFlag Provider를 Container에 등록하여 코드 변경 없이 환경별 플래그 소비
- 로컬 플래그 런타임 수정: 개발자모드에서 @ObservedObject로 LocalFlag 객체를 구독하여 Toggle로 플래그 값 동적 변경
Impact
- 웹뷰 관련 단순 디버깅 요청: 0건으로 수렴
- 기능 플래그 관리: 서버 값 변경 없이 테스트폰에서만 로컬 플래그 조절 가능
Key Takeaway
하이브리드 앱 환경에서 Protocol과 Dependency Injection 패턴을 사용하여 환경별(운영/개발) Flag Provider를 완전히 분리하면 개발자 생산성 향상과 운영 리스크 원천 차단을 동시에 달성할 수 있습니다. SwiftUI의 높은 생산성은 빈번한 변경 요구사항이 있는 내부 도구 개발에 특히 적합합니다.
실천 포인트
하이브리드 앱 개발팀에서 WKScriptMessage 기반 Web-Native 통신을 디버깅할 때 개발자모드 내 웹 로그 탐색기를 구현하면 Xcode 디버깅과 Safari Web Inspector를 동시에 띄울 필요가 없어져 FE-Native 개발자 간 비동기 커뮤니케이션 비용을 대폭 줄일 수 있습니다. 또한 기능 플래그 관리 시 Protocol 기반 추상화로 RemoteFlag와 LocalFlag를 분리하면 개발/QA 단계에서 서버 영향 없이 런타임에 플래그값을 제어할 수 있으므로 실수에 따른 운영 사고를 원천 차단할 수 있습니다.