앱개발
2026.09.15 · 3분
개발자라면 앱 하나는 만들어봐야지. 오래 그렇게 생각만 했다.
회사를 다니고, 주말엔 아이와 놀고, 취미도 조금씩 하다 보면 시간이 남지 않는다. 핑계라면 핑계고 사실이라면 사실이다. 그렇게 몇 년이 지났다.
올해 들어 AI 성능이 확 달라졌다.
그전까지는 물어보면 답해주는 챗봇이었다. 답을 받아 붙여넣고, 안 되면 다시 묻고, 맞춰 고치는 건 결국 내 몫이었다. 그 왕복에 드는 시간이 아까워서 직접 짜는 게 빠를 때가 많았다.
에이전트가 나오면서 그 왕복이 없어졌다. 파일을 직접 읽고 고치고, 명령을 돌려 결과를 보고 다시 고친다. 지금은 그보다 더 간다 — 여러 단계를 스스로 이어가고, 막히면 다른 길을 찾아본다. 내가 세운 전제가 틀렸다고 근거를 들고 오기도 한다.
퇴근하고 남는 한두 시간, 아이 재우고 난 뒤의 시간으로도 뭔가 나올 것 같았다. 그래서 다시 해보기로 했다.
때마침 캠핑을 시작했다. 그리고 예전부터 막연히 "날씨 앱 정도는 만들어보고 싶다" 고 생각했었다. 둘이 겹쳤다.
처음엔 걸리는 게 있었다. 캠핑장마다 날씨가 다를 텐데. 산 하나 넘으면 비가 오고 안 오고가 갈리는데 그걸 어떻게 맞추나.
생각해보니 문제가 아니었다. 캠핑장 날씨는 결국 그 지역 날씨다. 좌표만 있으면 된다. 그래서 시작했다.
Next.js 로 웹부터 만들었다. Claude Code 와 Codex 를 쓰면서.
만들다 보니 방향이 잡혔다. 일반 날씨 앱은 숫자를 나열한다. 기온 몇 도, 풍속 몇 m/s, 강수확률 몇 퍼센트. 그런데 캠퍼가 알고 싶은 건 그게 아니다.
"이 날씨에 타프를 쳐도 되나."
그래서 수치를 캠핑 행동으로 옮기기로 했다. 타프 설치, 별보기, 모닥불, 취침, 결로. 풍속 8m/s 가 아니라 "타프 접으세요" 로 말하는 쪽이다.
처음 생각한 건 기상청 API 였다. 그런데 제공 기간이 짧았다. 캠핑은 며칠 뒤가 아니라 몇 주 뒤를 보고 예약한다. 짧은 예보로는 "이번 주말 어디 갈까" 에 답할 수가 없었다.
그래서 먼 날짜까지 주는 쪽을 찾다가 Open-Meteo 로 갔다. 예보·대기질 둘 다 거기서 받는다. 캠핑장 정보는 고캠핑 API 를 쓰고, 빌드할 때 JSON 으로 미리 받아 둔다.
몇 가지는 한국에 맞춰 고정했다.
wind_speed_unit: 'ms' // m/s. 캠퍼가 읽는 단위
timezone: 'Asia/Seoul'
forecast_days: 16
예보 일수는 원래 7일이었다. 커뮤니티에서 "예약을 더 앞서 잡는데 7일로는 부족하다" 는 피드백을 받고 16일로 늘렸다. Open-Meteo 의 상한이 16일이라 거기까지다.
서버 캐시는 30분으로 뒀다. 날씨는 그보다 자주 안 바뀐다.
웹이 돌아가니 앱으로도 내고 싶어졌다. 안드로이드로 이어서 만들었다.
방식은 TWA(Trusted Web Activity) 다. 웹을 그대로 앱 껍데기에 담는 구조라, 화면을 두 번 만들지 않아도 된다. 빌드는 bubblewrap 으로 한다.
전부 껍데기만은 아니다. 알림 설정 화면으로 보내는 네이티브 액티비티를 따로 만들고 딥링크를 걸었다. 안드로이드 알림 권한은 앱 설정에서 다뤄야 해서 웹만으로는 안 됐다.
만드는 것보다 내보내는 게 더 오래 걸렸다.
개인 개발자 계정의 출시 절차가 까다로워졌다. 구글 공식 문서 에 조건이 이렇게 적혀 있다.
2023년 11월 13일 이후에 만든 개인 계정은 최소 12명의 테스터가 14일 이상 연속으로 참여한 비공개 테스트를 마쳐야 프로덕션 접근을 신청할 수 있다.
"연속"이 핵심이다. 14일을 못 채우고 빠진 테스터는 세지 않고, 나갔다 다시 들어와도 거기서부터 14일을 다시 센다. 중간에 한 명이 빠지면 그 사람 몫은 처음부터다.
원래는 20명이었다가 2024년 12월에 12명으로 줄었다고 한다. 그래도 개인이 열두 명을 모아 2주를 붙들어 두는 건 쉽지 않다.
주변에 앱 개발자 지인이 많은 것도 아니어서, 카페와 블로그를 돌며 테스터를 모집했다. 코드를 짜는 시간보다 사람을 모으는 시간이 길었다.
정책 대응도 있었다. 2026년 8월 31일부터 새 업데이트는 targetSdkVersion 36
이어야 했다. 빌드 스크립트가 그 값을 확인하고 보정하도록 해뒀다. 이런 건 만들 때는
생각도 안 하다가 올리려는 순간에 튀어나온다.
캠씨는 https://camping.devs-jun.com 에서 돌고 있고, Play 스토어에도 올라가 있다. 웹 버전은 1.0.15 다.
만들면서 배운 건 두 가지다.
하나. 만드는 것과 내보내는 것은 다른 일이다. 앞의 것만 생각하고 시작하면 뒤에서 지친다.
둘. AI 를 쓴다고 해서 판단까지 대신해주지는 않는다. "캠핑장마다 날씨가 다르지 않나" 같은 걸 스스로 정리해야 다음으로 넘어간다. 빨라진 건 손이지 머리가 아니다.