본문으로 건너뛰기

크롤링, 웹 데이터를 모으는 프로그램을 만들 때 정할 것

크롤링은 프로그램이 웹 페이지를 열어 정보를 모으는 일입니다. 공식 API · 공공데이터 · 크롤링 비교, 수집 프로그램을 만드는 6단계, 약관 · robots.txt · 개인정보를 적는 수집 전 확인표를 정리했습니다.

크롤링, 웹 데이터를 모으는 프로그램을 만들 때 정할 것 — 식스원 블로그

크롤링은 프로그램이 웹 페이지를 차례로 열어 필요한 정보를 모으는 일입니다. 이 글은 가격 · 리뷰 · 공고 같은 업무용 데이터를 모으는 프로그램을 만들거나 맡기기 전에 정할 것을 다룹니다. 순서는 공식 API(사이트가 프로그램용으로 열어 둔 데이터 창구) · 공공데이터가 있는지부터 보고, 없을 때 크롤링을 고르며, 만들기 전에 이용 약관 · robots.txt · 개인정보 포함 여부를 확인하는 것입니다. 수집이 허용되는지는 사이트 조건과 모으는 방식에 따라 달라지므로, 이 글은 확인할 곳까지만 적습니다.

크롤링이란 무엇인가요

크롤링 뜻을 좁게 풀면 링크를 따라 페이지를 돌아다니며 읽어 가는 일입니다. 검색엔진 로봇이 하는 일이 대표적입니다. 스크래핑은 열어 둔 페이지에서 가격 · 제목 · 날짜처럼 정해진 칸만 뽑아내는 일입니다. 업무에서 말하는 크롤링 프로그램은 대개 둘을 합친 것 — 목록 페이지를 돌며(크롤링) 상세 페이지의 정해진 칸을 뽑아(스크래핑) 표로 저장하는 프로그램입니다.

쓰임은 셋이 흔합니다. 경쟁 상품의 가격 · 리뷰 수 모으기, 입찰 · 채용 · 지원사업 공고 모으기, 입점몰에 올린 우리 상품 정보가 맞게 떠 있는지 점검하기입니다. 모두 사람이 매일 같은 화면을 열어 옮겨 적던 일이라, 데이터 수집 자동화는 업무 자동화 후보를 고르는 기준(자주 · 오래 · 규칙)에 그대로 들어맞습니다.

웹 크롤링에서 먼저 만나는 파일이 robots.txt입니다. 사이트가 로봇에게 들어와도 되는 경로와 안 되는 경로를 적어 두는 파일로, 사이트 주소 뒤에 /robots.txt를 붙이면 열립니다. 이 규칙을 정한 표준 문서(RFC 9309, 2022년 9월)는 robots.txt의 규칙이 접근 권한을 주는 장치가 아니라고 밝힙니다. robots.txt가 막지 않았다는 것만으로 수집해도 된다는 뜻은 아니어서, 이용 약관과 법 기준은 따로 봅니다.

공식 API · 공공데이터 · 크롤링은 무엇이 다른가요

같은 데이터라도 받는 길이 세 가지입니다.

방식안정성이용 조건사이트가 바뀔 때비용 구조맞는 경우
공식 API높음 — 정해진 형식과 문서가 있음이용 약관 · 인증키 · 호출 한도보통 공지 뒤 버전이 바뀜무료 한도 또는 사용량 과금 — 서비스마다 다름제공 항목만으로 충분할 때
공공데이터(공공데이터포털)높음 — 파일 내려받기 · 오픈 API파일은 내려받고 오픈 API는 활용신청 뒤 사용, 데이터마다 이용허락범위(공공누리 유형 — 출처표시 · 상업적 이용 · 변경 가능 여부)가 다름제공 기관이 형식을 관리데이터별 안내 — 이용허락범위와 함께 확인공고 · 통계 · 인허가처럼 기관이 내는 데이터
크롤링낮음 — 화면 구조에 기대어 모음이용 약관 · robots.txt · 로그인 · 개인정보를 직접 확인멈추거나 틀린 칸을 모음 — 고치는 일이 계속 생김만드는 비용 + 화면이 바뀔 때마다 고치는 비용API · 공공데이터가 없고 공개 화면의 항목만 필요할 때

RPA(사람이 화면에서 하던 클릭 · 입력을 프로그램이 대신 실행하는 방식)는 로그인해 쓰는 화면에서 클릭 · 내려받기를 대신 누르는 일에 가깝습니다. RPA로 남의 사이트를 다룰 때도 아래 확인표는 똑같이 거치고, 도입 기준은 RPA 도입 순서에 있습니다.

수집 프로그램은 어떤 순서로 만드나요

여섯 단계입니다. 코드를 짜는 일은 4번부터이고, 앞의 세 단계에서 만들지 말지가 먼저 정해집니다.

  1. 모을 항목과 쓰는 곳 적기 — 무엇을 · 어느 사이트에서 · 얼마나 자주 · 어디에 쓰는지를 한 줄로 적습니다. 예를 들어 「경쟁 상품 20개의 판매가를 매일 오전 한 번 모아 가격표에 붙인다」입니다. 항목은 표의 칸 이름(상품명 · 판매가 · 할인가 · 모은 시각 · 원래 주소)으로 적고, 쓰는 곳이 없는 칸은 뺍니다. 칸마다 형식과 예시값을 채우는 법은 요구사항 정리 순서의 데이터 항목 표와 같습니다. 프로그램 개발을 맡기든 직접 만들든 이 한 줄이 요구사항의 첫 줄입니다.
  2. API · 내려받기 제공 여부 먼저 확인 — 그 사이트의 개발자 · 제휴 · 파트너 안내와 공공데이터포털을 먼저 찾습니다. 있으면 크롤링하지 않고 그 창구를 씁니다.
  3. 이용 약관 · robots.txt 확인 — 약관에서 '자동화된 수단' '로봇' '크롤링' '스크래핑' 같은 낱말을 찾습니다. robots.txt는 User-agent(로봇 이름)별 묶음으로 규칙을 적으므로, 우리 프로그램 이름에 맞는 묶음이 있으면 그 묶음을, 없으면 모든 로봇에 해당하는 User-agent: * 묶음을 보고 모으려는 경로가 Disallow(들어오지 말 것)로 적혀 있는지 확인합니다. 표준은 robots.txt가 없을 때(파일을 찾을 수 없다는 4xx 응답)는 로봇 규칙상 제한이 없는 것으로, 서버 오류로 열리지 않을 때(5xx 응답)는 전부 막힌 것으로 보도록 정합니다 — 어느 쪽이든 약관 · 법 판단과는 별개입니다. 본 결과는 확인 날짜와 함께 아래 확인표에 적습니다.
  4. 주기 · 요청 속도 정하기 — 데이터가 바뀌는 만큼만 모읍니다. 가격이 하루 한 번 바뀌면 하루 한 번이면 됩니다. 요청 사이에는 간격을 둡니다 — 예를 들어 페이지마다 몇 초씩(가정한 값). 서버가 429(요청이 너무 많음) 응답을 돌려주면 멈추고, 함께 온 Retry-After 값이 있으면 그만큼, 없으면 정해 둔 시간만큼 기다린 뒤 다시 시도하게 만듭니다. 요청에는 회사 이름과 연락처를 알 수 있는 이름표(User-Agent)를 붙여, 상대 운영자가 연락할 길을 열어 둡니다.
  5. 저장 · 중복 제거 — 칸마다 모은 시각과 원래 주소를 같이 저장하고, 같은 상품이 두 번 들어오지 않게 기준 키(상품 번호나 주소)를 정합니다. 페이지 전체를 통째로 쌓지 말고 필요한 칸만 저장합니다. 단위 · 통화 · 날짜 표기가 섞이는 문제는 데이터 이전 준비의 정리 기준을 그대로 씁니다. 모은 표를 엑셀 보고서로 이어 쓴다면 엑셀 자동화 방법의 파워 쿼리(여러 파일 · 표를 가져와 합치는 엑셀 기능)가 맞습니다.
  6. 실패 알림 · 점검 — 실행할 때마다 모은 건수 · 빈칸 수를 기록하고, 평소보다 크게 줄면 담당자에게 알림이 가게 합니다. robots.txt는 프로그램이 실행할 때마다 새로 읽게 합니다 — 표준은 저장해 둔 사본을 24시간 넘게 쓰지 않도록 정합니다. 약관은 사람이 한 달에 한 번 다시 열어 확인표에 날짜를 더합니다.

수집 전 확인표는 어떻게 채우나요

다섯 줄입니다. 결과 칸에는 판단이 아니라 본 것 — 약관 문장 · robots.txt 줄 · 확인한 날짜 — 을 적습니다.

확인 항목어디서 보나결과 칸에 적을 것확인할 기준 · 곳
약관의 자동 수집 조항사이트 하단 이용약관해당 조항 문장 그대로 · 확인 날짜금지 조항이 있으면 사이트 운영자에게 제휴 · API 문의
robots.txt사이트주소/robots.txt해당 묶음에서 모을 경로가 Disallow인지 · 파일 상태(있음 · 없음 · 오류)RFC 9309 — 막힌 경로는 모으지 않음, 허용돼 있어도 약관 · 법 판단은 별개
로그인 필요 여부모을 화면을 로그아웃 상태로 열어 보기로그인 필요 · 불필요정보통신망법 제48조(접근 권한 · 인증 절차 우회), 부정경쟁방지법 제2조 제1호 카목(데이터 부정사용) — 로그인이 필요하면 계약 · API로 받는 길부터
개인정보 포함 여부모을 칸 목록이름 · 아이디 · 연락처 · 얼굴 사진이 든 칸개인정보 보호법 제2조(다른 정보와 쉽게 결합해 알아볼 수 있는 정보도 포함) · 제15조 · 제16조, 개인정보보호위원회 법령해석지원센터
저작물 · 데이터베이스 여부모을 칸과 양글 · 사진 본문을 가져가는지, 목록 전체를 가져가는지저작권법 제16조 · 제18조(글 · 사진 같은 저작물의 복제 · 전송), 제93조(데이터베이스의 상당한 부분), 부정경쟁방지법 제2조 제1호 파목(성과 무단 사용), 한국저작권위원회

판단이 필요한 줄이 하나라도 있으면 만들기 전에 이 표를 그대로 들고 법률 전문가와 확인합니다. 본 것과 날짜가 적혀 있으면 상담이 짧아지고, 나중에 사이트 조건이 바뀌었을 때도 언제 무엇을 봤는지 남습니다.

자주 묻는 질문

크롤링은 불법인가요

한 줄로 답할 수 없습니다. 크롤링이라는 이름으로 정해지는 것이 아니라 무엇을 · 어떻게 · 얼마나 모았는지에 따라 여러 법의 기준을 함께 봅니다. 로그인이나 접근 제한을 넘었는지(정보통신망법 제48조), 데이터베이스의 전부나 상당한 부분을 가져갔는지(저작권법 제93조 — 개별 항목이라도 반복적 · 체계적으로 가져가 제작자의 이익을 부당하게 해치면 상당한 부분으로 봄), 남의 상당한 투자로 만든 성과를 공정한 상거래 관행이나 경쟁질서에 반하는 방법으로 자기 영업에 무단으로 썼는지(부정경쟁방지법), 개인정보가 섞였는지(개인정보 보호법), 약관을 어겼는지가 기준입니다.

그래서 답은 확인표에서 나옵니다. 걸리는 줄이 있으면 만들기 전에 사이트 운영자에게 제휴 · API를 먼저 묻거나 법률 전문가와 확인합니다.

경쟁사 가격을 매일 모아도 되나요

확인표를 먼저 채웁니다. 그 가격이 로그인 없이 보이는 공개 화면에 있는지, 약관 · robots.txt가 그 경로를 막지 않는지가 매일이라는 주기보다 먼저입니다. 그다음 상품 수 · 주기 · 모을 칸을 비교에 쓰는 만큼으로 정합니다 — 필요한 상품과 칸만 모으면 상대 서버의 부담이 줄고, 확인표의 저작물 · 데이터베이스 줄에서 볼 범위도 좁아집니다.

모은 가격을 우리 판매가에 자동으로 반영하는 데까지 이으려면, 반영 전에 사람이 한 번 보는 확인 단계를 둡니다. 상대 쪽 입력 실수 하나가 우리 가격을 그대로 끌어내릴 수 있기 때문입니다.

사이트 구조가 바뀌면 어떻게 되나요

프로그램이 멈추거나, 더 곤란하게는 엉뚱한 칸의 값을 조용히 모읍니다. 그래서 세 가지를 처음부터 넣어 둡니다. 실행마다 모은 건수 · 빈칸 수와 값의 범위(가격이 0원이거나 전날의 10배)를 검사해 벗어나면 알림을 보내고, 페이지에서 칸을 찾는 위치 정보를 한 파일에 모아 고칠 곳을 하나로 만들고, 고치는 사람을 정해 둡니다.

맡겨서 만든다면 「사이트 구조가 바뀌면 고치는 일」을 유지보수 항목에 한 줄로 넣어 둡니다. 그 일이 수정인지 추가인지 가르는 기준은 유지보수 범위 나누는 법에 있습니다.

오늘 할 일

모으고 싶은 데이터를 한 줄로 적으십시오 — 무엇을 · 어느 사이트에서 · 얼마나 자주 · 어디에 쓰는지. 그다음 그 사이트 하단의 개발자 · 제휴 안내와 공공데이터포털에서 공식 API나 데이터 내려받기가 있는지 먼저 찾아봅니다. 있으면 크롤링 없이 끝나고, 없으면 그 사이트 이용약관에서 자동 수집 조항을 찾고 사이트 주소 뒤에 /robots.txt를 붙여 열어 보는 것이 다음 순서입니다. 30분이면 됩니다.

모으려는 데이터와 쓰는 곳을 적어 문의로 보내 주시면, API · 크롤링 가능 여부를 확인하는 순서와 개발 범위를 정리해 회신드립니다.

FacebookX

이 글과 맞는 서비스

이어서 읽기

블로그 전체 글 목록 →

카카오톡 상담식스원 고객센터 카카오톡 채널 (새 창)