텍스트

URL

URL 추출기란?

200줄짜리 이메일 스레드, Slack 채널 익스포트, 로그 파일, 고객 지원 트랜스크립트, 마크다운 메모 — 거기에 등장하는 모든 URL을 등장 순서대로, 중복 없이, 다른 곳에 바로 붙여 쓸 수 있게 받고 싶을 때가 있습니다. 고객이 어떤 링크를 클릭했는지 감사 로그로 남기고 있을 수도 있고, 발행 전에 외부 참조 링크를 훑고 있을 수도 있고, URL을 크롤러에 넣을 준비를 하고 있을 수도 있죠. 어떤 경우든, 40번씩 스크롤하면서 복붙할 일은 아닙니다. 왼쪽 패널에 텍스트를 넣으면 오른쪽 패널이 발견된 모든 URL을 JSON 배열로 돌려줍니다.

추출은 http://https:// 뒤에 공백이 아닌 문자가 이어지는 패턴을 잡는 단순한 정규표현식 기반입니다. 매치된 각 URL은 거의 URL의 일부일 리 없는 끝자락의 문장부호(마침표, 쉼표, 세미콜론, 닫는 괄호 — 문장이 링크로 끝날 때 따라붙는 것들)를 떼어낸 뒤 URL 생성자로 검증합니다. 생성자가 받아들이면 진짜 URL, 예외를 던지면 건너뜁니다. 중복은 등장 순서를 유지한 채 제거 — 처음 등장한 것이 살아남습니다. 이 방식은 WHATWG URL Standard가 말하는 "URL parsing"과 일치하며, JavaScript 정규표현식으로 URL을 잡을 때 흔히 쓰는 방식 그대로입니다.

출력은 URL이 등장한 순서대로 정렬된 문자열의 JSON 배열입니다. 텍스트에 URL이 하나도 없으면 [] — 빈 배열이 나오고, 오류도 토스트도 없습니다. 모든 처리는 브라우저 안에서 끝납니다. 어디로도 업로드되지 않고, 어디에도 기록되지 않습니다. RFC 3986이 무엇이 유효한 URL인지 정의하는 기반 스펙이고, URL 생성자가 이를 구현합니다.

추출기 사용 방법

세 단계입니다. 각 단계가 이 페이지의 한 버튼에 대응합니다.

1

텍스트를 붙여넣거나 샘플 불러오기

왼쪽 패널에 텍스트를 넣어주세요 — 이메일 본문, 로그 파일, 트랜스크립트, 글, 무엇이든 좋습니다. 샘플을 누르면 4개의 URL이 흩뿌려진 사내 메모라는 현실적인 예시가 로드됩니다. 샘플 입력:

팀 여러분 — 주문은 https://api.shop.example.com/v1/orders/ORD-1001 에서 확인 부탁드립니다.
그리고 대시보드 https://admin.shop.example.com/dashboard?tab=orders 도 확인해 주세요.
고객(Ava Chen)이 http://support.shop.example.com/tickets/T-4521 로 문의를 주셨습니다 — 문서는 https://docs.shop.example.com/api/orders 도 함께 보세요.

추출기는 <code>http://</code>와 <code>https://</code> URL만 잡습니다. 스킴 없이 <code>shop.example.com</code> 같은 맨 도메인은 건너뜁니다(호스트명일 수도, 파일명일 수도, 그냥 텍스트일 수도 있어 모호하기 때문).

2

URL 배열 확인

오른쪽 패널이 등장 순서대로, 중복이 제거된 URL JSON 배열을 보여줍니다. 주변 문장에서 따라붙은 끝자락 문장부호는 잘려나가고, 각 URL은 URL 생성자로 검증됩니다 — 형식이 망가진 것은 조용히 건너뛰므로 배열에는 진짜로 파싱 가능한 URL만 남습니다.

3

복사 또는 다운로드

복사를 누르면 JSON이 클립보드로, 다운로드를 누르면 .json 파일로 저장됩니다. 로그 한 줄에 그대로 넣어야 한다면 압축으로 배열을 한 줄로 만들 수 있습니다. 입력을 비우고 새로 시작하려면 입력 쪽 지우기를 사용하세요.

실제로 이런 상황에 씁니다

고객 지원 티켓 감사

고객이 긴 이메일 스레드를 티켓에 그대로 붙여넣습니다. 담당자(Marco Rivera)는 고객이 참조 중인 모든 URL을 알아야 합니다. 이메일 본문을 여기에 넣고 배열을 받아서 하나씩 클릭하면 됩니다. 스크롤로 눈 아플 일도, URL을 빼먹을 위험도 없어집니다.

Slack/Discord 익스포트 크롤링

채널을 익스포트해서 그 안의 링크된 자원 전부를 링크 체커나 아카이브 봇에 먹이고 싶습니다. 익스포트는 JSON이나 HTML이고, URL은 텍스트·이모지·메타데이터 사이에 섞여 있습니다. 통째로 여기 붙여넣으면 루프 안의 fetch()에 바로 넣을 수 있는 깔끔한 URL 리스트가 됩니다.

발행 전 블로그 글이나 문서 링크 점검

Priya Patel이 4,000단어짜리 글을 발행하기 직전이라 외부 링크가 모두 살아 있는지 확인하고 싶어 합니다. 마크다운 소스를 붙여넣고 URL 배열을 받은 다음 체커로 돌리면 됩니다. Google의 링크 크롤 가능성 가이드는 링크가 살아 있다는 전제를 깔고 있고, 깨진 링크는 랭킹에 해롭습니다.

구조화된 로그에서 URL 뽑기

애플리케이션 로그에는 오류 메시지, 요청 트레이스, 리퍼러 필드에 URL이 박혀 있는 경우가 많습니다. 장애를 조사하면서 5분 동안 흘러간 URL을 모두 보고 싶다면 로그 일부를 붙여넣고 중복을 제거하면 됩니다. 종종 그 한 장의 중복 제거된 리스트가, 연쇄 장애를 유발한 그 이상한 URL 하나를 찾는 가장 빠른 길입니다.

자주 묻는 질문

ftp:// 나 mailto: 같은 다른 스킴도 잡아주나요?

아니요 — http://https://만 잡습니다. 사람들이 흔히 말하는 "URL 추출"은 보통 웹 링크를 의미하고, 오탐을 피하기 위해 정규표현식은 일부러 빡빡하게 잡혀 있습니다. 다른 스킴이 필요하다면 WHATWG URL Standard 자체는 지원하지만 매칭이 모호해집니다(mailto: 주소는 그냥 텍스트처럼 생겼고, ftp:는 요즘 거의 안 쓰입니다). 정말로 필요한 사용 사례가 있다면 기능 요청을 남겨주세요.

[텍스트](https://example.com) 같은 마크다운 링크는 어떻게 처리되나요?

깔끔하게 처리됩니다. 정규표현식이 괄호 안의 https://example.com을 찾아내고, 끝자락 문장부호 트리밍이 닫는 괄호를 떼어냅니다. 그래서 마크다운, BBCode, HTML <a href>를 비롯한 대부분의 주변 구문에서 포맷별 파서를 따로 두지 않고도 맨 URL을 뽑아낼 수 있습니다.

중복은 순서대로 남기나요, 제거하나요?

제거합니다(첫 등장 순서는 보존). 텍스트가 https://shop.example.com을 세 번 언급하면, 출력에는 첫 등장 위치에 한 번만 들어갑니다. 중복 제거는 단순한 Set 필터입니다 — MDN의 Set을 참고하세요.

파이프나 대괄호, 괄호처럼 특이한 문자가 들어간 URL은요?

파이프(|)와 대괄호는 URL에서 유효하지만 실제 URL에서는 드물어서, 공백 뒤가 아닌 한 정규표현식이 함께 잡습니다. 매치 끝에 붙은 닫는 대괄호나 닫는 괄호는 URL의 일부보다는 문장부호일 가능성이 훨씬 높아서 잘려나갑니다. 정말로 )로 끝나는 URL이 있다면 URL 생성자는 받아들이지만, 닫는 괄호가 떨어지지 않게 하려면 텍스트에서 그 뒤에 공백 한 칸을 더 두어야 합니다.

용량 제한이 있나요?

있습니다 — 1 MB입니다. 수천 페이지 분량의 텍스트에 해당하는 양으로, 현실적으로 붙여넣을 만한 이메일 스레드, 트랜스크립트, 로그 조각보다 훨씬 큽니다. 메가 단위가 여러 개인 파일이라면 잘라서 처리하거나 커맨드라인의 grep/ripgrep으로 미리 거른 다음 붙여넣으세요.

오프라인에서도 동작하나요?

네. 정규표현식 매칭, URL 검증, 중복 제거 — 모두 브라우저 안에서 처리됩니다. 네트워크 트래픽은 페이지 최초 로드뿐이고, 한 번 열리고 나면 인터넷을 끊어도 계속 동작합니다. URL 생성자는 URL API로 모든 최신 브라우저에 기본 탑재되어 있습니다.

다른 URL 및 텍스트 도구

추출은 한 가지 작업일 뿐이고, 자연스럽게 같이 쓰이는 것들은 이렇습니다: