iOS에서 솔로 개발자로 멀티스포츠 AI 코치를 만든 방법 — 실제로 중요한 아키텍처 결정
Source: Dev.to
대부분의 AI 앱 구축 관련 글은 모델에 초점을 맞춥니다. 이 글은 모델 주변의 모든 것—제품이 실제로 출시되고, 실제로 성능을 내며, 실제로 사용자를 유지할 수 있게 만든 아키텍처 결정에 초점을 맞춥니다.
SportsReflector는 22가지 스포츠와 모든 일반적인 체육관 운동에 대한 운동 형태를 분석하는 AI 코칭 앱입니다. 디바이스 내에서 포즈 추정을 사용해 비디오에서 신체 랜드마크를 추출하고, 스포츠별 벤치마크와 비교해 생체역학적 지표를 계산한 뒤, 0‑100 형태 점수와 교정 코칭 피드백을 제공합니다. 저는 이 앱을 혼자 만들었습니다.
Decision 1: On‑Device vs Cloud Inference
온‑디바이스 추론을 선택하면 포즈 추정이 로컬에서 실행되어 지연 시간이 사라지고, 사용자 프라이버시가 보호되며, 앱을 오프라인에서도 사용할 수 있습니다. 클라우드 추론은 네트워크 지연을 초래하고 비용과 복잡성을 높이는 백엔드 인프라가 필요합니다.
Decision 2: Sport‑Specific vs Generic Analysis
Biomechanical benchmark definitions
각 스포츠마다 고유한 생체역학 벤치마크가 있습니다. 새로운 스포츠를 추가한다는 것은 포즈 추정 모델을 다시 학습시키는 것이 아니라 새로운 분석 모듈을 작성한다는 의미입니다. 따라서 23번째 스포츠는 점진적인 엔지니어링 작업이며, 첫 번째 스포츠를 구현하는 것이 가장 어려운 부분—모든 미래 스포츠가 연결될 모듈 인터페이스를 설계하는 것이었습니다.
Decision 3: Synchronous vs Asynchronous Analysis
분석을 비동기적으로 실행하면 UI가 반응성을 유지합니다. 비디오 프레임은 백그라운드에서 처리되는 동안 사용자는 앱을 계속 조작할 수 있어, 순수 동기식 파이프라인에서 발생할 UI 정지를 방지합니다.
Decision 4: Monolithic vs Modular Feature Architecture
SportsReflector는 비디오 분석, AR 워크아웃, AI 트레이닝 파트너, 워크아웃 플래너, 스포츠 플래너, 드릴 라이브러리, 칼로리 트래커, 코치 대시보드 등 다양한 기능을 포함합니다. 이를 모놀리식으로 구축하면 초기 개발은 빠를 수 있지만, 반복 속도에 치명적인 영향을 미칩니다.
해결책은 각 기능이 자체 모듈에 존재하고 중앙 스토어를 통해 통신하는 모듈식 아키텍처이며, 직접적인 의존성을 피합니다.
Video Analysis Module
- 비디오 프레임을 받아 포즈 데이터와 형태 점수를 반환합니다.
다른 모듈들은 비디오 분석 코드를 직접 가져오지 않고 공유 데이터를 읽습니다. 예를 들어, 워크아웃 플래너는 형태 점수를 읽고, 칼로리 트래커는 트레이닝 로드를 읽지만 둘 다 비디오 분석 모듈을 직접 임포트하지 않습니다.
Decision 5: Launch Time Optimization
첫 프레임이 렌더링된 후에 모든 네트워크 호출을 미루면 콜드 런치 시간이 500 ms 이하로 감소합니다. 사용자는 앱을 “즉시” 실행되는 것으로 인식합니다. 빠른 런치는 더 자주 열리게 만들고, 참여 지표와 App Store 순위 향상으로 이어지는 실제적인 유지 효과를 가져옵니다.
UI
UI는 SwiftUI로 구축했으며, 필요에 따라 카메라와 AR 뷰를 위해 UIKit 브리지를 사용했습니다.
Availability
SportsReflector는 iOS App Store에서 제공됩니다. 포즈 추정, Core ML, ARKit에 관심이 있거나 의견을 교환하고 싶다면 언제든지 연락 주세요—이 분야에서 활동하는 다른 개발자들과 이야기를 나누는 것을 언제나 환영합니다.