개인 공간 기억 기록

기록된 추억이 지도 위에서 다시 펼쳐지는 개인용 공간 로그 도구, Personal Spatial Memory Log

2026-03-26 (목) 12:29:39 조회 1,448
문의하기
개인 공간 기억 기록
Vite Redis PHP 8.3 (Laravel 13) Blade Alpine.js Axios ES Modules Tailwind CSS v4 Leaflet OpenStreetMap Nominatim Laravel Magic Link Google Identity Services Laravel Reverb Database fallback Reverb (웹소켓)

Personal Spatial Memory Log (Laravel 13)

개인적으로 방문한 곳을 기록하고, 위치 기반으로 다시 찾아볼 수 있도록 만든 간단한 웹 애플리케이션입니다 공개 리뷰 플랫폼이 아니라, "내가 갔던 곳을 나중에 다시 꺼내보기 위한 기록 도구"에 가깝습니다.


What it solves

  • 어디를 갔는지 기억은 나는데, 이름이나 위치가 애매할 때
  • 특정 지역에서 내가 예전에 갔던 곳을 다시 찾고 싶을 때
  • 단순 리스트가 아니라 "지도 기반"으로 회상하고 싶을 때

Core Features

  • 장소 기록 CRUD (이름, 주소, 카테고리, 평점, 방문일, 메모, 재방문 여부)
  • 리스트 + 검색 + 필터 + 정렬
  • 지도 기반 조회 (Leaflet)
  • 현재 위치 기준 "내가 기록한 식당 등 가까운 곳" 조회
  • 간단한 통계 (평균 평점, 카테고리 분포 등)
  • 주소 → 좌표 자동 변환 (비동기 geocoding)
  • 이미지 업로드
  • 매직 링크 로그인 + Google OAuth

Tech Stack

  • Backend: PHP 8.3, Laravel 13
  • Frontend: Blade + Alpine.js + Axios (ES Modules)
  • UI: Tailwind CSS v4
  • Map: Leaflet
  • Build: Vite
  • Auth: Magic Link (Signed URL), Google OAuth, Google Identity Services
  • Realtime: Laravel Reverb (WebSocket)
  • Cache: Redis

wscat -c "wss://map.glitter.kr/app/24d3a763529639ea0d97487ba87db886"

  • Queue: Database (Redis queue 전환 가능)
  • Geocoding: OpenStreetMap Nominatim

Architecture

  • 전형적인 Laravel server-rendered 구조
  • SPA 없이 Blade 기반 + 필요한 부분만 JS로 보강
  • Map / Nearby 기능은 별도 JSON API로 분리

특징적인 흐름

  • Restaurant 모델 중심 구조
  • Observer에서 side-effect 처리
    • 지도 캐시 무효화
    • 좌표 없는 경우 geocoding job dispatch
    • create/update/delete 이벤트 broadcast
  • 지도 데이터는 viewport 기준으로 lazy load

Design Decisions

  • SPA를 쓰지 않고 Blade + Alpine 조합 선택
  • 지도 데이터는 전체 preload 대신 bounds 기반 fetch
  • 외부 API 의존(geocoding)은 요청 흐름에서 분리 (queue 처리)
  • 동일 주소에 대한 좌표는 재사용

Security Notes

  • Laravel 기본 CSRF / auth middleware 사용
  • 세션 쿠키 secure / httpOnly / sameSite 설정
  • API rate limit 적용

Limitations

  • 단일 사용자 기준 설계 (multi-tenant 아님)
  • Restaurant 모델에 로직이 집중되어 있음
  • broadcast 채널은 인증 없이 open 상태
  • CSP는 적용되어 있으나 일부 완화된 설정('unsafe-inline', 'unsafe-eval') 포함

Why this structure

이 프로젝트는 확장형 서비스보다는
"개인이 계속 쓰는 도구"에 맞춰 설계했습니다.

  • 상태 복잡도 낮음 → SPA 불필요
  • 빠른 개발 + 유지보수 용이성
  • 기능보다 사용 흐름 중심

Summary

지도 + 개인 기록을 결합한 단순한 Laravel 애플리케이션입니다.
과하게 확장하지 않고, 필요한 기능만 최소한으로 구현하는 방향을 선택했습니다.


수정 이력 (1)

프로젝트 업데이트 2026-03-27 (금) 19:54:30

# v0.2.0 - 동기화 위치 스키마 및 지도 경로 수정 ## 핵심 변경 - 지도 기반 장소 표시 기능 추가 - 주변 장소 조회 기능 추가 - places 테이블에 위치/지오코딩 관련 컬럼 추가 ## 수정 - DB 스키마 누락으로 인한 500 오류 해결 - 지도 API 401 인증 문제 해결 (api → web 라우트 이동) - 프론트 JS 오류 수정 (mapLoading 등) - 장소 저장 실패 문제 해결 ## 주의 - DB 스키마 변경 포함 (migration 또는 수동 반영 필요)

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!