-
[urllib] 웹사이트 주소 규칙을 나타내는 URL 알아보기컴퓨터과학 2025. 2. 25. 16:45반응형
웹사이트 주소 규칙을 나타내는 URL 알아보기
- 이 글은 mdn web docs의 What is a URL? 문서를 참조하여 작성했습니다.
우리가 흔히 사용하는 웹사이트는 URL(Uniform Resource Locator)이라고 하는 주소 형식을 사용합니다. URL은 웹에 게시된 리소스를 검색하기 위해 브라우저에서 사용하는 메커니즘을 이르는 말이예요. 이번에는 이 웹사이트 주소를 이용해 특정 웹페이지의 정보를 분석하거나, 파싱(parsing)을 해보려고 합니다.
만약 URL 파싱을 잘 한다면, 적절한 URL 입력을 통해서 크롤링(crawling) 등의 작업을 해결할 수 있습니다. 예를 들어, 네이버 지도에서 홍대 카페 라고 검색하고 싶다면 지도 웹사이트의 검색창을 누르고 홍대 카페를 적도록 하는 방법도 있지만, https://map.naver.com/v5/search/홍대 카페?c=15,0,0,0,dh 라는 주소를 입력하는 방법도 있지요. 우리는 전자의 방법이 더 편하지만, 컴퓨터는 눈으로 보고 버튼을 클릭하지 못하니 후자가 압도적으로 편합니다.
웹사이트 URL의 구성요소 알아보기
[이미지 1] URL의 구성 요소
스키마(Scheme)
URL은 위 [이미지 1]과 같은 구성을 보입니다. 이중에서 연두색으로 표시된 부분을 스키마라고 하는데요, 여기는 브라우저가 어떤 방식으로 데이터를 요청(request)할지를 명시해 놓은 것입니다. 대부분의 웹사이트는 https 접속 방식을 이용하고 있으며, 웹브라우저에서도 이를 생략하면 알아서 https 접속을 합니다.
스키마를 작성할 때는, (스키마 이름):// 방식으로 작성하는데요, 왜 굳이 ://를 입력하는지는 신경 쓰지 마세요. 개발자가 멋져 보여서 이렇게 정해 두었다고 합니다.
권한(Authority)
이 부분은 주로 웹사이트의 주소라고 부르는 도메인 내용이 들어갑니다. 우리가 흔히 알고 있는 주소(www.google.com과 같은)를 입력하지요. 여기서, www 부분은 서브도메인이라고 부릅니다. 위 [이미지 1]에서 example.com 도메인 이외에 다른 도메인을 사용하려면 추가 비용이 들고, 브랜딩에도 어려움이 있으니 auth.example.com 및 faq.example.com과 같은 서브도메인을 사용하는 방식이지요. 만약 서브도메인을 생략하면 www가 입력된 것으로 간주합니다.
리소스 경로(Path to resource)
리소스 경로는 웹사이트를 제공하는 서버에서 원하는 실제 파일 혹은 추상적인 엔드포인트(endpoint)를 찾아가기 위한 경로입니다. 우리가 C 드라이브 안에 있는 myfolder 폴더 안의 myfile.txt 파일을 찾고 싶다면, C:/myfolder/myfile.txt 라고 적듯이, 웹사이트 주소 또한 이런 방식으로 적는답니다.
매개변수(Parameter)
매개변수는 웹사이트의 엔드포인트에서 특정한 입력을 요구할 때, 필요한 값을 입력하는 용도로 쓰입니다. 주로 리소스 경로 바로 다음에 물음표(?)를 입력한 뒤, (매개변수 이름)=(값) 형식으로 작성합니다. 매개변수가 여러개라면 & 기호로 서로 연결해 준답니다.
앵커(Anchor)
만약 웹페이지가 너무 길어서 중간 지점으로 바로 접속하고 싶다면, 지원하는 사이트에 한해 앵커를 이용할 수 있습니다. 앵커는 # 기호로 표시하며, 이 때는 웹사이트를 접속하는 즉시 원하는 위치로 바로 이동할 수 있게 된답니다.
urllib을 이용한 URL 파싱
만약 파이썬(Python)을 이용해서 URL 정보 파싱을 할 예정이라면, urllib 패키지를 이용해 보는 것을 권장드립니다. 만약, 앞에서 살펴보았던 https://map.naver.com/v5/search/홍대 카페?c=15,0,0,0,dh 주소에서 원하는 부분을 선택하려면, urllib.parse.urlparse() 함수를 이용해볼 수 있습니다. 상세 코드는 아래를 참조해 주세요.
In [1]:# Import package from urllib import parse url = parse.urlparse('https://map.naver.com/v5/search/홍대 카페?c=15,0,0,0,dh&b=asdf') map = parse.parse_qs(url.query) # parameter 찾기 keyword = url.path # path 정보 찾기 print('경로: ', keyword, ', 매개변수', map)
경로: /v5/search/홍대 카페 , 매개변수 {'c': ['15,0,0,0,dh'], 'b': ['asdf']}
여기서, 매개변수의 경우 딕셔너리로 반한이 되기 때문에, 여러개의 매개변수가 입력되어 있다고 하더라도 편리하게 인덱싱이 가능합니다.
URL 인코딩
URL에 한국어나 띄어쓰기, 특수문자를 적으면 알 수 없는 영어와 특수문자의 조합으로 변경되는 경험을 해본 적이 있을겁니다. 위 예제를 가지고 설명드리자면, 홍대 카페 라는 키워드가 %ED%99%8D%EB%8C%80%20%EC%B9%B4%ED%8E%98 으로 나타나는 현상이지요.
이건 URL은 기본적으로 영어만 지원하기 때문에 생기는 문제입니다. 그래서 URL 규격에 알맞은 인코딩 또는 디코딩을 하면, 편리하게 URL 정보를 입출력할 수 있게 됩니다. 이런 기능은 파이썬의 urllib.parse.quote() 또는 urllib.parse.unquote() 함수를 이용하여 간단하게 해결할 수 있습니다.
In [2]:dec_string = '홍대 카페' enc_string = '%ED%99%8D%EB%8C%80%20%EC%B9%B4%ED%8E%98' print(f'''{dec_string} 를 인코딩하면 → {parse.quote(dec_string)} 입니다. {enc_string} 을 디코딩하면 → {parse.unquote(enc_string)} 입니다.''')
홍대 카페 를 인코딩하면 → %ED%99%8D%EB%8C%80%20%EC%B9%B4%ED%8E%98 입니다. %ED%99%8D%EB%8C%80%20%EC%B9%B4%ED%8E%98 을 디코딩하면 → 홍대 카페 입니다.
반응형'컴퓨터과학' 카테고리의 다른 글
[컴퓨터과학] 텍스트 인코딩 알아보기 (0) 2024.07.26 [컴퓨터과학] 논리 회로(Logic Gate) 알아보기 (0) 2024.07.15