URL 검증은 생각보다 까다로운 작업입니다. 그 이유는 거의 모든 문자열이 유효한 URL이 될 수 있기 때문입니다. URL을 구분하는 몇 가지 문장부호 규칙이 존재하지만, 문장부호가 하나도 없더라도 여전히 유효한 URL로 간주됩니다. 따라서 'validate' 같은 단순한 검증 메서드가 존재하지 않으며, 상황에 맞는 적절한 방법을 선택하는 것이 중요합니다.
상황별 URL 검증 방법
데이터를 신뢰하면서 프로토콜이 HTTP인지만 확인하고 싶은 경우 —
urlparse를 사용하는 것이 가장 간단하고 확실한 방법입니다.문자열이 실제 URL 형식에 부합하는지 확인하고 싶은 경우 — 다소 복잡하고 장황하지만 정규 표현식(regex)을 사용해야 합니다.
실제로 접근 가능한 웹 주소인지 확인하고 싶은 경우 — 아래 코드처럼 직접 요청을 시도해 결과를 확인하는 것이 가장 좋습니다.
실제 웹 주소인지 확인하는 예제
import urllib.request
try:
urllib.request.urlopen(url)
except IOError:
print("유효하지 않은 URL입니다.")
위 코드는 해당 URL에 실제로 접속을 시도하여, 연결에 실패하면 IOError 예외를 발생시키는 방식으로 동작합니다. 즉, 형식뿐만 아니라 실제 존재하는 웹 주소인지까지 검증할 수 있습니다.
참고: urlparse를 활용한 간단한 형식 검증
정규 표현식 없이 URL의 기본 구조(스킴과 호스트명)만 빠르게 확인하고 싶다면 urllib.parse 모듈을 활용할 수 있습니다.
from urllib.parse import urlparse
def is_valid_url(url):
parsed = urlparse(url)
return bool(parsed.scheme in ('http', 'https') and parsed.netloc)
정리하면, 완벽한 URL 검증은 단일 방법으로 해결되지 않습니다. 데이터의 신뢰도와 검증 목적에 따라 urlparse, 정규 표현식, 실제 요청 테스트 중 적합한 방법을 조합해 사용하는 것이 바람직합니다.