서울팝 · 위치 기반 역사 탐방

기간  — 

사용자 위치를 따라 서울의 문화재와 사적지를 탐방하는 서비스입니다. 서버와 CI/CD는 혼자 구축했습니다.

팀장과 백엔드 리드로 회원⁠·⁠역사 조회 API와 인프라 담당

Java 17Spring Boot 3.2.5Spring Data JPASpring SecurityQuerydslMySQL 8.0Redis 7.2AWS S3AWS EC2Nginx Proxy ManagerJenkinsDockerUber H3

  • 서울 역사 지도
  • GPS 기반 주변 문화재⁠·⁠사적지 알림
  • 카메라 AR과 실시간 콘텐츠 렌더링
  • 위치⁠·⁠경로 안내
  • 크롤링한 데이터로 만든 역사 상세 정보
  • 방문 도감 스탬프

실시간 위치에 따른 거리 계산

문제
사용자가 움직일 때마다 주변 문화재⁠·⁠사적지 좌표를 다시 계산해야 했습니다. 최단 거리를 매번 구하면 계산 비용이 빠르게 커져, 단순 탐색보다 나은 방식이 필요했습니다.
해결
팀에서 사용자 좌표 기반 부분 탐색, GeoHash, Uber H3를 비교했습니다. 실시간 근접성 계산과 정확성, 편의성을 따져 H3를 쓰기로 했습니다. 여러 스케일을 실험해 약 200m 범위로 맞췄고, 거리 계산 구현은 팀원이 맡았습니다.

컨테이너 로그 추적

문제
Portainer로 컨테이너 로그를 보다 보니 컨테이너가 늘수록 추적이 어려워졌습니다. Portainer 콘솔의 스크롤 문제 때문에 이전 로그를 찾기도 불편했습니다.
해결
여러 도구를 살펴보고, 간편하면서 여러 컨테이너 로그를 함께 보는 Dozzle을 도입했습니다. 트랜잭션별 로그를 한 화면에서 볼 수 있게 됐고, 팀원 모두가 같은 화면에서 로그를 확인했습니다.

아키텍처

GitLab과 Jenkins, Docker 위의 Spring Boot, MySQL, Redis, S3를 보여 주는 서울팝 배포 구조도
코드 푸시부터 배포까지의 흐름입니다.
서울팝 소개와 사적지 지도를 나란히 배치한 커버
서비스 소개와 지도를 담은 서울팝 커버
사적지가 군집으로 표시된 서울팝 지도 화면
지도 위에서 선택한 사적지의 사진과 이름이 보이는 서울팝 화면
과거 사진을 현재 풍경 위에 겹쳐 보는 서울팝 화면
사적지 요약과 설명을 보여 주는 서울팝 상세 화면