[portfolio](https://geonwoo.kim/en/portfolio) › SSAFY

# seoulpop · location-based history walks

https://geonwoo.kim/en/portfolio/seoulpop

Period: 2024.04 — 2024.05

seoulpop is a walking guide to Seoul's heritage and historic sites that follows the user's location. I set up the servers and CI/CD alone.

Team and backend lead for member and history lookup APIs and infrastructure

- [github](https://github.com/seoulpop/seoulpop-be)

Team: 6 people · Backend 3, frontend 3

Role: Team lead · Backend lead · Server and CI/CD · Member API · Heritage and historic site lookup

Java 17 · Spring Boot 3.2.5 · Spring Data JPA · Spring Security · Querydsl · MySQL 8.0 · Redis 7.2 · AWS S3 · AWS EC2 · Nginx Proxy Manager · Jenkins · Docker · Uber H3

- Seoul history map
- GPS alerts for nearby heritage and historic sites
- Camera AR with real-time content rendering
- Location and route guidance
- History details built from crawled data
- Visit stamp collection

## Distance calculations as users move

Problem: Coordinates of nearby heritage sites needed recalculating whenever a user moved. Finding the shortest distance every time grew costly fast, so we needed something better than a simple search.

Solution: The team compared partial search around the user's coordinates, GeoHash and Uber H3. Weighing real-time proximity, accuracy and ease of use, we chose H3. We tested several scales and settled on about 200 m, and a teammate implemented the distance calculation.

## Tracing container logs

Problem: Logs became harder to trace in Portainer as the number of containers grew. Scrolling problems in the Portainer console also made older logs hard to find.

Solution: After looking at several tools, I introduced Dozzle, which is simple to run and shows logs from many containers together. Logs for each transaction could be read on one screen, and the whole team checked logs on the same view.

## Architecture

seoulpop deployment diagram showing GitLab, Jenkins, Docker, Spring Boot, MySQL, Redis and S3

Flow from code push to deployment

seoulpop cover with an introduction beside a map of historic sites

seoulpop cover with an introduction and map

seoulpop map screen with clustered historic sites

seoulpop map with the selected historic site photo and name

seoulpop camera view overlaying a past photo on the present street

seoulpop site detail screen with summary and description


[underthekey · custom keyboard platform](https://geonwoo.kim/en/portfolio/underthekey) · [lyricit · real-time game built on song lyrics](https://geonwoo.kim/en/portfolio/lyricit)
