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. 필요한 값을 목적에 맞춰 고르기

| 값 | 예제 결과 | 읽는 목적 |
|---|---|---|
| netloc | [2001:db8::1]:8443 | 네트워크 위치 부분을 보존 |
| hostname | 2001:db8::1 | 호스트 값 대조 |
| port | 8443 | 포트 값 확인 |
| 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와 원본을 함께 대조하세요.
파싱만 되면 링크를 공개해도 되나요?
입력의 허용 범위와 실제 목적지 검증이 별도로 필요합니다. 파싱 성공을 공개 확인으로 기록하지 않습니다.
공식 문서 확인일 2026년 10월 15일: Python 3.12 — urllib.parse.
대표 삽화는 AI로 제작했으며 본문 설명 도표는 직접 구성했습니다.