지도 업체 정보 수집 자동화

데이터 · 크롤링6분 읽기

지도 업체 정보 수집 자동화 소개 영상

문제

이 고객은 해외 시장의 업체 목록을 대량으로 확보해야 하는 사업자입니다. 처음에는 지도 서비스의 공식 API를 쓰고 있었는데, 여기에 구조적인 한계가 있었습니다. 하나의 키워드로 한 지역을 조회하면 스무 개 안팎만 돌려주고 그 이상은 나오지 않습니다. 그래서 담당자는 주소를 잘게 쪼개고 한식, 중식, 양식처럼 업종 키워드를 잔뜩 붙여 수백 개의 조합을 만든 뒤 하나씩 돌리고 있었습니다. 그렇게 해도 누락은 계속 남았고 결과를 합치고 중복을 지우는 일이 또 다른 일감이 됐습니다.

문제의 뿌리는 개수 제한 자체가 아니라 접근 방식이었습니다. 한 화면에 담기는 결과 수가 정해져 있다면 화면을 좁히면 됩니다. 넓은 지역을 한 번에 조회해 스무 개만 건지는 대신, 지역을 작은 칸으로 나눠 칸마다 조회하면 각 칸의 업체는 대부분 담깁니다. 문제는 어느 칸이 붐비고 어느 칸이 한산한지 미리 알 수 없다는 점이었습니다. 도심 한 블록에는 식당이 수백 개지만 외곽 한 칸에는 몇 개뿐이라, 모든 칸을 같은 크기로 나누면 도심은 여전히 누락되고 외곽은 헛돕니다.

수집만 문제가 아니었습니다. 같은 업체가 인접한 칸에 걸쳐 여러 번 잡히고 지도 목록은 스크롤할수록 지나간 항목을 화면에서 지워 버려 끝까지 훑기가 까다로웠습니다. 게다가 이 작업은 몇 시간씩 걸리므로 중간에 멈추면 처음부터 다시 하는 일이 없어야 했고 공개된 정보를 수집하더라도 상대 서버에 무리를 주지 않는 속도와 예절이 필요했습니다. 로그인도 우회도 아닌, 사람이 지도를 열람하는 것과 비슷한 방식으로 넓은 지역을 성실하게 훑는 도구가 목표였습니다.

접근

기능

적응형 그리드로 넓은 지역을 빠짐없이 훑기

수집할 지역의 경계 상자를 작은 칸으로 나눠 칸마다 조회합니다. 한 칸에서 결과가 기준치를 넘어 아직 다 못 담은 것으로 보이면 그 칸만 네 개로 다시 쪼개 재조회합니다. 붐비는 도심은 더 잘게, 한산한 외곽은 성기게 나뉘어, 개수 제한을 억지로 우회하지 않고도 구역 전체를 성실하게 덮습니다.

핵심 아이디어는 한 번에 담기는 결과 수가 정해져 있다는 사실을 역이용하는 것입니다. 넓게 보면 스무 개에서 잘리니, 각 조회 화면이 그 한계 아래로 내려올 때까지 지역을 좁힙니다. 도심의 한 칸이 여전히 붐비면 넷으로 쪼개고 그 조각이 또 붐비면 다시 넷으로 쪼갭니다. 반대로 결과가 얼마 없는 칸은 거기서 멈춥니다. 이렇게 하면 필요한 곳에만 조회를 집중해 헛도는 조회를 줄이면서 누락을 메웁니다. 사용자는 한국의 열일곱 개 시도, 일본의 마흔일곱 개 도도부현, 미국의 쉰 개 주 중에서 지역을 고르거나 위경도로 직접 영역을 지정하고 업종 키워드만 넣으면 됩니다.

기능

여러 브라우저 동시 수집과 이어받기

최대 열 개의 브라우저를 동시에 띄워 칸을 나눠 맡깁니다. 수집 중에는 진행한 칸과 이미 만난 업체 식별자를 주기적으로 체크포인트에 원자적으로 저장하므로, 중간에 멈추거나 프로그램을 닫아도 다음 실행에서 중단 지점부터 이어집니다. 몇 시간짜리 작업을 처음부터 다시 하는 일이 없습니다.

각 브라우저가 맡은 칸을 조회하면 목록을 끝까지 스크롤하며 업체를 뽑아냅니다. 지도 목록은 스크롤이 진행되면 지나간 항목을 화면에서 지우는 방식이라, 스크롤이 끝난 뒤 한 번에 읽으면 앞쪽이 사라져 있습니다. 그래서 스크롤을 진행하는 매 단계마다 그 시점의 목록을 파싱해 누적하고 새 결과가 일정 횟수 이상 나오지 않으면 그 칸을 다 훑은 것으로 보고 마칩니다. 뽑아낸 각 업체에서는 상호, 주소, 별점, 리뷰 수, 업종 분류, 지도 링크와 고유 식별자를 읽고 상세 모드를 켜면 각 업체 페이지를 방문해 전화번호와 홈페이지까지 채웁니다.

기능

중복 제거와 데이터 정규화, 그리고 CSV

같은 업체가 인접한 칸에 걸쳐 여러 번 잡혀도 고유 식별자로 전역에서 한 번만 남깁니다. 상호와 주소, 별점, 리뷰 수 같은 값은 한국어, 일본어, 영어 표기를 모두 감안해 정규화하고 영업시간이나 가격 같은 잡음은 주소로 오인하지 않게 걸러 냅니다. 결과는 엑셀에서 바로 열리는 CSV로 한 건씩 즉시 기록됩니다.

공개 정보를 수집하더라도 상대 서버를 존중하는 것이 이 도구의 원칙입니다. 조회 사이에는 매번 무작위 간격을 두어 사람이 지도를 넘겨 보는 속도에 가깝게 움직이고 일시적인 오류는 잠시 기다렸다가 다시 시도하되 같은 칸이 계속 실패하면 몇 번 만에 실패로 격리해 전체가 멈추지 않게 합니다. 접속이 과하다는 신호가 감지되면 그 즉시 수집을 멈추고 물러섰다가 재개하도록 만들어, 서비스 약관과 상대 서버의 부담을 함께 고려했습니다. 우회 기법으로 제한을 뚫는 방향이 아니라, 성실한 속도로 오래 도는 방향을 택한 설계입니다.

전체 흐름은 다음과 같습니다.

지역과 키워드가 적응형 그리드로 나뉘어 여러 워커가 병렬 수집하고, 파싱과 중복 제거를 거쳐 CSV로 나오며, 포화 칸은 다시 분할되고 진행 상태는 체크포인트로 저장되는 구조지역 · 키워드시도 · 좌표 지정적응형 그리드경계 상자 → 칸 분할워커 풀병렬 브라우저 최대 10검색 · 스크롤 수집가상 스크롤 누적 파싱파싱 · 정규화11개 항목 · 다국어 표기중복 제거고유 식별자 전역 1건CSV 내보내기포화 칸4분할 재투입수집 내내 함께 도는 것들체크포인트 저장으로 중단 후 이어받기 · 조회 간격과 재시도로 상대 서버 존중차단 신호 감지 시 대기 후 재개 · 진행 상황과 발견 업체 실시간 표시

글로 요약하면 이렇습니다. 지역과 키워드가 들어오면 적응형 그리드가 경계 상자를 칸으로 나누고 여러 브라우저가 칸을 나눠 맡아 검색하고 스크롤하며 업체를 뽑습니다. 뽑힌 업체는 정규화와 중복 제거를 거쳐 CSV로 한 건씩 쌓이고 결과가 넘치는 칸은 다시 넷으로 쪼개져 큐로 돌아갑니다. 이 모든 과정에서 진행 상태는 체크포인트로 저장되고 조회 속도는 상대 서버를 존중하도록 조절됩니다.

결과

담당자가 주소를 쪼개고 업종 키워드를 수백 개 만들어 하나씩 돌리던 방식이 사라졌습니다. 이제는 지역과 키워드만 지정하면 해당 구역의 업체가 중복 없이 한 벌의 CSV로 정리되어 나옵니다. 넓게 조회해 스무 개에서 잘리던 누락은 적응형 그리드가 붐비는 곳을 잘게 쪼개며 메우고 인접한 칸에 걸친 같은 업체는 고유 식별자로 한 번만 남습니다.

운영 관점에서도 다루기 쉬운 도구가 됐습니다. 몇 시간짜리 수집을 중간에 멈춰도 체크포인트에서 이어받고 진행한 칸과 발견 업체 수, 활성 브라우저와 남은 시간이 화면에 실시간으로 보입니다. 전체는 윈도우 실행 파일 하나로 배포되어 비개발자인 담당자가 설치 과정 없이 그대로 씁니다.

이 프로젝트에서 다룬 기술적 결정들은 아래 글에서 더 자세히 풀었습니다.

자주 묻는 질문

공식 지도 API만으로는 충분하지 않나요?

한 키워드로 한 지역을 조회하면 스무 개 안팎만 돌려주는 개수 제한이 있어, 한 구역의 업체를 빠짐없이 확보하기는 어렵습니다. 이 도구는 API로 뚫는 대신 지역을 작은 칸으로 나눠 칸마다 공개 검색 결과를 훑고 붐비는 칸은 더 잘게 쪼개 누락을 메우는 방식으로 그 한계를 다룹니다.

상대 서버에 부담을 주지는 않나요?

조회 사이마다 무작위 간격을 두어 사람이 지도를 넘겨 보는 속도에 가깝게 움직이고 접속이 과하다는 신호가 감지되면 즉시 멈췄다가 대기 후 재개합니다. 로그인이나 우회로 제한을 뚫는 방향이 아니라 공개된 정보를 성실한 속도로 열람하듯 수집하도록 설계했습니다.

수집 도중에 멈추면 처음부터 다시 해야 하나요?

아니요. 진행한 칸과 이미 만난 업체 식별자를 주기적으로 체크포인트에 저장하므로, 프로그램을 닫거나 중단해도 다음 실행에서 중단 지점부터 이어집니다. 몇 시간짜리 작업을 반복하지 않아도 됩니다.

어떤 항목이 수집되나요?

상호와 주소, 별점, 리뷰 수, 업종 분류, 지도 링크, 고유 식별자를 기본으로 모으고 상세 모드를 켜면 각 업체 페이지를 방문해 전화번호와 홈페이지까지 채웁니다. 결과는 엑셀에서 바로 열리는 CSV로 저장됩니다.

도입 결과

키워드 수백 개를 손으로 만들어 돌리고 결과를 합치던 작업이 사라지고, 지역과 키워드만 지정하면 해당 구역의 업체가 중복 없이 한 벌의 CSV로 정리되어 나오는 구조가 갖춰졌습니다. 윈도우 실행 파일로 배포되어 비개발자도 그대로 씁니다.
#지도크롤링#데이터수집#그리드분할#CSV내보내기

비슷한 업무 자동화가 필요하신가요?

무료 상담 신청