당신 시간의 알찬 소비  ·  당신 주변의 변화를 관찰합니다

Tech

지금 그 동네, 얼마나 붐빌까? — NEMONE PACE에 실시간 유동인구 정보를 붙이기까지

애들빙자여행러 · 2026년 8월 9일

왜 만들었나

PACE(지금여기)는 "지금 이 순간 가볼 만한 곳"을 추천하는 서비스입니다. 그런데 정작 "지금 거기 사람 많아요?"라는 가장 기본적인 질문에는 답을 못 하고 있었습니다. 팝업스토어는 추천해주면서, 막상 가보면 줄이 얼마나 긴지 몰라 헛걸음하는 경우가 생길 수 있었던 거죠.

마침 서울시가 실시간 도시데이터(생활인구·혼잡도) API를 공개하고 있었습니다. 이걸 붙이면 이 공백을 메울 수 있겠다고 판단해, 성수·홍대·강남·강북 4개 권역에 실시간 혼잡도 카드를 붙이는 작업을 시작했습니다.


1. "이름이 다르다" — 계획대로 되는 게 없었다

가장 먼저 확인한 건 두 가지였습니다. API 키가 있는가, 그리고 원하는 지점의 데이터를 정말 받아올 수 있는가. 다행히 기존에 발급받아둔 키를 그대로 쓸 수 있었습니다.

문제는 그다음이었습니다. 서울시 API는 지점을 정확한 등록 명칭으로만 조회할 수 있는데, 우리가 상식적으로 예상한 이름과 실제 등록명이 계속 어긋났습니다.

우리가 예상한 이름 실제 정답
홍대관광특구 홍대 관광특구 (공백 포함)
이태원 이태원 관광특구
성수카페거리 성수카페거리 (예상대로 맞음)
강남역 강남역 (예상대로 맞음)

이런 어긋남은 문서만 봐서는 걸러지지 않습니다. 그래서 후보 이름을 여러 개 만들어 하나씩 실제로 API를 호출해보며 정답을 찾았습니다. "될 것 같다"가 아니라 "실제로 해보고 확인한다" — 이 원칙을 이번 작업 내내 지켰습니다.


2. 로컬 PC에서 돌리다가, 서버로 옮기다

처음엔 개발자 로컬 컴퓨터에서 1시간마다 데이터를 가져오도록 구현했습니다. 빠르게 검증하기엔 편했지만, 곧 명확한 문제가 보였습니다.

"실시간" 데이터인데, 내 노트북이 꺼지면 업데이트가 멈춘다.

사용자에게 보여주는 정보가 로컬 PC의 전원 상태에 좌우되는 건 서비스로서 말이 안 되는 구조였습니다. 그래서 폴링 작업을 서버 자체의 백그라운드 스케줄러로 완전히 옮겼습니다. 이제 서버가 살아있는 한 데이터는 끊기지 않습니다.

수집 주기는 10분으로 정했습니다. 서울시 원본 데이터 자체가 내부적으로 5분 안팎으로 갱신되기 때문에, 그보다 촘촘하게 조회해봐야 의미는 없고 서버 부담만 늘어난다는 계산이었습니다.


3. 화면에 뭘, 어떻게 보여줄까 — 가장 오래 걸린 부분

데이터를 받아오는 것보다, 좁은 모바일 화면에 무엇을 얼마나 보여줄지가 훨씬 어려운 문제였습니다.

  • 처음엔 혼잡도·인구수·날씨·연령대·성별을 전부 욱여넣었더니, 정작 가장 중요한 "혼잡도"가 화면 밖으로 잘려나가는 문제가 반복됐습니다.
  • 그래서 우선순위를 다시 세웠습니다. 혼잡도와 인구수가 최우선, 나머지(연령대·성별·날씨)는 보조 정보로 격을 낮췄습니다.
  • 성별 표기도 "남성 55% / 여성 45%"를 둘 다 보여주면 줄이 밀려서, 우세한 쪽 하나만 보여주는 식으로 압축했습니다.
  • 메인 화면 상단에는 여러 지역 정보를 순환해서 보여주는 "전광판" 티커를 만들었습니다. 공항 게시판 느낌을 살리려고 split-flap 애니메이션 라이브러리까지 붙여봤는데, 실제 기기에서 확인해보니 레이아웃이 깨졌습니다. 미련 없이 기존 방식으로 롤백했습니다. 새 기술을 써보는 것보다 "실제로 잘 보이는 것"이 우선이라는 판단이었습니다.

이 과정에서 실제 모바일 화면으로 계속 확인하며 수십 차례 미세 조정을 거쳤습니다. 코드가 동작하는 것과, 화면에서 깨지지 않고 예쁘게 보이는 것은 전혀 다른 문제였습니다.


4. 다국어 지원, 그리고 예상 못 한 버그 발견

혼잡도 기능을 한국어·영어·중국어·일본어 4개 언어로 대응하는 김에, 기존 서비스의 다국어 처리 상태도 다시 점검했습니다.

그 과정에서 이번 작업과는 무관해 보이는 오래된 버그를 하나 발견했습니다. 최근 새로 수집한 장소들은 이름이 일본어로도 이미 번역되어 저장되고 있었는데, 정작 화면에는 계속 한국어로만 표시되고 있었던 겁니다. 원인을 추적해보니:

  1. 장소 상세·목록을 조회하는 API가 애초에 일본어 번역 데이터를 응답에 담지 않고 있었고,
  2. 화면을 그리는 컴포넌트 여러 곳에서도 "영어면 영어로, 중국어면 중국어로" 분기 처리는 있는데 일본어 분기만 통째로 빠져 있었습니다.

번역 자체가 안 된 게 아니라, 이미 완성된 번역 데이터가 조회 API와 화면 표시 로직, 두 군데에서 그냥 버려지고 있었던 겁니다. 오늘 작업과는 별개의 문제였지만, 다국어 대응을 점검하는 김에 같이 찾아서 고쳤습니다.


5. 무엇이 완성됐나

  • 성수 / 홍대 / 강남역 / 이태원 / 광화문, 5개 지점의 실시간 혼잡도·인구수 제공
  • 지도 탭에서는 카드 형태로 자세히, 메인 화면에서는 전광판 형태로 요약해서 노출
  • 강남·강북처럼 넓은 권역은 지점을 추가로 늘릴 수 있는 구조로 설계 (예: 강북에 광화문 추가 완료, 향후 확장 가능)
  • 카드를 탭하면 해당 지역의 지도 화면으로 바로 이동
  • 데이터는 서버에서 10분마다 자동 갱신, 4개 언어로 서비스

돌아보며

이번 기능에서 가장 크게 배운 건 "API 연동" 자체보다 검증하는 습관이었습니다. 지점 이름 하나도 문서를 믿지 않고 실제로 호출해서 확인했고, 로컬에서 잘 돈다고 안심하지 않고 서버 이전까지 마무리했고, UI도 코드가 아니라 실제 화면으로 계속 재확인했습니다. 새 기술(split-flap)을 붙였다가 실제로 안 맞으면 미련 없이 되돌린 것도 같은 맥락이었고요. 그 과정에서 뜻밖에 오래된 버그까지 잡을 수 있었던 건 덤이었습니다.

"실시간"이라는 단어를 쓰려면, 정말로 실시간이어야 한다 — 이번 작업 내내 되새긴 원칙입니다.

추천 아이템

서울 나들이 굿즈 보러가기

이 링크는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

# 서울 실시간 유동인구# 성수 혼잡도# 홍대 혼잡도# 강남역 실시간 인구# 이태원 혼잡도 확인# 서울시 실시간 도시데이터 API# 핫플레이스 붐빔 확인# 서울 인구 밀집 지역# 실시간 인구 API 연동# 지금여기 PACE

COMMENTS

의견을 남기려면 로그인이 필요합니다.

NO COMMENTS YET.
Nemone Store Banner