자유
10년 만에 다시 잡은 키보드, '바이브 코딩'으로 4주 만에 런칭한 1인 개발기
조회 2,802 · 공감 1 · 댓글 7
안녕하세요. 가입하고 처음 글을 남겨봅니다.
앱 출시한지는 2개월 정도 된 것 같은데, 그동안의 과정을 떠올리면서 글을 작성했습니다.
1. 만든 이유 ("나중에 봐야지"의 무덤)
혹시 회원님들도 카카오톡 '나와의 채팅' 방이 온갖 링크로 도배되어 있지 않으신가요?
매일 유익한 기사, 인스타그램 영상, 유튜브 링크가 쏟아집니다. 당장 볼 시간이 없을 때 우리는 습관적으로 카톡 '나와의 채팅방'에 링크를 던져두곤 하죠. 하지만 그 링크들은 금세 쌓여 읽지 않은 채 묻혀버립니다. 정작 필요할 때 검색도 안 되는 '정보의 무덤'이 되는 셈입니다. "나중에 봐야지" 하고 공유해뒀는데, 막상 나중에 찾으려니 이게 무슨 글이었는지 기억도 안 나고, 스크롤 올리다 지치는 경우가 너무 많았습니다. 그래서 카톡 '나와의 채팅' 링크 정리가 힘들어서 직접 만든, 로그인 없는 스크랩 앱,, 북마크 앱을 만들었습니다.
2. 10년 만의 복귀, 그리고 기존 앱들이 불편했던 이유
2025년은 제게 특별한 한 해였습니다. 직장 생활을 하며 앱 개발 PM 업무를 하던 중, 회사 차원의 개발 내재화가 진행되면서 10년 만에 다시 직접 개발 업무를 시작하게 되었거든요. 이왕 다시 시작하는 거 아이디어부터 기획, 디자인, 개발, 출시까지 전 과정을 직접 경험해 보자는 취지로 '모카(MOCA)' 앱 프로젝트를 시작했습니다.
개발자이자 유저로서 기존 북마크 앱들은 두 가지가 불편했습니다.
(디바이스 간 데이타 공유가 가장 주된 이유가 되긴 했겠지만...)
- 강제된 로그인: 링크 하나 저장하는데 왜 내 개인정보를 줘야 할까?
- 데이터 주권: 내가 무엇을 보는지 외부 서버에 기록이 남는 것이 찜찜했습니다.
그래서 결심했습니다. "모든 데이터를 내 폰 안에만 저장하는 가장 개인적인 아카이브를 만들자."
3. '데이터 수집의 벽'을 넘다
모카는 처음부터 'No Login', 'No Server'를 지향했습니다. 하지만 서버 없이 클라이언트에서만 모든 데이터를 처리하려니 예상치 못한 기술적 난관에 부딪혔습니다. 특히 사용자가 공유한 URL에서 메타데이터(제목, 설명, 썸네일)를 추출하는 과정이 그랬습니다.
< 문제 상황: Jsoup 라이브러리의 한계 >
처음에는 가장 대중적인 Jsoup을 사용했습니다. 하지만 Jsoup은 정적 HTML만 파싱할 수 있다는 치명적인 한계가 있었습니다. 최신 웹 프레임워크(React, Vue 등)로 구축된 SPA(Single Page Application)나 인스타그램, 쿠팡, 무신사 같은 서비스들은 JavaScript가 실행된 후에야 콘텐츠가 렌더링됩니다. Jsoup만으로는 텅 빈 HTML 태그만 보게 되는 것이죠.
< 해결책: WebView JavaScript 기반 Fallback 전략 >
이를 해결하기 위해 저는 성능과 정확도 사이의 타협점을 찾아 ‘다단계 추출 프로세스'를 설계했습니다.
- Step 0 (이미지 직관): 입력된 URL이 이미지 확장자라면 파싱 없이 즉시 반환하여 불필요한 리소스를 아낍니다.
- Step 1 (Jsoup 파싱): 약 70%의 일반 사이트에서 가장 빠른 속도로 메타데이터를 가져옵니다. 이때 네이버 등 일부 사이트의 차단을 피하기 위해 User-Agent를 우회 처리하는 디테일을 더했습니다.
- Step 2 (WebView 렌더링): Jsoup이 실패할 경우, 보이지 않는 WebView를 생성하여 JavaScript를 실제로 실행시킵니다. 렌더링이 완료된 후 DOM에 접근하여 메타데이터를 추출합니다. 비록 속도는 느리지만, 데이터 추출 성공률을 비약적으로 높여주었습니다.
- Step 3 (도메인 기반 Fallback): 모든 단계가 실패하더라도 도메인 정보를 기반으로 최소한의 기본값을 생성해 사용자 경험의 연속성을 유지했습니다.
이런 과정 속에서 10년 전 Java 기반 개발 환경과 현재 Kotlin, 현대적 라이브러리 간의 격차를 몸소 느끼며 모던 안드로이드 생태계에 적응해 나갔습니다.
4. 개발 속도의 혁명, AI와 함께하는 '바이브 코딩'
솔직히 말하면, 이 프로젝트는 AI 없이 불가능했을 겁니다. 특히 앞서 언급한 WebView 기반 파싱 로직이나 복잡한 Room DB 설계 시 스택오버플로우 대신 Claude와 대화하며 코드를 짰습니다. "이 부분은 이렇게 하면 어떨까?"라고 묻고 즉시 피드백을 받는 과정은 마치 뛰어난 시니어 개발자와 페어 프로그래밍을 하는 기분이었습니다.
오히려 MVP 개발보다 힘들었던 것은 구글 플레이스토어의 '14일간 12명의 테스터' 규정을 채우는 것이었습니다. 하지만 이 기간 또한 지인들의 피드백을 받아 리마인드 알림 기능을 추가하는 등 앱의 완성도를 높이는 기회로 삼았습니다.
5. 안드로이드 네이티브의 한계, 그리고 Flutter로의 확장 계획
MOCA의 첫 번째 버전은 안드로이드 네이티브(Kotlin)로 출시되었습니다. 10년 만의 복귀였기에 가장 익숙한 환경에서 빠르게 MVP를 완성하는 것이 우선이었기 때문입니다. 하지만 출시 직후, 아이폰 사용자로부터 "iOS 버전은 없냐"는 피드백을 받으며 1인 개발자로서의 현실적인 한계에 직면했습니다.
현재 MOCA는 오직 안드로이드에서만 만날 수 있는 상태입니다. 1인 개발자가 네이티브로 두 플랫폼의 기능을 동일하게 유지하며 유지보수하는 것은 물리적으로 불가능에 가까웠습니다. 특히 MOCA의 핵심인 '로컬 데이터베이스 관리'와 '스크래핑 로직'을 Swift로 처음부터 다시 짜야 한다는 점은 큰 진입장벽이었습니다.
이러한 고민 끝에, 다음 단계로 Flutter를 활용한 크로스 플랫폼 전환을 계획하고 있습니다. 제가 Flutter를 선택한 이유는 다음과 같습니다.
- 코드 재사용성: 안드로이드와 iOS를 하나의 코드베이스로 관리하여 1인 개발자의 생산성을 극대화할 수 있습니다.
- 강력한 커뮤니티와 패키지: MOCA의 핵심인 로컬 DB(Room)를 대체할 Hive나 Drift 같은 강력한 로컬 스토리지 패키지들이 잘 구축되어 있습니다.
- 바이브 코딩과의 시너지: Claude와 Gemini는 Flutter(Dart)에 대해서도 매우 수준 높은 코드를 생성해 줍니다. 네이티브에서 겪었던 시행착오를 바탕으로 AI와 협업한다면, 크로스 플랫폼 전환은 훨씬 더 빠를 것으로 기대하고 있습니다.
6. 1인 개발자의 AI 라인업
- Claude: 메인 코딩 파트너로서 Kotlin 로직의 80% 이상을 함께 고민했습니다.
- Gemini & Google AI Studio: Claude가 막힐 때 다른 관점을 제시해 주었고, 공식 문서의 핵심 내용을 빠르게 요약해 주었습니다.
- Figma Make & Stitch: 디자인 감각이 부족한 제게 텍스트만으로 UI 초안을 그려주고 아이콘 제작을 도와주었습니다.
- Antigravity: 최근에 여러 AI 모델을 번갈아 사용하며 최적의 해답을 찾는 허브 역할을 해주고 있습니다.
7. 마치며
전 과정을 혼자 겪으며 깨달은 것은, 결국 사용자 경험은 '작은 디테일'에서 결정된다는 점인 것 같습니다.
시작은 내가 사용할 앱을 직접 만들어보자로 출발했지만 정작 앱은 출시했지만 이게 전부는 아니더군요^^
많은 시행착오도 있었고, 10년 만의 복귀작이지만, AI라는 든든한 지원군 덕분에 앱 출시도 하고 그 과정에서 다시 개발의 즐거움을 찾았습니다. MOCA는 앞으로도 꾸준히 업데이트를 해나갈 예정입니다.
더 자세한 구현 결과물이 궁금하시다면 MOCA 앱을 통해 확인해 보실 수 있습니다.
- 100% 무료, 광고 X, 회원 가입 X, 데이타는 로컬에만 저장 (단, 데이타 내보내기/저장하기 기능 지원)
- 리마인드 알림 기능, 인스타 이미지 저장, 카테고리별/도메인별 링크 관리 등
* 링크: https://play.google.com/store/apps/details?id=com.bigroad.moca
혹시 관심 있으시면 설치 후 피드백 대환영입니다.^^
긴 글 읽어주셔서 감사합니다.










댓글 7
아이디어가 있으면 직접 앱을 만들어서 쓸 수 있으니까 여러가지 시도를 해볼 수 있는 것 같아서 좋은 것 같습니다.
모카 앱 만들면서 한동안 바쁘긴 했지만 간만에 재미 있었습니다.^^ 응원합니다. 화이팅하세요!!
피그마나 스티치로 디자인한건 개발툴에서 코드로 어떻게 변환하셨나요? 디자인은 참고만 하고.. UI 개발은 참고한 내용으로 바이브 코딩하신건가요?
정민군님도 꼭 한번 도전에 보세요. 화이팅~~^^