처음엔 그냥 긁으면 될 줄 알았습니다

링크 썸네일 하나를 위해 우리가 만든 크롤러 이야기

by LINK DROPPER
crawling.png


링크를 저장하는 서비스를 만들고 있었습니다.

단순한 북마크가 아니라, 링크에 맥락과 감성을 더하고 싶은 서비스였죠.


그런데 가장 기초적인 기능에서, 우리는 벽에 부딪혔습니다.

“링크를 저장했을 때 썸네일, 제목, 설명이 자동으로 뜨게 하려면 어떻게 해야 하지?”


Open Graph 데이터를 긁어오면 된다는 건 알았습니다.

그래서 그냥 긁었습니다. 처음엔 그게 다일 줄 알았죠.


하지만 그게 시작이었습니다.


기대와는 달랐던 첫 도전


처음에는 유명한 open-graph-scraper 라이브러리를 사용했습니다.

하지만 결과는 기대와 달랐습니다.


평균 응답 속도: 2~3초

JavaScript로 렌더링되는 페이지는 정보 수집 실패

SPA 구조는 거의 먹히지 않음



무엇보다 느렸습니다.

우리는 저장 속도만큼은 사용자에게 기다림을 주고 싶지 않았습니다.


FastAPI로 만든 첫 번째 정적 크롤러


그래서 우리는 직접 만들기로 했습니다.

가볍고 빠른 정적 크롤러부터 시작했습니다.


Python + FastAPI + BeautifulSoup.

필요한 메타 태그만 골라서 파싱하는 구조였죠.


응답 속도는 평균 0.2초 ~ 0.4초

일반적인 OG 태그는 무리 없이 가져옴

간단한 페이지에는 딱이었죠


하지만 문제는 곧 드러났습니다.


JS로 그려지는 웹, 정적으론 안 됩니다


많은 웹사이트가 OG 메타 태그조차 초기 HTML에 없었습니다.

브라우저가 렌더링을 마쳐야 비로소 등장하는 정보들.

정적 요청만으로는 이 데이터를 수집할 수 없었습니다.


그때부터 우리는 다른 접근이 필요하다는 걸 느꼈습니다.


Plan B: 브라우저를 직접 띄워라


두 번째 도전은 동적 크롤링이었습니다.

Playwright를 도입해, 실제 브라우저를 띄워 페이지를 로딩하고

렌더링된 DOM에서 OG 정보를 추출하는 방식이죠.


비유하자면,

정적 크롤러는 “누군가에게 대신 가서 사진만 찍어달라고 부탁하는 것”이라면

동적 크롤러는 “직접 현장에 가서 필요한 장면을 눈으로 보고 메모해 오는 것”이었습니다.


하지만 세상은 그렇게 호락호락하지 않았습니다


렌더링까지는 성공했지만,

보안이 강화된 사이트들은 크롤러 자체를 막고 있었습니다.


Cloudflare 같은 WAF에 의해 차단

요청 패턴 감지 후 403 응답

IP, 국가, User-Agent 기반의 접근 거부


이제 문제는 기술이 아니라 우회였습니다.


Smartproxy 도입: 마지막 퍼즐 조각


우리는 Smartproxy라는 프록시 서비스를 선택했습니다.


요청 성공 시에만 비용이 발생

전 세계 수십만 개의 IP 풀

Python에서도 간편하게 연동 가능



이걸 통해 일부 사이트만 선택적으로 프록시 경로로 우회하도록 구조를 설계했습니다.

기본은 정적 → 실패 시 동적 → 보안 차단 시 프록시.

그제야 비로소 대부분의 링크에서 썸네일과 설명이 잘 뜨기 시작했습니다.



우리가 만든 최종 구조는 이렇습니다


정적 크롤링: 빠르고 가벼운 기본 처리

동적 크롤링: 렌더링이 필요한 사이트 대응

프록시 크롤링: 보안 차단 회피



이 구조를 통해,

우리는 링크 하나를 저장하는 그 순간에

‘의미 있는 기록’을 만들 수 있는 기반을 마련했습니다.


지금, 이 경험을 함께해보세요


링크 드라퍼

단순히 링크를 저장하는 게 아니라,

다시 꺼내보는 습관을 만들기 위한 서비스입니다.


지금 베타로 오픈되어 있어요.

썸네일과 제목이 얼마나 잘 뜨는지,

직접 한 번 체험해보시면 좋겠습니다.


링크 드라퍼 체험하러 가기


다음 이야기 예고


속도는 여전히 과제입니다.

다음 글에서는 저희가 Open Graph 크롤링의 성능을 어떻게 개선했는지,

그리고 요청량이 많아졌을 때 어떻게 버티고 있는지를 이야기해보려고 해요.


읽어주셔서 감사합니다.

저희처럼 삽질 중인 누군가에게 도움이 되길 바랍니다.

keyword
작가의 이전글프론트엔드 개발자였던 우리가, 직접 서비스를 만들기까지