선택지 200개 대신, 오늘 밤 갈 만한 곳 하나
오늘 밤 파리에서 열리는 행사를 문화권과 분류별로 정리한 무료 지도입니다. 선택지에 파묻히지 않고 고를 수 있도록 만들었습니다.
필요
바쁜 한 주를 보내고 나면 나가고 싶어도, 수백 개의 행사를 훑어보다 지쳐 버립니다. 선택지가 너무 많으면 결국 집에 있게 됩니다.
아이디어
문제는 선택지가 부족한 것이 아니라 너무 많다는 것입니다. 그래서 이 앱은 목록부터 보여 주지 않고, ‘오늘 밤 가까운 곳에서 뭘 할 수 있을까?’라는 질문 하나에서 시작합니다.
만든 것
- 오늘 밤의 행사를 지도 위에 바로 보여 주는 사이트로, 무엇보다 휴대폰을 먼저 생각해 설계했습니다.
- 파리시 공공 데이터, 파리에 있는 외국 문화원(FICEP), 그 밖의 공개 피드에서 행사를 모으고 출처마다 고유한 주기로 갱신하는 자동 수집기.
- 그날의 기분에 따라 고를 수 있도록 출신 문화권과 분류별로 둘러보는 기능.
- 안전장치: 데이터 출처 하나가 멈춰도 마지막 정상 데이터를 계속 보여 주고, 상태 페이지는 멈추는 대신 ‘성능 저하’라고 표시합니다.
결과
- 27,623데이터베이스의 행사 수(2026년 10월 6일 측정)
- 0지도에 위치가 없는 행사
- 4자동으로 결합되는 공공 데이터·공연장 피드 출처(2026년 10월 6일 측정)
2026년 8월 23일부터 eventmap.hamdy-tabsissi.com에서 운영 중입니다. 데이터베이스의 모든 행사가 지도에 표시되고, 데이터는 알아서 갱신됩니다.
직접 확인해 보세요
화면으로 보기
배운 점
제품을 설계하기 전에 데이터부터 시험해야 합니다. 출처를 빠르게 조사해 보니 낭테르는 0건, 몽트뢰유는 14건이었습니다. 그래서 불안정한 스크래퍼를 유지하는 대신 범위를 파리로 좁혔습니다. 그리고 조용한 버그가 서비스 중단보다 더 비쌉니다. 날짜를 텍스트로 비교하는 바람에 일부 행사가 소리 없이 빠지고 있었는데, 테스트에서 발견했습니다.
기술 세부 정보 기술 스택, 아키텍처, 설계 결정 — 기술 담당자용
기술 스택
- Python (FastAPI, asyncio)
- SQLite
- Leaflet + OpenStreetMap
- nginx
- systemd
- Ubuntu 22.04
한눈에 보는 아키텍처
- 방문자의 휴대폰 또는 브라우저
- nginx — 리버스 프록시, 보안 헤더
- FastAPI 앱(uvicorn) — 127.0.0.1에만 바인딩된 systemd 서비스, CPU·메모리 할당량 적용
- SQLite — 행사, 출처, 중복 제거
- 6시간마다 실행되는 수집기 ← 파리시 공공 데이터 + FICEP(OpenAgenda)
작동 방식
- 여러 공개 피드 — Que faire à Paris(파리시, ODbL 라이선스), FICEP, OpenAgenda(.ics) 등 — 를 asyncio로 비동기 수집해 중복을 제거한 뒤 SQLite에 저장합니다. 현재 출처 목록은 /health에서 볼 수 있습니다.
- 출처별로 장애에 강한 방식으로 갱신합니다. 실패한 출처가 기존 데이터를 지우는 일은 없으며, /health가 출처별 상태를 알려 주고 ‘degraded’로 전환됩니다.
- 교외 사이트 13곳을 조사한 결과 쓸 수 있는 피드(.ics, JSON-LD Event)가 하나도 없어, 범위를 낭테르–파리–몽트뢰유에서 파리로 좁혔습니다. 다중 출처 아키텍처는 그대로 준비되어 있습니다.
- 격리된 서비스: 셸이 없는 전용 시스템 사용자, systemd CPU·메모리 할당량, nginx 뒤에서 127.0.0.1에만 바인딩된 애플리케이션.
- 테스트에서 발견한 버그: 날짜를 문자열로 비교해 운영 환경에서 일부 행사가 조용히 누락되었습니다. 수정하고 문서화했습니다.
발생한 문제와 해결
- 2026년 9월 24일부터 10월 5일까지 서버에서 파리시 데이터 피드에 접속할 수 없었습니다(DNS 오류). EventMap은 마지막 정상 데이터를 계속 제공했고, /health는 해당 출처를 밝히며 ‘degraded’를 표시했습니다. 피드가 돌아오자 데이터베이스 제약 조건(삭제 중인 행을 가리키는 중복 항목) 때문에 모든 갱신이 조용히 실패했고, /health는 잘못 ‘ok’를 표시했습니다. 로컬에서 재현해 수정하고 테스트 두 개로 검증한 뒤 당일 다시 배포했습니다. 행사 16,160건이 갱신되었습니다.
아직 부족한 점
- 파리만 지원
- 공공 데이터 피드의 품질에 의존