← 포트폴리오 목록

힐링스팟 지도 검색 서비스

지도와 리스트가 함께 동작하는 지역 기반 마사지샵 검색 모바일 웹을 React + Node.js 기반으로 설계·구현합니다.

지도-리스트 실시간 동기화 엔진 구현지도 뷰포트 변경과 리스트 스크롤을 양방향 바인딩, 마커 클러스터링으로 다수 핀을 그룹화하는 구조 구현
동 단위 다중 필터 쿼리 설계행정구역 계층 테이블 기반 다중 선택 필터 쿼리 설계, URL 쿼리 파라미터로 필터 상태 공유 구조 구현
PWA 오프라인 캐싱 전략 구현Cache First/Network First 전략을 리소스 유형별로 분리 설계, Service Worker 생명주기 관리 구조 구축
서비스 타입Web
업종플랫폼
기술 스택
React 18TypeScriptTailwind CSSNode.jsExpressPostgreSQLPrismaKakao Maps APIPWA (Service Worker)
주요 기능
  • 지도·리스트 통합 검색
  • 동 단위 필터
  • 샵 상세보기
  • 홈 화면에 추가
Overview

프로젝트 개요

범위: 개발, 디자인, 기획

지도와 리스트가 함께 동작하는 지역 기반 마사지샵 검색 모바일 웹을 React + Node.js 기반으로 설계·구현합니다. 로그인 없이 누구나 지도·리스트로 샵을 탐색하고, 동 단위 필터와 상세 페이지의 전화 연결까지 이어지는 원스텝 탐색 플로우를 구현하며, PWA 구조로 홈 화면 설치를 지원합니다.

작업 범위

  • 지도·리스트 통합 검색: 카카오 지도 위에 마사지샵 위치를 마커로 표시하고, 같은 데이터를 리스트 카드로 동시에 보여주어 지도 이동과 리스트 스크롤이 서로 맞물려 동작합니다
  • 동 단위 필터: 고양·파주 권역 내 동 단위로 검색 범위를 좁힐 수 있는 필터를 제공하여 사용자가 원하는 지역의 샵만 빠르게 찾을 수 있도록 구현합니다
  • 샵 상세보기: 상호, 사진, 주소, 영업시간, 소개글을 한 화면에서 확인하고 버튼 한 번으로 바로 전화를 걸 수 있는 상세 페이지를 구현합니다
  • 홈 화면에 추가: 앱스토어 설치 없이 브라우저에서 홈 화면에 추가해 네이티브 앱처럼 실행할 수 있는 구조를 구현합니다

주요 업무

  • 지도·리스트 통합 검색 화면: 지도 뷰포트(bounds) 변경 이벤트를 리스트 컴포넌트에 전달해 동기화하고, 마커 클러스터링과 React Query 캐싱으로 대량 마커 렌더링 부담을 줄이는 구조로 설계합니다
  • 동 단위 필터 화면: 행정구역 계층 테이블과 다중 선택 쿼리, URL 쿼리 파라미터 동기화로 필터 상태를 관리하는 구조를 설계합니다
  • 샵 상세보기 화면: 단일 상세 API 응답으로 필요한 정보를 한 번에 로딩하고, tel: 스킴 링크와 클릭 로깅을 결합한 구조로 설계합니다
  • 홈 화면에 추가 화면: Web App Manifest와 Service Worker 캐싱 전략을 설계하고, beforeinstallprompt 이벤트를 활용한 커스텀 설치 유도 UI를 구현합니다
힐링스팟 지도 검색 서비스
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

지도 좌표 기반 리스트 정렬과 스크롤 동기화 시 성능 저하 없이 실시간 갱신하는 로직 설계

동 단위 행정구역 경계 데이터의 정확한 매핑과 필터 조합 시 검색 결과 정합성 유지

PWA 설치 유도 배너의 브라우저별(iOS Safari/Android Chrome) 동작 차이를 흡수하는 대응 로직

비회원 다건 조회 트래픽 증가 시 지도 API 호출 비용을 고려한 캐싱 전략 설계

구현 내용

핵심 기능 상세

핵심 기능 1

지도·리스트 통합 검색

카카오 지도 위에 마사지샵 위치를 마커로 표시하고, 같은 데이터를 리스트 카드로 동시에 보여주어 지도 이동과 리스트 스크롤이 서로 맞물려 동작합니다.

  • Kakao Maps JavaScript SDK 커스텀 마커 클러스터링으로 지도 위 다수 샵 핀을 그룹화해 표시
  • 지도 뷰포트(bounds) 변경 이벤트와 리스트 스크롤을 양방향 동기화해 지도 이동 시 리스트가 자동 갱신되는 구조 설계
  • React Query로 샵 목록 API 응답을 캐싱하고 staleTime을 분리 설정해 지도 재조회 빈도를 최소화

지도 마커 클릭과 리스트 카드 hover를 상호 연동해 지도-리스트 간 실시간 동기화 UX를 구현합니다.

지도·리스트 통합 검색
지도·리스트 통합 검색 실제 화면
핵심 기능 2

동 단위 필터

고양·파주 권역 내 동 단위로 검색 범위를 좁힐 수 있는 필터를 제공하여 사용자가 원하는 지역의 샵만 빠르게 찾을 수 있도록 구현합니다.

  • 동 단위 행정구역 데이터를 PostgreSQL에 정규화 저장하고 다중 선택 필터 쿼리를 설계
  • 필터 상태를 URL 쿼리 파라미터와 동기화해 필터링 결과를 링크로 공유 가능하도록 구현
  • Zustand로 필터 전역 상태를 관리해 지도·리스트·필터 칩 UI 간 상태 일관성 유지

다중 동 선택 필터와 검색 결과 카운트를 실시간 반영하는 필터링 로직을 구현합니다.

동 단위 필터
동 단위 필터 실제 화면
핵심 기능 3

샵 상세보기

상호, 사진, 주소, 영업시간, 소개글을 한 화면에서 확인하고 버튼 한 번으로 바로 전화를 걸 수 있는 상세 페이지를 구현합니다.

  • 샵 상세 API에 사진·영업시간·소개글을 포함한 단일 엔드포인트를 설계해 상세 페이지 로딩을 단순화
  • tel: 스킴 링크로 즉시 다이얼러 연결, 클릭 이벤트를 별도 로그 테이블에 기록하는 구조 설계
  • 이미지 갤러리에 Lazy loading과 Intersection Observer를 적용해 초기 렌더 부담 경감

비회원도 로그인 없이 상세 정보를 즉시 조회하고 전화 연결까지 이어지는 원스텝 플로우를 구현합니다.

샵 상세보기
샵 상세보기 실제 화면
핵심 기능 4

홈 화면에 추가

앱스토어 설치 없이 브라우저에서 홈 화면에 추가해 네이티브 앱처럼 실행할 수 있는 구조를 구현합니다.

  • Service Worker 캐싱 전략(정적 자원은 Cache First, API 응답은 Network First)을 분리 설계
  • Web App Manifest로 아이콘·스플래시·전체화면 모드를 구성해 네이티브 앱과 유사한 진입 경험 구현
  • beforeinstallprompt 이벤트를 감지해 커스텀 설치 유도 배너를 자체 구현

앱스토어 등록 없이 홈 화면 추가만으로 네이티브 앱과 유사한 진입 경험을 제공하는 PWA 구조를 구현합니다.

홈 화면에 추가
홈 화면에 추가 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

요구사항 분석 및 지도 데이터 스키마 설계 · 2026.09

샵 위치·영업정보 DB 스키마 설계, Kakao Maps 좌표 체계 정의 및 동 단위 행정구역 테이블 매핑

STEP 2

지도·리스트 통합 프론트엔드 개발 · 2026.09

React 기반 지도+리스트 동기화 뷰 구현, Tailwind CSS로 모바일 우선 반응형 UI 설계

STEP 3

백엔드 API 및 필터링 로직 개발 · 2026.09

Express 기반 샵 조회·필터 API 14~18개 엔드포인트 구현, PostgreSQL 인덱싱 최적화

STEP 4

PWA 구성 및 통합 테스트 · 2026.09

Service Worker·Manifest 구성, 모바일 브라우저 크로스 테스트 및 지도 성능 검증

프로젝트 성과

주요 성과

지도-리스트 실시간 동기화 엔진 구현지도 뷰포트 변경과 리스트 스크롤을 양방향 바인딩, 마커 클러스터링으로 다수 핀을 그룹화하는 구조 구현
동 단위 다중 필터 쿼리 설계행정구역 계층 테이블 기반 다중 선택 필터 쿼리 설계, URL 쿼리 파라미터로 필터 상태 공유 구조 구현
PWA 오프라인 캐싱 전략 구현Cache First/Network First 전략을 리소스 유형별로 분리 설계, Service Worker 생명주기 관리 구조 구축
비회원 상세 조회 원스텝 플로우 설계인증 없이 상세·전화연결까지 이어지는 원스텝 UX 설계, tel: 링크 클릭 로깅 구조 구현
Highlights

기술적 주안점

  • 지도 마커 클릭과 리스트 카드 hover를 상호 연동해 지도-리스트 간 실시간 동기화 UX를 구현합니다
  • 다중 동 선택 필터와 검색 결과 카운트를 실시간 반영하는 필터링 로직을 구현합니다
  • 비회원도 로그인 없이 상세 정보를 즉시 조회하고 전화 연결까지 이어지는 원스텝 플로우를 구현합니다

유사한 프로젝트를 기획하고 계신가요?

FIRSTPIP이 개발 범위와 로드맵을 함께 정리해드립니다

무료 상담 시작하기