프로젝트 소개 (Project Overview)
'캠핑가자'는 한국관광공사의 GoCamping API를 기반으로 전국 캠핑장 정보를 한눈에 확인하고 탐색할 수 있는 웹 어플리케이션입니다. 사용자에게 빠른 반응 속도와 안정적인 데이터를 제공하는 것을 최우선 목표로 설계되었습니다.
💡 왜 만들었나요?
공공데이터 API는 응답이 느리거나 일시적으로 중단될 수 있습니다. 이를 극복하기 위해 Server-side Caching 레이어를 도입하여, API 장애 상황에서도 사용자에게 끊김 없는 탐색 경험을 제공하고자 했습니다.
시스템 아키텍처 (System Architecture)
핵심 기술 스택 (Tech Stack)
Frontend
React 19 Vite React Router Context API Tailwind CSS Fast Refresh와 모던한 상태 관리를 통한 경쾌한 UX 제공.
Backend
Node.js Express MongoDB (Mongoose) JWT Auth 인증 시스템 및 고성능 캐시 레이어 구축.
Integrations
Kakao Maps SDK Kakao Share OpenWeather API Axios 외부 API와의 안정적인 통신 및 SDK 캡슐화.
Utilities
Lodash Puppeteer GIF Encoder Prettier 코드 품질 유지 및 자동화된 문서화 도구 활용.
주요 기능 및 해결 과제 (Features & Solutions)
🛡️ 회원 시스템 및 보안 (Auth & Security)
JWT 기반의 토큰 인증 시스템을 구축하였습니다. AuthContext를 통해 전역적으로 로그인 상태를 관리하며, 보호된 라우트(Protected Routes) 처리를 통해
사용자 데이터를 안전하게 보호합니다.
⚡ 데이터 가용성 및 성능 (Availability)
GoCamping API의 응답속도 저하 문제를 해결하기 위해, 서버 기동 시 약 3,000건의 데이터를 선로딩(Preload)하여 인메모리에 저장합니다. 이를 통해 클라이언트 요청 시 50ms 미만의 초고속 응답을 보장합니다.
-
지능형 검색:
Lodash.debounce를 적용하여 사용자 입력 시 불필요한 API 호출을 방지하고 성능을 최적화했습니다. -
무한 스크롤:
Intersection ObserverAPI를 활용하여 장치 자원을 효율적으로 사용하면서 끊김 없는 데이터 브라우징을 구현했습니다. - 컴포넌트 기반 지도 제어: Kakao Maps SDK를 React 라이플사이클에 맞춰 캡슐화하여, 지도 중심 이동(panTo), 마커 클러스터링 기반의 주변 시설 검색을 구현했습니다.
코드 품질 및 구조 (Code Quality & Structure)
📚 유지보수를 고려한 상세한 문서화
모든 핵심 로직에 구체적인 한국어 주석을 작성하여, 협업 및 미래의 유지보수 효율을 극대화했습니다. Prettier 설정을 강제하여 일관된 코드 스타일을 유지하고 있습니다.
Server Core
campingController.js: 데이터 가공 및 캐시 제어 메커니즘.
index.js: 캐시 선로딩 및 배치 스케줄링.
Client Core
CampingList.jsx: 고성능 목록 필터링 및 무한 스크롤.
CampingDetail.jsx: 복합 SDK 연동 및 지도 제어 로직.
성능 지표 및 개발 품질 (Insight)
Response Time
Local Cache 적용 전 2~3s → 적용 후 30ms 수준으로 대폭 단축.
Load Stability
외부 API 장애 발생 시에도 캐시 데이터를 통해 100% 가용성 유지.
📱 사용자 중심 UX 설계 (UX Considerations)
모바일 환경을 고려하여 모든 버튼은 터치에 최적화된 크기로 설계되었습니다. 특히 상세 페이지의 지도 영역은 스크롤 시 방해되지 않도록 적절한 터치 영역(Sticky Interaction)을 분리하여 구현했습니다.
향후 발전 방향 (Future Roadmap)
- 찜 기능(Favorites): 사용자가 선호하는 캠핑장을 저장하고 마이페이지에서 다시 확인할 수 있는 기능 추가 예정.
- 리뷰 시스템: 각 캠핑장에 대한 사용자들의 실제 후기와 평점을 공유할 수 있는 커뮤니티 기능 확장.
- 예약 연동: 외부 예약 사이트와의 딥링크 연동을 통해 검색부터 예약까지 이어지는 원스톱 서비스 구축.
스크린샷 & 데모 (Animated Demos)