// projects/cafe-gamsugwang

카페감수광

제주 카페 리뷰와 위치 데이터를 기반으로 취향에 맞는 카페를 추천하는 서비스

completedRecommendation5명
role
데이터 수집·전처리·정제 파이프라인 담당
impact
47,190 좌표, 3,950 카페, 22,144 리뷰, 30,336 추천 키워드 정리
proof
Kakao 45개 제한 대응, 200m grid + GeoJSON, Selenium retry, KR-SBERT/TF-IDF
카페 데이터3,950개
리뷰 데이터22,144개
근거 자료2
근거 보기

Project.java

project_name카페감수광
period_team2025.05.12 ~ 2025.06.10 / 5명
purpose위치·리뷰 키워드 나열을 넘어, 취향과 탐색 맥락에 맞춘 제주 카페 발견
goal카카오맵 API · 웹 크롤링 · 한국어 리뷰 키워드 추출 · 추천 API 연결. 지도·키워드·테마·위치 기반 탐색 흐름.
development_issue카카오맵 API 응답량 제한, 크롤링 실패, 짧고 반복적인 한국어 리뷰. 추천용 정제 데이터 확보 난이도.
results
  • FastAPI 데이터 처리 서버와 Spring Boot 서비스 서버 분리
  • 제주도 검색 좌표 47,190개 기준 카페 데이터 수집
  • 카페 3,950개, 리뷰 22,144개 정리
  • 80,601개 원천 키워드 → 30,336개 최종 키워드 정제

Role.md

roleData pipeline & recommendation backend
contribution데이터 수집과 추천 품질 담당. FastAPI 데이터 처리 서버와 Spring Boot 서비스 서버 분리, 리뷰 키워드 추출 파이프라인과 실시간 작업 상태 조회 설계.
implemented_features
  • 카카오맵 기반 카페 검색과 Selenium 상세 크롤링
  • 카페 목록/상세 조회, 검색, 자동완성, 수정 제안
  • 위치 기반 추천, 키워드 기반 추천, 사용자 정보 기반 맞춤 추천
  • Kiwi 형태소 분석, KR-SBERT 임베딩, TF-IDF 대표 키워드 선정
  • 비동기 크롤링 작업 상태 저장과 진행률 조회
personal_achievements
  • 제주 전체 수집 범위의 격자 기반 분할, API 응답 제한 보완
  • 짧은 한국어 리뷰 → 추천 가능한 키워드 데이터 정제 흐름
  • 장기 실행 크롤링 작업의 Redis 상태 저장 분리, 사용자 대기 흐름 감소

TechDecision.md

Backend

Java 17Spring Boot 서비스 서버 표준 런타임
Spring Boot 3.4.5인증, 카페, 추천, 리뷰, 북마크, 피드, 사용자 API의 일관된 제공
Spring Security이메일 로그인과 JWT 인증 흐름
Spring Batch수집·정제 데이터 처리 흐름의 배치 작업 분리

AI

Python 3.11 + FastAPI크롤링·키워드 분석용 Python 데이터 처리 API 분리
KiwiPipy한국어 리뷰 후보 키워드 추출
KR-SBERT리뷰 키워드 의미 유사도 임베딩 비교
TF-IDF클러스터별 대표 키워드 선정

Data

Spring Data JPA카페, 리뷰, 사용자, 북마크 도메인의 관계형 모델 관리
MySQL서비스 도메인의 정형 데이터 저장소
Elasticsearch카페 검색과 자동완성용 검색 저장소
Selenium카카오맵 상세 페이지 리뷰 데이터 수집

Infra

Redis비동기 크롤링과 키워드 분석 작업의 진행 상태 저장
Docker백엔드와 데이터 처리 서버 실행 환경 재현
AWS S3이미지와 정적 자산 저장소

Test

JUnit 5카페 도메인과 검색·추천 API 회귀 검증

Docs

Swagger팀원 확인용 백엔드 API 계약 문서화

FastAPI와 Spring Boot 서버 분리

decision크롤링·키워드 분석은 FastAPI, 인증·카페·추천 서비스 API는 Spring Boot
reasonPython NLP/크롤링 생태계 활용 + 서비스 도메인·인증의 Spring 기반 안정화
alternativesSpring 단일 서버에서 Python 프로세스 호출, FastAPI 단일 서버
trade_off런타임 경계·API 계약 관리 비용 증가 vs 데이터 처리/서비스 도메인 책임 명확화
verification크롤링 서버 단위 테스트와 Spring 도메인 테스트 분리, 실패 범위 확인
ownership직접 구현/결정

제주 좌표 격자 기반 수집

decision제주도 좌표 격자 분할, 지역 단위 반복 검색
reason카카오맵 API 단일 검색 응답량 제한, 전체 카페 일괄 수집 어려움
alternatives행정동 키워드 수동 수집, 검색 결과 pagination만 사용
trade_off좌표 생성·중복 제거 비용 증가 vs 누락 가능성 감소
verification수집 카페 수, 실패 ID 재시도 결과, 중복 제거 후 개수 기록
ownership직접 구현/결정

키워드 정제 후 추천 데이터로 사용

decision리뷰 원문 대신 형태소 분석, 임베딩, 클러스터링, TF-IDF 기반 키워드 정제
reason짧고 반복 표현이 많은 리뷰, 원문 그대로 추천 특징화 어려움
alternatives리뷰 전문 임베딩만 사용, 수동 태그 입력
trade_off파이프라인 복잡도 증가 vs 사람이 이해 가능한 추천 근거 키워드 확보
verification원천/최종 키워드 수, 샘플 카페 대표 키워드 비교
ownership직접 구현/결정

Problems.md

카카오맵 API 응답량 제한 대응

problem단일 검색 결과 제한으로 제주 전체 카페 안정 수집 어려움
approach제주도 행정구역 + 격자 좌표 기준 탐색 범위 분할, 반복 검색
causeAPI 검색 반경·응답 개수 제한, 넓은 영역 검색 결과 누락 가능성
solution200m 격자 + GeoJSON 육지 필터링 기반 검색 좌표, 실패 ID 별도 재시도
result47,190개 좌표 탐색, 카페 3,950개와 리뷰 22,144개 수집

한국어 리뷰 키워드 파이프라인 설계

problem짧고 반복어가 많은 리뷰 원문, 추천 직접 사용 어려움
approach형태소 분석 → 불용어 필터링 → 임베딩 → 클러스터링 → 대표 키워드 선정
cause감성 표현과 일반 단어 혼재, 추천 품질 흔들림 가능성
solutionKiwiPipy · KR-SBERT · HDBSCAN · TF-IDF 연결, 추천 가능한 키워드 데이터 정리
result80,601개 원천 키워드 → 30,336개 최종 정제 키워드 축소

Evidence/

Architecture

Architecture

Next.js 클라이언트 → REST API 서버, Python Crawler/NLP 파이프라인과 CafeDocument 동기화 배치, Kakao·지도·임베딩 외부 연동, MySQL·ES(검색·Geo·Vector) 데이터 레이어

ERD

ERD

사용자·카페·리뷰·키워드·메뉴·관심목록과 ES(cafeDocument·keywords·address) 검색 인덱스 구조

카페 데이터

3,950개

카카오맵 API와 크롤링으로 정리한 제주 카페 수.

리뷰 데이터

22,144개

추천 키워드 추출에 사용한 리뷰 데이터 수.

키워드 정제

80,601개 -> 30,336개

원천 추출 키워드에서 최종 정제 키워드로 축소.

검색 좌표

47,190개

200m 격자와 GeoJSON 육지 필터링 기반 좌표 수.

Retrospective.md

learned

  • 추천 품질의 선행 조건: 모델보다 입력 데이터 품질과 재현 가능한 수집 절차
  • 장기 실행 크롤링 작업: 동기 API 흐름 분리, 실패·진행률 관리 용이성

regrets

  • 크롤러 원본 저장소의 대용량 자산 혼재, Git LFS/별도 저장소 전략 지연
  • 추천 품질의 사용자 행동 지표 검증 단계 미연결

improvements

  • 크롤링 데이터셋 버전과 재수집 절차 문서화
  • 추천 결과 클릭·북마크 후속 지표 추가, 품질 검증

collaboration

프론트 노출 방식 기준 추천 API 응답 조정. 키워드, 지도, 북마크 흐름 정합.

STAR.md

리뷰 데이터를 추천 가능한 키워드로 정제

Situation짧고 반복 표현이 많은 제주 카페 리뷰, 원문 기반 추천 근거화 어려움
Action형태소 분석 · 불용어 필터링 · 임베딩 · 클러스터링 · TF-IDF 선정 연결
Result80,601개 원천 키워드 → 30,336개 최종 키워드, 카페 추천용 데이터 형태 정리
LearningAI 추천 기능의 우선순위: 알고리즘 이름보다 데이터 수집·정제·검증 흐름