들어가며...
올해 6월 말부터 혼자서 진행했던 캠프라이드 프로젝트가 드디어 출시되었다. 캠프라이드 서비스에 대해 간단하게 소개하자면 교통비 절약이 필요한 직장인, 예비군, 대학생들에게 택시 또는 카풀 커뮤니티를 제공하는 서비스이다. 내가 이 서비스를 처음 떠올리게 된 계기는 올해 학생 예비군을 참여하면서부터이다. 당시 나는 학교 근처에서 자취를 하다가 서울로 이사를 온 상태였고 학생 예비군은 경기도 안산 쪽에서 진행을 하게 되었다. 예비군에 참여하기 위해서 교통편을 알아보니 지하철을 타고 1시간 30분 정도 가야 했고 역에서 또 버스를 타고 예비군 훈련장에 가야하는데 이 버스의 배차 간격이 30분 이상이었고 심지어 정보도 잘 없었다. 아침 8시30분에 훈련을 시작하고 늦으면 예비군 훈련에 참여할 수 없는 예비군 특성 상 결국에는 늦지않게 훈련장에 도착하기 위해서 택시를 탈 수 밖에 없었다. 이 과정에서 4일 동안 택시비가 왕복 4만원 이상씩 소비되는 것을 경험하였다. 이런 비용들은 차가 있는 예비군이라면은 겪지 않겠지만 나와 같이 차가 없는 학생 예비군들은 어쩔 수 없이 택시를 타야 하는데 이런 비용들을 감당하기 힘든 사람들이 또 있지 않을까? 라는 생각을 하게 되었다. 그리고 평소에 당근마켓이나 에브리타임 등을 통해서 같이 택시를 타거나 카풀을 할 사람들을 찾는 예비군들을 많이 보았기 때문에 아 내가 이들을 도와줄 수 있는 작은 플랫폼을 만들게 되면 적은 시장 규모이더라도 그들의 가려움을 긁어주어 꾸준하게 트래픽을 유지하는 서비스를 만들 수 있겠구나 라는 생각을 하게 되었다. 그리고 군대 훈련소에 있으면서 읽었던 제로투원이라는 스타트업 서적에서 너무 작다 싶을 만큼 작게 시작하라는 내용이 떠올랐다. 주제를 날카롭게 갈아서 작은 시장을 공략하고 성장하여 큰 시장을 지배하는 전략이었다. 이 내용에 충실하여 오직 대한민국 예비군들만을 타겟팅하여 택시, 카풀 서비스를 제공하는 캠프라이드 서비스를 시작하게 되었다. 그러나 이 타겟은 결국 바뀌게 된다. 그 이유는 조금 뒤에 설명하겠다.
캠프라이드의 기능
캠프라이드의 기능은 크게 3가지로 나눌 수 있다. 택시 또는 카풀 파티를 쉽게 생성하고 찾을 수 있는 기능, 유저들이 머무르며 정보를 공유할 수 있는 커뮤니티, 쉽고 빠른 채팅 기능, 캠프라이드가 제공해야 하는 핵심은 택시 또는 카풀 서비스를 구하고 참여할 수 있는 플랫폼을 제공하는 것이었기 때문에 최대한 유저들이 쉽고 간편하게 서비스를 이용할수 있어야 한다는 생각으로 핵심 기능을 신경 써서 구현하고자 노력하였다. 유저들의 니즈에 공감하여 해결할 수 있는 PoC에 집중하여서 서비스를 개발하여야 핵심 문제를 해결할 수 있고 빠르게 시장에 내놓아서 검증을 받을 수 있다고 생각했기 때문이다.
이런 생각을 가지고 기능들을 구현해나가기 시작했는데 채팅 기능을 구현하는데 특히 많은 애를 먹었다. 앱을 만들면서 조사한 결과 대부분의 사람들이 택시나 카풀 동승자를 구할 때 카카오 오픈채팅을 이용을 하고 있었는데, 캠프라이드 서비스의 장점이 아무리 많더라도 내가 제공하는 채팅 기능이 오픈채팅에서 제공할 수 있는 기능들보다 현저히 적다면 (예를 들어 공감, 이미지 전송, 그 외 기능들) 굳이 내 서비스를 이용할 이유가 없다고 생각이 들었다. 그래서 이를 해결하기 위해서 기본적인 채팅 기능뿐만 아니라 이미지 전송, 공감, 답장, 그리고 빠른 메세지 확인을 위한 FCM, 최근 메세지 등을 도입하게 되었다. 또한 서비스의 확장성을 생각하여 대규모 시스템 설계 서적을 참고하여 kafka, redis를 활용한 채팅 기능을 구현하게 되었다.
기억에 남는 과정들
1. 반응형으로 만들기
이번 프로젝트는 단순하게 영상을 찍고 포트폴리오로 만들려고 하는 것이 아니라 실제 유저들의 문제를 해결하는 실전 프로젝트였기 때문에 프론트엔드를 구현하는 데에도 많은 노력을 기울일 수밖에 없었다. 다양한 기기의 크기, 그리고 안드로이드와 IOS 각각의 환경을 고려해서 개발을 해야 했기 때문에 디버깅툴을 이용해서 다양한 화면 크기를 가지고 있는 디바이스들로 테스트를 진행하면서 화면이 깨지지 않고 제대로 UI가 출력되는지 신경 써서 모든 화면을 완성하였다.
2. 채팅 기능 만들기 = 앱 하나 그냥 더 만드는 것과 같더라
채팅 기능이 아니었다면 진작에 끝났을 프로젝트라고 생각할 만큼 채팅 기능을 구현하는데 많은 시간과 노력을 기울였다. 먼저 채팅 프론트엔드 구현을 하기 위해서 플러터 위젯들을 찾아보았는데 내가 원하는 공감, 답장, 이미지 전송 등 모든 기능이 포함되어 있는 위젯들이 없었다. 대부분 포함된 위젯이 있다고 하더라도 한두 개씩 기능들이 빠져있었고 이를 구현하기 위해서 위젯 내부를 직접 수정해야 하는 경우들이 발생했고 이를 수정하다 보니 위젯이 꼬이는 경우가 빈번하게 발생하게 되었다. 결국 내가 원하는 기능들을 모두 구현하기 위해서 내가 직접 한 땀 한 땀 기능들을 만들 수밖에 없었다. 백엔드를 구현할 때에도 많은 노력이 들어갔는데 단순하게 mysql을 통해서 채팅을 저장하고 조회하는 것이 아닌 Redis와 kafka를 이용해서 메세지를 저장하고 조회하였기 때문이다. 메세지 유실과 순서 보장을 위해서 메세지 큐로 카프카를 활용하고 mysql보다 훨씬 빠른 속도로 채팅 메세지 기능을 동작시킬 수 있는 key value 저장소인 redis를 활용해서 기능을 구현하게 되었다. 실제 프로덕트 환경에서 데이터가 휘발되는 것을 방지하기 위해서 AOF 방식을 도입하여 Redis 데이터가 보존되도록 설정하였고 maxmemory와 LRU 알고리즘을 활용하여 저장소가 꽉 차더라도 Redis를 문제없이 운영할 수 있도록 설정을 마칠 수 있었다.
3. 쉽지 않았던 앱스토어 심사과정
앱스토어 출시까지 3번 정도의 출시 거부를 당했다. 첫 번째는 커뮤니티 기능에 유저 차단 기능이 없다는 이유에서였다. 신고 기능을 만들어 두었지만 실제로 서비스에서 악성 유저를 보이지 않게 할 수 있는 차단 기능이 없다는 것을 알게 되었고 이를 구현하여 재심사를 요청했다. 2번째 심사에서는 Oauth2 로그인을 진행할 때 세션이 만료되지 않았을 때는 정상적으로 Oauth2가 동작하지만 세션이 만료되었을 때는 jsessionId가 Oauth2 url에 붙어서 로그인 에러가 발생하고 있었다. 이를 애플 심사위원님이 캐치를 해서 나한테 알려주었고 세션 추적 모드를 쿠키로 변경하여 해결할 수 있었다. 3번째 심사에서는 네이버 로그인을 진행할 때 네이버 Oauth2 로그인을 비즈니스 모드로 변경해놓지 않아서 심사위원님을 포함해서 다른 유저들이 접근을 할 수 없고 나의 네이버 아이디만 접근할 수 있다는 것을 알게 되었다. 이를 해결하기 위해서 네이버 측에 비즈니스 플랫폼 전환 심사를 요청했고 승인을 받아서 결국 캠프라이드를 앱스토어에 등록할 수 있었다. (눈물..)
4. 유저 타겟 범위를 넓히다
앞서 서론에서 작은 시장을 공략하기 위해서 유저 타겟층을 예비군으로 정하였다고 했다. 정말 좋은 접근 방법이라고 생각했다. 실제로 앱을 출시하고 무반응을 경험하기 전까지는 .. 앱을 출시하고 나서 많은 커뮤니티에 홍보를 하였지만 처참할 정도로 반응이 없었다. 내가 생각하는 실패 요인은 안 그래도 적은 범위의 예비군을 타겟으로 했는데 심지어 그 예비군이라는 타겟안에서 차가 없는 사람들을 주 타겟으로 했다는 것이었다. 이로 인해 내가 생각했던 작은 범위의 시장은 작은 수준을 넘었다는 것을 알게 되었다. 이후 급하게 영점 조절을 진행했다. 주 타겟을 예비군을 넘어서 직장인, 대학생들에게까지도 확장을 하게 되었다. 다행히도 앱의 기능들이 단순히 예비군들에게만 한정된게 아닌 직장인, 대학생들에게도 무리 없이 제공할 수 있는 기능들이었기에 앱 설명만 조금 고쳐서 다시 심사 승인을 받을 수 있었다.
5. 택시, 카풀 오픈채팅방 잠입 홍보
앱 홍보를 위해서 카카오 광고, 네이버 광고를 시도했는데 카카오 광고에서는 불특정 다수의 만남을 알선하는 서비스이기 때문에 광고 거절을 당했다. 그리고 네이버에서는 주 초점이 상품에 맞춰져 있고 앱을 홍보하기에는 광고 시스템이 맞지 않았다. 마지막으로는 구글 애즈에서는 심사가 모두 끝나고 결제수단도 등록을 해 놓았는데 자체 웹사이트 링크가 아닌 앱스토어 링크라서 그런지 계속해서 광고 노출이 되지 않았다. 이를 해결하기 위해서 결국 직접 택시, 카풀 모집 오픈 채팅방들에 들어가서 홍보를 하기 시작했다. 각 대학교별로 정말 많은 인원들이 택시, 카풀 모집 방을 만들어서 운영을 하고 있었다. 택시, 카풀 모집 채팅이 올라올 때마다 눈치를 보면서 슬쩍 링크 홍보를 진행했다. 그런데 다행히도 좋은 반응들을 많이 보여주시고 앱 유저로 유입이 되어서 조금 마음이 놓였다.
앞으로의 계획
처음으로 앱을 출시해 보면서 느낀 점으로는 서비스를 만드는 것도 중요하지만 이 서비스를 사람들이 사용하게 하기 위해서는 홍보가 정말 중요하다는 것을 깨달았다. 그리고 유저들이 곧 컨텐츠인 서비스를 만드는 것도 좋겠지만 나와 같이 1인 개발을 통해서 작은 시장의 파이를 공략해 나가야 하는 사람들에게는 유저들이 없더라도 확실한 컨텐츠를 제공할 수 있는 서비스를 만드는 것도 좋은 방법일 거라는 생각이 들었다. 그래서 앞으로 캠프라이드 서비스는 계속해서 운영해나갈 것이긴 하지만 그와 동시에 올해부터 진행해왔던 요양기관 차량 배차 서비스를 고도화해서 실제 요양기관분들에게 제공하고 유료 결제 기능을 도입해서 수익으로 연결시켜 보아야겠다는 생각을 하게 되었다. 이번 경험을 통해서 생각보다 적은 사람들이 내 서비스를 찾아오긴 했지만 신기하게도 꾸준하게 유저들이 늘어나고 있고 이번 서비스 출시를 통해서 나의 꿈인 노마드코더에 한발짝 더 다가간 것 같아서 기쁘다. 전세계를 여행하며 시간과 돈에서 자유로운 날이 올때까지 keep going, 파이팅!
앱스토어
https://apps.apple.com/kr/app/%EC%BA%A0%ED%94%84%EB%9D%BC%EC%9D%B4%EB%93%9C/id6737127396
플레이스토어
출시예정
'Projcet' 카테고리의 다른 글
ubuntu 홈서버 구축기 feat. SK Broadband (0) | 2024.06.14 |
---|---|
Docker Oracle Linux 8 컨테이너 MYSQL 한글 깨짐 해결 방법 (0) | 2024.04.08 |