"회사 홈페이지 게시판 글들, 한 번에 쫙 모을 수 있나요?"
요즘 이런 요청이 많아요. 쌓인 게시글이나 문서를 데이터로 모으고 싶은 거죠. 이걸 자동으로 해주는 게 크롤러(웹페이지를 하나하나 훑어서 내용을 긁어 모으는 프로그램)예요.
그런데 크롤러를 돌려보면, 화면엔 멀쩡히 보이는 글이 정작 데이터로는 안 딸려 올 때가 많아요. 목록만 오고 본문은 비어 있거나, 아예 아무것도 안 긁히거나요.
크롤러가 못 나서가 아니라, 한국 웹사이트에 유독 많은 몇 가지 구조 때문이에요. 먼저 어디서 막히는지부터 보고, 그다음 이걸 어떻게 다루는지 볼게요.
크롤러가 자주 멈추는 네 지점
크롤러가 헛걸음하는 자리를 모아 보면 대체로 정해져 있어요. 크게 네 군데예요.
첫째, 로그인이에요. 회원만 보이는 게시판은, 크롤러가 주소를 두드려도 로그인 화면만 돌려받아요. 사람은 로그인하고 들어가지만 크롤러는 그 앞에서 멈추는 거죠.
둘째, 옛날 게시판의 링크예요. 오래된 전자정부 게시판을 보면 링크가 goDetail('...'), goPage(2) 같은 자바스크립트 명령으로 돼 있어요. 사람이 클릭하면 브라우저가 실제 주소로 바꿔주지만, 크롤러 눈엔 그냥 알 수 없는 글자예요. 정작 눌러 들어갈 주소가 없는 셈이죠.
셋째, 사이트 전체를 모아야 할 때예요. 페이지 하나가 아니라 사이트 한 곳을 통째로 긁어야 하는데, 어디까지 들어가고 어디서 멈출지 기준이 없으면 수집이 무한정 늘어지거나 같은 페이지를 몇 번씩 다시 긁어요.
넷째, 스크립트로만 그려지는 화면이에요. 요즘 사이트 상당수는 뼈대만 먼저 오고, 실제 내용은 브라우저가 스크립트를 실행한 뒤에야 채워져요. 이런 방식을 SPA(화면을 새로 고치지 않고 필요한 부분만 바꿔 그리는 페이지)라고 해요. 조립 전 가구 같아서, 크롤러가 조립 전 상태만 읽으면 빈칸이 와요.
이 지점들을 넘으려면
네 지점은 겉보기엔 달라 보여도 공통점이 있어요. 크롤러가 '사람처럼' 행동해야 넘어간다는 거예요. 사람처럼 로그인하고, 사람처럼 링크를 눌러 실제 주소를 찾고, 사람처럼 화면이 다 그려질 때까지 기다린 뒤 읽는 거죠.
여기에 조건이 하나 더 붙어요. 로그인 계정 같은 민감한 정보를 안전하게 다뤄야 하고, 사이트가 밝혀둔 수집 범위도 지켜야 해요.
이 조건들을 한 흐름에서 다루려고 코어핀(corepin)이 이번 업데이트에서 웹크롤 기능을 손봤어요.
코어핀이 다루는 방식
코어핀은 앞의 네 문제를 하나의 수집 흐름 안에서 처리해요.
로그인 게시판은 전용 계정으로 로그인한 채 수집해요. 계정 정보는 AES-256(알아볼 수 없게 잠가 보관하는 암호화)으로 보관하고, 수집 요청엔 참조용 정보만 오가게 나눴어요. 계약이 끝나면 폐기하고요.
옛날 자바스크립트 링크는 실제 상세 주소로 되돌려 읽어요. 공공기관 민원 게시판을 예로 '일반 크롤러가 보는 링크'와 '코어핀이 복원한 주소'를 나란히 보여주는 시연도 공개돼 있어요.
사이트 전체 수집은 시작 주소 하나로 정해둔 한도 안에서 자동 순회하고, 끝나면 webhook(작업이 끝나는 순간 울리는 알림)으로 알려줘요. 도는 동안 robots.txt(사이트가 밝혀둔 수집 허용 범위)는 기본적으로 지키고, 필요하면 강제 준수 옵션도 둘 수 있어요.
스크립트로만 그려지는 화면은 실제 브라우저를 띄워 읽되, 무거운 방식이라 필요할 때만 켜고 실패하면 기본 추출로 되돌아가요.
AI3는 크롤링의 승부처가 수집량보다 '못 긁히던 자리를 다루는 방식'에 있다고 봐요.
자꾸 빈칸으로 오던 게시판이 떠오른다면, 그 한 곳을 코어핀 페이지에서 먼저 맞춰봐도 좋아요.