프로젝트 개요
오고있니는 연인/파트너가 약속 장소에서 만나기까지의 이동 과정을 공유하고, 만남 이후에는 그 과정을 기록으로 남길 수 있는 위치 기반 웹앱입니다.
위치 공유 요청, 수락, 진행, 종료로 이어지는 세션 도메인을 설계하고, REST API와 백엔드/프론트엔드 WebSocket 통신을 구현했습니다. 이동 중 발생하는 좌표, 메모, 사진, 만남 완료 이벤트는 하나의 히스토리 모델로 저장해 실시간 지도 표시와 기록 조회에서 함께 사용할 수 있도록 했습니다.
와플스튜디오 주최 해커톤 2026에서 개발해 3위를 수상했습니다.
담당 내용
- 세션과 위치 포인트 이력을 포함한 전체 DB 스키마를 설계했습니다.
- 위치 공유 요청을 PENDING / ACTIVE / DONE 상태를 갖는 세션으로 모델링했습니다.
- 세션 생성, 현재 세션 조회, 상태 조회, 수락, 종료, 사진 업로드, 히스토리 조회를 위한 REST API를 구현했습니다.
- 백엔드 WebSocket handler를 구현해 클라이언트가 전송한 위치 좌표, 메모, 만남 확정 이벤트를 세션 상태와 사용자 권한에 맞게 처리했습니다.
- 프론트엔드에서 WebSocket 연결, 주기적인 위치 전송, 상대방 위치 수신, 지도 마커와 경로 갱신 흐름을 구현했습니다.
- HTTP로 기존 이력을 불러오고 WebSocket으로 새 좌표를 받아, 새로고침 후에도 지도 상태가 복원되도록 구현했습니다.
설계상 과제
이 프로젝트에서 가장 먼저 정리해야 했던 것은 위치 공유를 단순 좌표 전송이 아니라 상태를 가진 세션으로 모델링하는 일이었습니다. 사용자가 위치 공유를 요청하면 세션은 PENDING 상태가 되고, 상대방이 수락하면 ACTIVE 상태로 바뀌며, 만남 완료나 취소 이후에는 DONE 상태로 종료되도록 흐름을 정의했습니다.
세션은 개인이 아니라 커플 단위로 공유되는 리소스였기 때문에, 접근 제어도 함께 고려해야 했습니다. 현재 사용자의 커플 정보와 세션의 coupleId를 비교해 세션 접근을 제한했고, 한 커플에 동시에 여러 PENDING/ACTIVE 세션이 생기지 않도록 기존 세션을 반환하는 방식으로 중복 생성을 막았습니다.
또한 위치 공유 과정에서 발생하는 좌표, 메모, 사진, 만남 완료 이벤트를 각각 따로 관리하지 않고, SessionPoint라는 공통 히스토리 모델로 통합했습니다. 저장 구조를 하나로 맞춰두어 실시간 지도 표시, 새로고침 후 복원, 세션 종료 후 기록 조회가 같은 데이터 흐름 위에서 동작할 수 있었습니다.
미리보기
모바일 환경에서 실시간 경로와 세션 상태를 확인할 수 있도록 만든 화면입니다.