시작 동기
평소 배달의 민족이나 카카오T와 같은 앱을 사용하면서, 배달기사나 택시의 실시간 위치 추적 기능에 관심이 갔다. 특히 실시간으로 움직이는 위치 정보가 어떻게 처리되고 표시되는지 궁금했고, 이런 실시간 데이터 처리 기술을 직접 구현해보고 싶다는 생각이 들었다. 그리하여 실시간 위치 공유 서비스를 개발하기로 마음을 먹었고 마침 마음에 맞는 android개발자분과 ios개발자분이 있어서 같이 사이드 프로젝트를 시작했다.
목표
해당 프로젝트의 첫 번째 목표는 '최대한 빠른 배포'였다. 앱을 배포하기 위해서는 App Store와 Play Store 두 곳에 등록해야 하는데, 다행히도 안드로이드 개발자와 iOS 개발자분들이 Flutter를 도전해보고 싶어 하셔서 배포에는 문제가 없었다. 원래 9월 추석 전 배포를 목표로 시작했지만, 각자의 현실적인 일정으로 인해 점차 미뤄져 결국 11월 초에 배포를 완료할 수 있었다.
두 번째 목표는 '유저 모집'이었다. 사실 이 목표는 프로젝트의 시작 동기와 다소 상충된다. 처음 주제를 정할 때 '실시간 위치 공유'라는 기술을 어떻게 구현할지에만 집중했을 뿐, 사람들이 실제로 필요로 하는 앱인지, 또는 시장에 이미 유사한 앱이 존재하는지는 고려하지 않았기 때문이다. 그래도 앱이 배포된 만큼 한 명이라도 더 많은 유저를 모집해보자는 목표를 세웠다. 이를 위해 회원가입 시 인증 절차를 생략하여 가입 과정을 간소화했고, 공유 코드만 있으면 누구나 쉽게 위치를 공유할 수 있도록 최대한 단순하게 설계했다.
도전
-양방향 통신
실시간 위치 공유를 구현하기 위해서는 서버와 클라이언트 간의 양방향 통신이 필수적이었다. 양방향 통신을 구현하는 방식에는 HTTP Long Polling, Server-Sent Events(SSE), WebSocket 등 여러 기술이 있다.
Long Polling은 구현이 간단하지만 불필요한 연결 요청이 많이 발생하고, SSE는 서버에서 클라이언트로의 단방향 통신만 가능하다는 한계가 있다. 반면 WebSocket은 한 번의 연결로 실시간 양방향 통신이 가능하며, 효율적인 데이터 전송이 가능하다는 장점이 있다.
이러한 특징들을 고려하여 WebSocket을 선택했고, WebSocket을 사용함으로써 실시간성을 확보할 수 있었지만, 동시에 새로운 기술적 과제들도 마주하게 되었다. 특히 실시간 데이터 저장은 redis를 사용했는데 데이터 정합성 유지가 가장 큰 도전 과제였다.
AWS에서 자체 서버로의 전환
처음에는 AWS의 EC2, RDS, S3 서비스를 활용하여 인프라를 구축했다. 클라우드 서비스는 초기 구축이 쉽고 관리가 편리하다는 장점이 있었지만, 프리티어의 한계에 곧 부딪히게 되었다. 특히 실시간 서비스 특성상 지속적인 서버 자원이 필요했고, RDS 사용 중 예상치 못한 과금이 발생하기도 했다.
이러한 비용 문제를 해결하기 위해 과감하게 자체 서버 구축을 결정했다. 미니PC에 Ubuntu를 설치하고 직접 서버 환경을 구성했다. 처음에는 걱정이 많았지만, 오히려 이 과정에서 서버 인프라에 대한 깊은 이해를 얻을 수 있었다. nginx를 통한 리버스 프록시 설정, SSL 인증서 적용, 데이터베이스 구축 등 서버 운영에 필요한 모든 과정을 직접 경험하면서 많은 것을 배울 수 있었다.
결과적으로 클라우드 서비스에 대한 의존도를 줄이고 비용을 절감할 수 있었을 뿐만 아니라, 인프라 구축부터 운영까지 전반적인 경험을 쌓을 수 있었다.
초기 인프라 구성도
현재 인프라 구성도
과정
일주일에 한 번씩 퇴근하고 스터디룸에 모여서 테스트하고, 버그도 잡고, 다음에 뭐할지 이야기하는 시간을 가졌다. 이렇게 반복하다 보니 어느새 앱이 형태를 갖추기 시작했다. 특히 QA 과정이 재미있었는데, 우리가 만든 앱이 위치 기반 서비스다 보니 실제로 이동하면서 테스트를 해야 했다. 그래서 핸드폰이랑 노트북을 들고 강남 거리를 돌아다니면서 로그를 확인하며 테스트 했었다.
그리고 디자이너 없이 개발자 3명에서 디자인 작업은 너무 어려웠다. 그래서 디자인쪽은 배포후 업데이트를 하는 방향으로 정했다.
만나지 못하는 날에는 카톡으로 연락하며 작업을 하곤 했다.
마지막으로 App Store와 Play Store 링크를 남기고 마무리 해보겠다.
여기로모여라
약속을 잡을때, 서로의 위치를 몰라 답답했던적이 있지 않나요? "여기로모여라"는 이런 불편함을 없애줍니다 목적지를 정하고, 친구들의 위치를 실시간으로 확인해보세요! 약속시간, 친구들
apps.apple.com
여기로 모여라 - Google Play 앱
이동 경로를 함께 공유하세요!
play.google.com
'Programming > Back-end Language' 카테고리의 다른 글
RabbitMq 이해 (0) | 2025.01.14 |
---|---|
여기로 모여라 회고-2 (web socket을 이용한 실시간 위치공유 개발) (0) | 2024.10.18 |
Docker 환경에서 Nginx를 사용하여 letsencrypt SSL 설정 (1) | 2024.10.18 |
K6를 이용한 서버 성능 테스트 이슈 (0) | 2024.09.06 |
Apache Tomcat과 JAVA (0) | 2024.05.16 |