서울시 25개 전체 구 카페정보를 최대한 많이 수집하는 전략?

2025. 10. 1. 17:07·2025/[풀스택]SeSAC 웹개발자 7기
반응형

지금처럼 “강남구 하나만”은 간단히 API 돌리면 되지만, 서울시 25개 구 전체를 실서비스 수준으로 커버하려면 조금 전략적으로 접근해야 합니다.


🚨 카카오 API의 구조적 한계

  • 한 번 요청으로 size ≤ 15
  • page ≤ 45
  • 즉, 최대 15 × 45 = 675개
  • **정렬 기준 변경(accuracy vs distance)**은 결과 순서만 바뀌고 총량 제한은 그대로

👉 즉, 구 단위 좌표 1개만 주면 많은 카페가 누락될 수밖에 없습니다.


✅ 실서비스처럼 최대한 많이 모으는 전략

1. 좌표 분할 (Grid Search / 격자 검색)

  • 각 구를 중심좌표 하나로만 돌리지 말고 → 구역을 여러 개 격자로 나눠서 검색
  • 예: 강남구 → 북쪽/중앙/남쪽 3개 좌표 잡고 각 2km 반경
  • 이렇게 하면 675개 제한을 여러 번 돌려 합칠 수 있음
  • 중복 데이터는 DB 저장 시 id(카카오 place_id)나 place_url로 제거

2. 행정구역 폴리곤 활용

  • 서울시 행정구별 경계 좌표(GeoJSON) 데이터를 구해서, 각 구를 일정한 grid 좌표로 나눔
  • 구마다 9~16개 중심점 생성 → API 호출 → 합치기
  • (서울 열린데이터광장 등에서 GeoJSON 제공)

3. 좌표 중심 검색 + 카테고리 검색 혼합

  • 지금은 category_group_code=CE7 (카페)만 쓰고 있는데,
  • 특정 키워드(“카페”, “커피”, “브런치”) 검색도 병행하면 놓치는 업장 보완 가능

4. 데이터 적재 (DB)

  • MySQL/Postgres 테이블에 INSERT할 때 PRIMARY KEY를 카카오 id(또는 place_url)로 설정
  • ON DUPLICATE KEY UPDATE 전략으로 중복 제거 → 최신화 유지
  • 이렇게 하면 격자 검색으로 중복된 카페가 들어와도 DB는 “한 번만” 저장

5. 자동 업데이트

  • 크롤러를 정기 실행 (예: 2주마다 cron job)
  • 새로 추가된 카페는 DB에 추가, 사라진 카페는 status=deleted 플래그로 표시
  • 서비스에선 항상 최신 DB를 읽어서 제공

📊 아키텍처 예시

  1. Python 크롤러 (requests) → 카카오 API 호출 (격자 단위)
  2. 데이터 가공 (중복 제거, 필드 정리)
  3. DB 저장 (MySQL/Postgres)
    • cafes (기본 정보)
    • cafe_images (이미지 URL, 추후 크롤링/업로드)
    • cafe_reviews (후기 요약, 별도 수집 로직)
  4. 백엔드 API (Spring/Python FastAPI) → DB 조회/관리
  5. 서비스 프론트엔드 → 지도 + 카페 정보 표시

🚀 현실적으로 가장 좋은 방법

  • 카카오 API만 쓰되, 서울시 각 구를 격자 분할해서 호출 + DB deduplication
  • 정기적으로 스케줄링해서 최신 데이터 유지
  • (추가) 부족하면 네이버 플레이스/구글맵 크롤링으로 보강 가능

👉 정리:
서울시 전체 카페 데이터를 실서비스 수준으로 모으려면,

  • 좌표 분할(grid 방식)으로 카카오 API를 여러 번 호출하고
  • DB에서 deduplication 처리
  • 정기 업데이트(cron job)
    이 3단계를 구현해야 합니다.
저작자표시 비영리 변경금지 (새창열림)

'2025 > [풀스택]SeSAC 웹개발자 7기' 카테고리의 다른 글

✅ DTO란?  (0) 2025.10.09
[b1a4 팀프로젝트 TIL] 251001수(6) 배느실  (0) 2025.10.01
API 기반 크롤링?  (0) 2025.10.01
python 크롤링?  (1) 2025.10.01
관리자만 접근 가능한 인가 설정하기  (0) 2025.09.26
'2025/[풀스택]SeSAC 웹개발자 7기' 카테고리의 다른 글
  • ✅ DTO란?
  • [b1a4 팀프로젝트 TIL] 251001수(6) 배느실
  • API 기반 크롤링?
  • python 크롤링?
d0yclub
d0yclub
2024.06.17 open
  • d0yclub
    개발꿈나무 김도이
    d0yclub
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 서재 (0)
      • 2024 (13)
        • [FE]Next.js2기 (6)
        • [FE]우아한테크코스7기-프리코스 (6)
      • 개발공부 (25)
        • HTML CSS (6)
        • JavaScript (2)
        • React.js (4)
        • DB - mySQL (0)
        • error.log (8)
      • 2025 (32)
        • 멋쟁이사자처럼 프론트엔드스쿨플러스 4기 (1)
        • [풀스택]SeSAC 웹개발자 7기 (29)
        • 개인프로젝트 (1)
        • 팀프로젝트 (1)
      • 자료구조&알고리즘 풀이 (3)
        • 프로그래머스 (2)
      • 2026 (0)
        • [AI]SeSAC microsoft AI엔지니어 .. (0)
        • 개인프로젝트 (0)
        • 팀프로젝트 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    TIL
    RDS
    유데미
    웅진씽크빅
    미래내일일경험
    GCP
    부트캠프
    udemy
    트러블슈팅
    KPT회고
    KPT
    팀프로젝트
    DTO
    프로젝트캠프
    Next.js
    배느실
    EC2
    스나이퍼팩토리
    회고
    프론트엔드개발자양성과정
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
d0yclub
서울시 25개 전체 구 카페정보를 최대한 많이 수집하는 전략?
상단으로

티스토리툴바