team project
KickEat
취향과 위치를 기반으로 서울시 음식점을 추천하는 맛집 탐색 서비스
메인01개요
서울시 공공데이터의 음식점 정보를 기반으로, 사용자가 고른 음식 취향과 등록한 주소를 조합해 음식점을 추천합니다. 공공데이터에 없는 메뉴·사진 정보는 카카오맵 API와 크롤링으로 보완했고, 리뷰·찜·게시판 등 커뮤니티 기능을 함께 제공합니다.
02기술 스택
Frontend
ReactReact RouterTanStack Querystyled-componentsCKEditor 5Chart.js
Backend
Spring BootSpring Data JPA
Data / API
서울시 공공데이터Kakao Maps SDK (Places)Selenium (Headless Chrome)Daum 우편번호
03데이터 수집 구조
서울시 공공데이터
약 12만 개 음식점 · 위치 · 카테고리
↓→
Kakao Places 검색
상호명 → 카카오맵 장소 ID
↓→
Selenium 크롤링
메뉴 · 사진 · 영업 정보
카카오맵 API + Selenium04주요 기능
맛집 추천
- 선호 음식을 카트에 담으면 회원 주소와 선택한 카테고리로 음식점 추천
- 갱신 버튼으로 다른 추천 받기, 주소 검색으로 다른 지역 기준 추천
음식점 찾기 · 상세
- 상세 카테고리 + 검색어 검색, 조회순·평점순·리뷰순·찜순 정렬, 찜 등록
- 카카오맵에서 수집한 메뉴·사진·영업 정보, 회원 주소와의 거리, 리뷰 작성·조회
커뮤니티
- 자유게시판: 관리자 공지 상단 고정(2개), 댓글, 제목·내용 검색
- 이벤트 게시판, 1:1 문의, 쪽지·신고, 마이페이지
맛집 추천
음식점 찾기
음식점 상세05DB 설계
ERD06트러블슈팅
공공데이터만으로는 메뉴 · 사진 정보가 없음
- 문제
- 서울시 공공데이터의 약 12만 개 음식점 정보는 위치·카테고리·상호명 정도만 제공
- 원인
- 상세 페이지에 필요한 메뉴·사진·영업시간은 공공데이터에 존재하지 않음
- 해결
- 상호명으로 Kakao Places 키워드 검색을 해 카카오맵 장소 ID를 얻고, 서버에서 Selenium(Headless Chrome)으로 해당 장소 페이지를 크롤링해 상세 정보를 채움
07회고
- 상세 페이지 요청마다 Headless Chrome을 띄워 크롤링하는 구조라 응답이 느림 — 수집 결과를 DB에 캐싱하거나 배치로 미리 수집하는 방식이 적합
- 외부 사이트 구조에 의존하는 크롤링은 페이지가 바뀌면 바로 깨짐 — 실패 시 기본 정보만 보여주는 대체 처리 필요