현재 위치: 01 / 작업 — SwingNote

CASE 02 / APP

SwingNote — AI 골프 스윙 분석 앱

스윙 영상을 서버로 올리지 않고 폰 안에서 분석하고, 코칭 문장을 쓰는 AI는 직접 운영하는 골프 앱입니다.

분야
AI 골프 스윙 분석 앱
플랫폼
iOS · Android(한 코드) · 웹 포털
언어
한/영/일
상태
App Store · Google Play 출시, 운영 중
SwingNote 앱 화면 두 개 — 스윙 측정 지표와 AI 코칭 피드백

요약

무엇
폰으로 찍은 스윙 영상에서 템포·머리 상하 이동·어깨 회전을 재고, AI가 구간별 코칭과 연습 플랜을 써 주며, 연습·라운드 기록까지 한 흐름으로 잇는 앱
맡은 일
기획부터 출시·운영까지 전부 직접
기술
React Native(Expo) · MediaPipe(폰 안 자세 추정) · Spring Boot(WebFlux) · MongoDB · RevenueCat · Paddle · Kubernetes

골프 스윙 분석 앱을 가장 쉽게 만드는 방법은 영상을 서버로 올려 분석하는 것입니다. 다만 그렇게 하면 사용자가 늘수록 영상 전송과 처리 비용이 같이 늘고, 다른 사람의 몸이 찍힌 영상을 서버에 쌓아 두게 됩니다. SwingNote는 처음부터 이 두 가지를 피하는 쪽으로 구조를 정했습니다.

분석은 폰 안에서 합니다

문제
영상을 서버로 보내 분석하면 사용자 수만큼 전송·처리 비용이 늘고, 몸이 찍힌 영상을 서버가 보관하게 됩니다. 넉넉히 무료로 쓰게 하고 싶은 기능인데, 쓸수록 비용이 쌓이는 구조였습니다.
선택
자세 추정 모델(MediaPipe)을 앱에 넣어 폰에서 직접 돌립니다. 서버로 가는 것은 계산이 끝난 지표 숫자뿐이고, 영상은 폰을 떠나지 않습니다. 템포는 백스윙과 다운스윙 시간의 비율로, 머리 움직임은 몸통 길이 대비 비율로 재서, 카메라 거리가 달라도 비교할 수 있게 했습니다.
이유
모델을 앱에 함께 넣었기 때문에 인터넷이 없어도 분석됩니다. 안드로이드 실기기(갤럭시 S10 5G)에서 기내 모드로 분석이 끝나는 것을 확인했고, 3.2초짜리 스윙 영상 분석에 약 5초가 걸렸습니다(2026-08-29). 같은 영상은 몇 번을 넣어도 같은 숫자가 나와야 하는데, 처음에는 기기 부하에 따라 결과가 달라졌습니다. 영상을 재생하면서 프레임을 뽑던 방식을 일정한 간격으로 끊어 읽는 방식으로 바꿔, 같은 영상의 결과가 자릿수까지 일치하게 했습니다. 어깨 회전은 2D 영상으로 정확한 각도를 잴 수 없어서, 각도 대신 같은 각도로 찍은 회차끼리 비교하는 0~100 상대 지수로 보여 줍니다.
SwingNote 측정 지표 화면 — 템포 2.2:1(백스윙 1.57초·다운스윙 0.70초), 머리 상하 이동 몸통 대비 16.2%, 어깨 회전 상대 지수 68

코칭 AI는 직접 운영합니다

문제
측정 숫자를 읽기 쉬운 코칭 문장과 연습 플랜으로 바꾸려면 언어 모델이 필요합니다. 종량제 외부 AI API를 쓰면 호출할 때마다 요금이 나가서, 사용자가 늘수록 적자가 커지고 무료로 열어 둘 수가 없습니다.
선택
공개된 언어 모델을 저희가 운영하는 서버에서 직접 돌려 코칭과 연습 플랜을 만듭니다. 과금도 비용 구조에 맞춰 나눴습니다. 폰 안에서 끝나는 측정은 서버 비용이 거의 들지 않아 무료로 무제한 쓰고, 서버에서 모델이 도는 AI 코칭만 크레딧을 씁니다.
이유
크레딧은 코칭이 실제로 전달됐을 때만 차감합니다. AI 서버가 잠시 응답하지 못하면 요청을 대기열에 넣고, 완료된 것처럼 보이지 않게 했습니다. 돈을 받는 기능에서 "됐다고 표시했는데 실제로는 안 된" 상황이 신뢰를 가장 크게 잃는 순간이기 때문입니다.
SwingNote AI 코칭 화면 — 스윙을 구간별로 나눠 설명한 코칭 피드백

두 스토어 심사를 이렇게 넘었습니다

문제
애플은 핵심 기능인 AI 분석을 실제 기기에서 찍은 영상으로 보여 달라고 요청했습니다(가이드라인 2.1). 찍으려고 보니 iOS에서는 분석이 처음부터 동작하지 않고 있었습니다. 앱 안 웹뷰 설정에 안드로이드에서만 통하는 옵션만 들어 있었던 것입니다. "제3자 AI 서비스에 개인정보를 보내면서 알리지 않는다"(5.1.1(i)·5.1.2(i))는 지적도 함께 받았습니다.
선택
iOS 설정을 고치고, 실제 iOS 기기에서 처음부터 끝까지 눌러 보는 것을 출시 전 점검에 넣었습니다. AI 지적에는 서버로 무엇을 보내는지 항목별로 답했습니다. 외부 AI 서비스를 쓰지 않고 영상도 기기 밖으로 나가지 않는다는 점을 설명하고, 개인정보처리방침에 AI 처리 내용을 보강했습니다. 원인이 확실하지 않은 부분은 추정으로 적지 않았습니다.
이유
안드로이드에서 잘 된다고 iOS에서도 되는 것은 아닙니다. 심사 답변에 틀린 설명을 보내면 그 설명부터 다시 바로잡아야 합니다. 구글 플레이는 개인 계정이라 테스터 12명이 14일 동안 써 보는 비공개 테스트를 먼저 거쳤고, 신청 8일 뒤에 정식 출시 승인을 받았습니다.

결과물

  • 앱iOS·Android, 한 코드(React Native·Expo), 한국어·영어·일본어
  • 폰 안 스윙 분석템포 · 머리 상하 이동 · 어깨 회전(상대 지수), 분석 직후 몸 위에 겹쳐 보이는 골격 표시, 지난 회차와 비교
  • AI 코칭백스윙·전환·임팩트 구간별 코칭과 연습 플랜, 연습·라운드 기록
  • 웹 포털·결제구독 결제(앱 RevenueCat · 웹 Paddle)
  • 서버기능별 7개(인증·스윙·코칭·연습·라운드·미디어·구독) + 게이트웨이, Kubernetes 배포
  • 로그인Google·Apple
  • 출시App Store·Google Play, 지금도 직접 운영

AI나 카메라가 들어가는 앱을 맡기신다면

무엇을 폰에서 하고 무엇을 서버에서 할지부터 정합니다. 이 선택이 출시 뒤 매달 나가는 서버 비용과 개인정보를 다루는 범위를 정합니다.

외부 AI API를 쓸지 직접 운영할지는 예상 사용량과 비용을 함께 계산해 고릅니다. 사용량이 적은 앱이라면 종량제 API가 더 싼 경우도 많습니다.

카메라·영상·AI를 다루는 앱이 심사에서 받는 질문 — 데이터가 어디로 가는지, 실기기에서 실제로 되는지 — 에 답할 자료를 출시 전에 준비합니다.

다음 사례

laonmon.com

이 사이트 · 웹 · 한/영/일

CONTACT

LET'S
TALK.

만들고 싶은 것을 편하게 적어 주세요.

홈페이지·앱 제작 문의, 비즈니스 제휴, 그 밖에 궁금한 점 무엇이든 괜찮습니다. 로고나 원고가 없어도 됩니다. 하시는 일과 필요한 것을 적어 주시면 범위와 기간을 정리해 견적으로 답장드립니다.

급한 질문은 오른쪽 아래 챗봇에 먼저 물어보셔도 됩니다.