Post

아랑아랑 개발 후기

아랑아랑 소개페이지

나와 같이 육아에 바쁜 아빠들을 위한 앱.


육아를 하면서 아이와 함께 즐거운 시간을 보낼 수 있는 장소를 찾는 일은 생각보다 복잡하고 어려운 과제다. 필자의 경우 아이와의 소중한 시간을 만족스럽게 보내기 위해, 여러 포털사이트나 소셜미디어를 뒤져보곤 한다. 하지만 대부분의 경우, 네이버나 다음 같은 포털사이트, 또는 인스타그램, 페이스북 같은 SNS에서 유용한 정보를 찾는 것은 쉽지 않았다. 이런 플랫폼들에서 정말 도움이 되는 정보를 찾기 위해서는 관련 글을 올리는 유저들을 직접 알거나, 그들의 게시물을 일일이 찾아보는 수고를 해야만 했다. 바쁜 일상 속에서도 아이와의 소중한 시간을 보내고자 하는 마음은 굴뚝같지만, 매번 새롭고 흥미로운 장소를 찾는 일은 쉽지 않았다.

그러다 문득 이런 생각이 들었다. 나와 같은 아빠들의 경우, 아이와 함께 할 수 있는 활동에 관심이 많음에도 불구하고, 필요한 정보를 찾는 데 있어서 어려움을 겪는 경우가 많지 않을까?

비록 나만의 경험이였지만, 매 주말마다 아이와 어디로 놀러 갈지 고민하고 찾는 일이 반복되곤 했다. 그래서 어느날 갑자기 구체적인 기획을 세워가면서, 아이와 함께 갈만한 여행지나 놀이공간 정보를 모아 손쉽게 찾을 수 있는 앱 개발을 사이드 프로젝트로 삼고, 진행하게 됐다.

1인 팀 결성.


개발 프로젝트가 중후반을 넘어섰고 완료까지 7개월 가량 남은 시점이었다. 프로젝트도 진행 중인데, 육아와 집안일까지 하다보니 사이드 플젝에 사용할 시간을 쥐어짜내야했다. 개발에 할애할 수 있는 시간은 출근 전 1시간, 간편식으로 점심을 해결하며 남는 1시간, 그리고 저녁에 30분에서 1시간 정도였다. 이전에도 사이드 플젝 경험은 있었지만 소위 각 잡고 하는 경우는 처음이다보니 시작도 전에 걱정을 안고 했던거 같다.

시장분석.


‘오늘 하루’ 갈 수 있는 여행지를 제공하되 공공데이터와 나만의 데이터를 같이 제공하는 방향으로 잡았다.

아이와 갈 수 있는 여행지를 알려주는 서비스는 3~4개 정도 있었다. 할인 정보나 해당 플랫폼에서만 제공하는 독점적인 서비스 등, 각 서비스들만의 기능들이 많았다. 이러한 데이터를 직접 수집하고 사용자의 참여를 통해 재가공하여 서비스를 제공하겠다는 전략이었지만, 실제로 실행에 옮기려니 어려움이 많았다. 위치기반 및 AI 기반의 실시간 분석을 주요 특징으로 삼아, 당일치기로 다녀올 수 있는 장소에 집중하려고 했다. 그러나 숙소나 음식점 등 여행지를 제외한 부속 시설 정보까지 포함시키게 되면 혼자서는 관리하기 벅찰 것이라고 판단했다.

그래서?


이렇게 만들어보자.

당시 아내가 임신 중이었고, 아이도 어려서 1박을 하거나 멀리 가는 것을 선호하지 않았다. 주로 차로 당일치기로 다녀올 수 있는 곳을 선호했다. 그래서 ‘오늘 하루’에 다녀올 수 있는 곳 위주로 추천하려고 했다. 당연히 위치 정보 기반이어야 했고, 지도, 각종 테마여행 등 하루 여행이라는 컨셉에 맞는 기능을 기획했다.

나만의 서비스는.

공공데이터를 최대한 활용하여 데이터를 수집했지만, 실시간으로 변화하는 정보(예: 봄꽃, 휴관 등)는 실시간 정보를 가져와야 했다. 전국 약 2만여 곳의 데이터를 일일이 다룰 수 없었기에, 최대한 자동화 프로세스를 구축하는 것이 중요했다. 자동으로 실시간 정보를 LLM을 통해 요약하는 방향으로 나아갔다.

디자인은 어렵다.

디자인 소질이 없어서 스포카 디자인 가이드를 참고하며 디자인했다. 세세한 화면을 모두 그릴 수 없어서 와이어프레임 정도만 그렸고, 드리블, mobbin, wwit 등에서 참고할 만한 화면을 보며 개발하면서 디자인했다.

내년까지 확장.

프로젝트 중반 시기여서 결코 한가한 시간대는 아니었다. 그래서 일단 오픈을 위한 최소한의 기능을 먼저 개발해 배포하고, 1년 동안 추가 개발을 하면서 경과를 지켜보기로 판단했다. 스타트업에서 해야 할 일들과 마음가짐에 대한 글을 보면서, ‘안 된다고 생각하는 건 과감히 버리라’는 말이 인상 깊었다. 하지만 버리기에는 아까워서 향후 방향성만 고민하고 계획을 이렇게 잡았다.

시~작!


지난 사이드 프로젝트에서 부족한 점이 무엇이었는지 고민했을 때, 문서화를 철저히 하지 않았다는 것을 깨달았다. 기획도 부족했다. 노션을 열고 나중에 확인해도 무리 없이 사용할 수 있도록 필요한 문서부터 정리했다. 팀원 없이 혼자 개발해야 했기에 기간은 최소 8개월로 잡았다. 당시 참여 중이던 프로젝트가 끝무렵에 마무리되어 출시할 수 있을 것이라 판단했다. 너무 늦어지면 오히려 출시하기 어려워질 것 같았다. 앱 이름은 ‘아빠와 아이가 함께 간다’는 뜻으로 ‘아랑아랑’이라고 지었다.

아랑아랑 최초인프라

Front-end


flutter를 사용하고, 앱만 제공할거라 웹버전은 고려하지 않았다.

Back-end


Spring을 주로 사용하고 (MVC), LLM, 데이터 수집 등은 FastAPI로 구축했다.

Infra


최초에는 NHN Cloud를 사용해서 배포했다. CI/CD툴은 github action을 사용했다.

플러터와 스프링, 파이썬을 사용해 공공데이터를 받아오고, 이를 활용하여 여러 데이터를 수집해 사용자에게 제공하는 아키텍처를 그렸다. 디자인이 완벽하지 않아 중간중간 화면 레이아웃이 변경되면서 지연되기도 했다. 개발 과정에서 플러터의 테스트 코드나 스프링 테스트를 다 못 해본 상태에서 아내와 함께 테스트를 진행했다. 이 과정에서 수많은 버그로 인해 회의가 들기도 했지만, 정신을 바쳐 최초 버전을 완성시켰다. 약간의 수정을 거쳐 안드로이드와 iOS에 모두 출시했다.

아랑아랑 출시.


아랑아랑 최초화면

출시 후 노마드코더와 렛플레이에도 홍보글을 올렸다. 주변 지인들에게 앱을 권하며 사용해달라고 말했지만, 나 혼자 육아를 하는 지인이었다. 놀랍게도 친구들 중에는 결혼하지 않은 이들이 많았고, 직장 동료들 중에서도 내 또래로 육아를 하는 이는 나밖에 없었다. 그래서 온전히 홍보에 사활을 걸 수밖에 없었다. 생각보다 사용자 수가 많이 늘지 않아 현실을 실감했지만, 포기할 수는 없어서 기획을 보충하고 기능을 수정하며 앱을 계속 수정했다.

비용을 줄여보자.


유지비를 최소화할 필요가 있었는데, 이유는 부끄럽게도 쓸 돈이 부족했기 때문이다. 아이를 키우는 유부남의 용돈이 적었다. 최초 아키텍처는 NHN Cloud를 사용해 백엔드 서비스를 구성했지만, 유지비가 많이 나와 대안을 찾다가 Google Cloud Run을 알게 되어 현재 사용 중이다. GitHub Actions으로 배포 설정할 필요 없이 커밋하면 알아서 실행되는 것이 좋았다. 대신 도커 파일 설정이 필요했다. 스프링과 FastAPI 모두 GCP로 옮겼다.

Cloud Run은 필요할 때만 호출하는 구조라 이전에 설정했던 스프링 배치가 동작하기 어려웠다. 새벽 시간대에는 종료하게 해놓아서 크론탭이 필요했는데, GCP는 3개 이상부터 유료였다. 무료인 Cron Job이 있어서 이것으로 수정하고 잘 사용하고 있다.

홍보도 해보자.


인스타나 포털 사이트를 활용하지 않고 내가 만든 앱으로 서비스를 제공하려 했지만, 아이러니하게도 서비스 홍보를 위한 수단으로 인스타만한 게 없었다. 나 또한 인스타를 사용하면서 종종 육아 관련 정보를 얻었기에, 아랑아랑 전용 계정을 만들어 홍보를 시작했다. 디자인 실력은 부족했지만 여러 레퍼런스를 참고하여 실제 가족과 다녀온 여행지 사진을 첨부하고 아랑아랑에서 소개하는 여행지를 포스팅했다. 무작정 앱 사용을 광고하는 것보다 나아 보였다. 인스타 계정 운영과 서비스 운영을 병행하며 일은 두 배가 되었지만, 이를 통해 유입되는 신규 사용자가 있어 홍보 효과를 보고 있다.

홍보를 하면서 얻은 의외의 수확.


평소 내가 접할 기회가 없던 일들을 해보는 것 자체가 좋은 경험이자 기회였다.

신규 SaaS 광고 피드글을 보며 참고할 점이 많았다. 주로 새로운 정보는 이오나 서핏에서 얻지만, 인스타에 올라오는 홍보글을 보고 어떻게 작성하면 좋을지 배우고 최신 서비스도 알아볼 수 있어 좋았다.

다듬고 다듬기.


UI 개편

여행지 카테고리가 20개가 넘어서 사용자 입장에서는 선택이 애매했고, 관리 입장에서도 힘들어 카테고리를 8개로 줄였다. 직접 사용해보니 사용자에게 계속 터치하고 찾아보라고 강요하는 느낌이 들었다. 그래서 사용자가 찾아보기보다는 내가 직접 소개하는 방식으로 변경했다. 위치 기반은 유지하면서 다른 공공데이터를 활용해 내일 또는 특정 테마에 맞는 여행지를 소개하는 컨텐츠를 추가했다.

AI 기능 강화

최초 사용한 AI 기능은 Chat-GPT를 활용해 해당 여행지 정보를 찾아주는 것이었다. 당시에는 할루시네이션이나 GPT의 다른 이슈는 고려하지 않고 일단 추가했다. 그러다 보니 결과물도 문제가 있었고, 무엇보다 요청 시간이 너무 오래 걸렸다. 자바에서 바로 OpenAI API를 호출하는 방식을 사용했는데, 데이터를 불러오는 데만 3분이 넘게 소요되어 곤란했다. 이에 랭체인을 통해 매일 새벽에 AI 응답을 만들어놓고 사용하는 방식으로 수정했다. 데이터 역시 랭체인으로 검색한 데이터 중 일부를 사용해 최신 정보를 요약하도록 변경했다. 아직 AI 기능은 수정할 게 많지만, 요즘에는 앱에 AI가 없으면 이상할 정도로 탑재가 추세였다. 플러터에서는 Gemini를 통해 쉽게 구축할 수 있다고 하지만 나는 아직 해보지 않았다.

사용자 참여 유도

아무리 최적의 알고리즘으로 추천 서비스를 제공해도 결국 사용자가 와서 후기를 남기지 않으면 서비스 품질을 향상시킬 방법이 없었다. 그래서 여타 다른 서비스들처럼 마일리지(포인트) 기능을 추가해 사용자 참여를 유도했다.

추가 개발을 마치며.


최종 메인화면

마일리지 기능을 추가하고서야 아랑아랑은 처음에 원했던 기능들이 모두 포함되었다. 첫 출시 이후 7개월의 시간이 더 걸려 개발 기간만 해도 1년이 넘었다. 사용자 수는 아직 많지 않고 순위도 높지 않지만, 내가 끝까지 만든 서비스를 운영하니 의미가 남다르다. 지금도 틈틈이 모니터링하면서 서비스 지속 개선 중이다.

무엇을 배웠을까.


사용자 수가 적어 실패감을 느꼈고, 역시 기획이 중요하다는 것을 깨달았다. 기획을 더 꼼꼼히 했다면 수정 작업이 반으로 줄었을 것이라는 생각이 든다. 진짜로 그랬을 것이다.

앞으로.


아랑아랑은 가족을 돌보듯 붙잡고 살아왔던 것 같다. 이제서야 원하는 기능이 모두 나온 앱이 출시되었으니, 데이터를 계속 정비하면서 아랑아랑에서 제공하는 데이터 품질 향상에 더 집중하려 한다. 그리고 올해도 현재 진행 중인 사이드 프로젝트에 집중해야 한다. 일이 하나 더 늘어났지만, 이 과정을 통해 개발 이외의 중요한 업무를 나 혼자서 다 해봤다는 경험을 하게 되었다. 이제 더 성공적인 서비스를 개발하면 좋을 것 같다.

This post is licensed under CC BY 4.0 by the author.