이 글 요약
- 코딩을 시작한 목표는 "앱스토어에 내 앱 하나"였다. 몇 년 만에 운동 기록 앱으로 그 목표를 꺼냈다
- 5년 동안 쓴 운동 앱 Strong은 불편하지 않았다. 머신 브랜드를 못 고르는 것 하나만 빼고
- 5월 25일 첫 커밋부터 지금까지, 코드는 거의 AI 에이전트가 쓰고 나는 폰으로 지시했다
운동 기록 앱 PowerUp을 앱스토어 심사에 제출했다. 5월 말에 시작해 다섯 달 가까이 걸렸다. 맥북 서버 탈출기에서 서버를 옮긴 앱 두 개 중 하나가 이 앱이다.
이 시리즈는 PowerUp을 만든 기록이다. 왜 만들었는지, 무엇을 만들었다가 지웠는지, 헬스장에서 어떤 버그를 만났는지, 앱스토어에 내기까지 무엇을 했는지 차례로 정리한다. 서버와 배포 이야기는 탈출기에서 다뤘으니 여기서는 앱 이야기만 한다. 1편은 출발점이다. 이미 잘 쓰던 앱이 있었는데 왜 굳이 만들었는가.
코딩을 시작한 이유는 앱스토어였다
코딩을 시작할 때 목표는 하나였다. 앱스토어에 내 앱을 올리는 것.
몇 년이 지났다. 그사이 취업을 했다. 앱스토어에는 아무것도 올라가지 않았다. 목표는 그대로였다. 목표만 그대로였다.
취업하고 나서 정했다. 퇴근 후에 하자. 무엇을 만들지는 오래 고민하지 않았다. 내가 가장 관심 있는 분야, 매일 쓰는 앱으로 정했다. 운동 기록 앱이었다.
5년 쓴 Strong이 있었다
헬스는 꽤 오래전에 시작했다. 다만 다니다 쉬다를 반복했다. 제대로 한 건 취업한 작년 4월부터다.
기록은 그보다 오래됐다. Strong이라는 운동 기록 앱을 5년 동안 썼다. 쌓인 운동 기록이 500회가 넘는다.
- Strong: 세트마다 무게와 횟수를 적는 운동 기록 앱이다. 일부 기능은 유료 구독이다.
Strong도 처음부터 쓴 앱은 아니다. 운동 앱을 여러 개 써 보고 골랐다. 그래서 솔직히 말하면 크게 불편한 게 없었다. 불편해서 만든 앱이 아니었다.
그럼 왜 만들었나. 이유는 세 가지였다.
- 점진적 과부하를 돕고 싶었다. 근육은 지난번보다 조금 더 할 때 자란다. 기록 앱은 지난번을 보여 주지만, "지난번보다 더 했다"를 알려 주지는 않았다.
- 동기부여가 있었으면 했다. 기록만 하는 앱이 아니라 한 세트 더 하게 만드는 앱.
- 유료 기능. 쓰고 싶은 기능 몇 개가 구독이었다. 낼 바에는 만들자고 생각했다. 이 계산이 맞았는지는 5편에서 정산한다.
점진적 과부하가 뭔가요
계단을 오르는 것과 비슷하다. 매번 같은 계단만 오르면 다리는 더 좋아지지 않는다. 한 칸씩 더 오르거나, 같은 칸을 조금 더 빨리 오를 때 몸이 거기에 맞춰 바뀐다. 운동에서는 그 한 칸이 무게 2.5kg이거나 한 번 더 드는 것이다.
그나마 걸린 하나: 머신 브랜드
불편한 게 없었다고 했지만, 하나는 있었다. 머신의 브랜드를 고를 수 없었다.
요즘 헬스장에는 같은 체스트 프레스라도 브랜드별로 여러 대가 있다. 같은 이름의 머신이라도 브랜드가 다르면 같은 무게가 같은 무게가 아니다. A 브랜드 머신으로 60kg을 민 기록과 B 브랜드 머신으로 60kg을 민 기록을 한 줄에 섞으면, 지난번보다 늘었는지 줄었는지 알 수 없다. Strong에서는 이걸 나눌 방법이 마땅치 않았다. 종목 이름에 브랜드를 적어 넣는 수밖에 없었다.
그래서 PowerUp은 종목을 처음부터 부위 → 장비 → 브랜드 → 종목 4단계로 나눴다(화면은 2편에). 6월 13~14일에는 브랜드별 머신 종목을 시드로 넣었다.
- 시드(seed): 앱을 처음 켤 때 미리 채워 두는 기본 데이터다.
지금 기본 종목은 145개, 브랜드는 7개(NewTech, M-Torture, Panatta, Nautilus, Life Fitness, Cybex, Focus)다. NewTech와 M-Torture는 표준 머신을 21개 안팎씩 한 벌로 넣었다. 기록 앱을 만든다더니 먼저 만든 건 헬스장 비품 목록이었다.
첫 이름은 GymTracker였다
첫 커밋은 5월 25일이다. 카카오 로그인과 로그인 토큰(JWT)을 붙인 백엔드였다. 이름은 GymTracker.
- JWT: 로그인에 성공하면 서버가 주는 출입증이다. 앱은 요청할 때마다 이걸 보여 주고, 서버는 출입증만 보고 누구인지 안다.
닷새 뒤인 5월 30일 하루에만 커밋이 8개였다. 세트 종류(워밍업·드롭·실패), 최고 기록, CSV 내보내기, 루틴, 슈퍼세트가 그날 다 들어갔다. 하루 만에 운동 앱의 기본기가 생겼다. 내가 한 건 아니다. 이 이야기는 아래에서 한다.
6월에 정리한 요구사항 문서의 첫 줄은 이렇다.
제품 정의: Strong 앱을 더 편하게 대체하는, 본인(헤비 유저)용 개인 맞춤 헬스 트래커. 운동 기록 + "내가 잘하고 있나"에 답하는 AI 애널리스트.
목표가 분명했다. Strong을 대체한다. 그래서 Strong의 기록을 그대로 가져올 수 있게 CSV 가져오기도 만들었다. 5년 치 500회가 넘는 기록이 한 번에 들어왔다. 새 앱인데 옮긴 날부터 "지난번 기록"이 있었다.
그리고 이 문장에는 AI 애널리스트도 들어 있다. 이 AI는 3편에서 지운다.
이름은 그 뒤로 세 번 더 바뀌었다.
| 시기 | 이름 | 무슨 일이 있었나 |
|---|---|---|
| 5월 25일 | GymTracker | 첫 커밋 |
| 7월 1일 | Overload | 프론트를 새로 시작, "게임처럼 동기부여하는 앱"으로 방향 전환 |
| 7월 1일 | Muscle Game | 같은 날 다시 이름 변경 |
| 7월 13일 | PowerUp | 앱스토어 출시 준비 시작 |
7월 1일 하루에 이름이 두 번 바뀌었다. 그날 나는 이 앱이 게임이 될 거라고 믿었다. 그 믿음이 어떻게 됐는지는 3편에서 다룬다.
에이전트와 한 부분
이 앱은 처음부터 Claude Code와 만들었다. 터미널 명령을 실행하고 코드를 직접 고치는 AI 코딩 에이전트다. 비율로 말하면 코드는 거의 전부 에이전트가 썼다. 나는 코드를 거의 읽지 않았다. 화면으로 확인했다.
일하는 방식
- 7~9월에는 대부분 휴대폰으로 원격 지시했다. 출근 전이나 쉬는 시간에 지시를 넣어 두면 에이전트가 작업하고, 나는 본업을 했다. 다음 쉬는 시간에 결과를 보고 다음 지시를 넣었다.
- 그래서 커밋은 주말보다 평일에 많다. 수요일 196개, 목요일 194개. 토요일은 68개다. 회사에 다니는 사람의 사이드 프로젝트치고는 근무 시간이 성실했다. 성실했던 건 내가 아니었다.
- 기능을 만들기 전에 연구 문서부터 시켰다. 점진적 과부하 연구 정리, 훈련 프로그램 백과(582줄) 같은 것들이다. 내가 모르는 걸 배우려는 목적과, 다음 세션의 에이전트가 근거로 쓰게 하려는 목적이 같이 있었다.
- 레포에는 에이전트 지침 파일(
AGENTS.md)을 두고 매 세션이 읽게 했다. 한국어로 답할 것, 화면은 웹으로 직접 띄워 확인하고 내 폰 테스트를 기다리지 말 것 같은 규칙이다.
에이전트가 한 일
- 백엔드, 앱 화면, 테스트, 문서 작성. 커밋 900개 남짓 대부분.
- 5월 30일 하루 8커밋 같은 속도.
내가 한 일
- 무엇을 만들지, 무엇을 남길지 결정.
- 헬스장에서 직접 쓰면서 테스트.
- 사용량 한도가 계속 차서 Claude Max 구독 결제. 매달 십몇만 원이었다.
지침 파일은 이 앱의 일기장이기도 하다. 7월 1일 첫 버전은 이 앱을 "게임처럼 동기부여하는 점진적 과부하 코칭 앱"이라고 소개하고, 확정 화면으로 "대결"을 적어 두었다. 지금 버전에는 이렇게 적혀 있다. "대결은 걷어냈다." "목표 기능은 걷어냈다." 앱보다 지침 파일이 더 정직하게 변천사를 기억한다.
시리즈 목차
- 5년 쓴 헬스 앱을 두고 내 앱을 만들었다 ← 지금 글
- 운동하는 하루로 보는 PowerUp
- 지운 기능과 고친 버그
- 앱스토어에 내기까지
- 3달 만들었더니 Strong이 더 좋았다
오늘의 교훈
불편해서 만든 앱이 아니었다. 그래서 무엇을 만들지 정하는 데 오래 걸렸다.
다음 편은 지금의 PowerUp이다. 아침 체중 위젯부터 주말 분석까지, 운동하는 하루를 따라가며 화면을 소개한다.
'프로젝트' 카테고리의 다른 글
| [PowerUp 개발기 3편] 지운 기능과 고친 버그 (0) | 2026.10.16 |
|---|---|
| [PowerUp 개발기 2편] 운동하는 하루로 보는 PowerUp (0) | 2026.10.16 |
| 음성으로 대화하는 chatGPT (0) | 2026.10.15 |
| [만쥬네 동아리 가게] 5. UI/UX 설계 (0) | 2026.10.15 |
| [만쥬네 동아리 가게] 4. 재개 및 기획안 발표 (0) | 2026.10.15 |