IPv6 링크의 대괄호가 사라졌다면: urlsplit의 netloc와 hostname 확인

노트북과 라우터 사이의 연결, 지구를 감싼 대괄호를 표현한 개념 삽화

IPv6 주소가 들어 있는 링크를 분리할 때 netloc와 hostname의 모양이 다를 수 있습니다. hostname에 대괄호가 없다고 원본 링크를 잘못 읽었다고 단정하지 말고, URL의 어느 부분을 보고 있는지부터 구분하세요.

1. 예시 주소 하나를 분리해 보기

from urllib.parse import urlsplit

u = "https://[2001:db8::1]:8443/post?tag=x"
p = urlsplit(u)
print(p.netloc)   # [2001:db8::1]:8443
print(p.hostname) # 2001:db8::1
print(p.port)     # 8443

위 주소는 형식 설명용 예시이며 실제 글을 여는 목적지가 아닙니다. 이 예제에서 netloc는 대괄호와 포트를 포함하고, hostname과 port는 분리된 값입니다. 링크 목록을 만들 때 원본 열과 분리한 값의 열을 함께 두면 차이를 확인하기 쉽습니다.

2. 필요한 값을 목적에 맞춰 고르기

원본 URL: 대괄호와 포트를 포함해 보존 / netloc: URL의 네트워크 위치 부분 / hostname: 분리한 호스트 값 / 재조합: 문자열 덧붙이기 전 형식 확인

값예제 결과읽는 목적
netloc[2001:db8::1]:8443네트워크 위치 부분을 보존
hostname2001:db8::1호스트 값 대조
port8443포트 값 확인
path/post문서 경로 확인

hostname 값을 “https://” 뒤에 그대로 붙이고 포트까지 다시 덧붙이는 방식은 원본의 구조를 놓치기 쉽습니다. 새 주소를 만들기 전에 호스트, 포트와 경로를 어떤 형식으로 넣어야 하는지 확인하세요. 호스트 값을 뽑는 일과 유효한 URL을 조립하는 일은 다른 작업입니다.

또한 urlsplit이 반환됐다는 사실만으로 안전하거나 실제 접속 가능한 URL이라고 보장되지는 않습니다. Python 문서도 입력 검증의 필요성을 설명합니다. 목록 점검에서는 파싱 결과와 공개 목적지 확인을 별도로 남기세요.

3. 오류 행도 원본과 함께 남기기

대괄호가 맞지 않는 입력은 분리 과정에서 오류가 날 수 있습니다. 일부 잘못된 포트는 port 속성을 읽을 때 드러납니다. 여러 주소를 처리한다면 오류를 빈 주소로 덮지 말고 원본과 발생 단계를 따로 기록하세요.

row = {"original": u, "status": "pending"}
try:
    parsed = urlsplit(u)
    row.update(netloc=parsed.netloc,
               hostname=parsed.hostname,
               port=parsed.port, status="parsed")
except ValueError as exc:
    row.update(status="parse_error", error=str(exc))

이 코드는 오프라인 형식 기록 예제입니다. parsed는 공개 접속 성공이라는 뜻이 아닙니다. 사용자명·비밀번호가 포함된 주소를 처리하는 실제 업무에서는 보고서에 원문 인증 정보를 그대로 남기지 않도록 별도 마스킹 기준도 필요합니다.

4. 자주 묻는 질문

hostname에 대괄호가 없으면 잘못된 URL인가요?

분리된 호스트 값의 형태와 원본 URL의 표기는 다를 수 있습니다. netloc와 원본을 함께 대조하세요.

파싱만 되면 링크를 공개해도 되나요?

입력의 허용 범위와 실제 목적지 검증이 별도로 필요합니다. 파싱 성공을 공개 확인으로 기록하지 않습니다.

Python urllib.parse 공식 문서 읽기

공식 문서 확인일 2026년 10월 15일: Python 3.12 — urllib.parse.

대표 삽화는 AI로 제작했으며 본문 설명 도표는 직접 구성했습니다.

이 블로그의 인기 게시물

디노 블로그 링크 추출기

디노 글자수 계산기

URL에 앰퍼샌드 표기가 남을 때: HTML 원문과 추출한 href를 구분하세요