간단하다. 이 URI와 URL에 대한 것을 어느정도 알고 있어야 다음부터 나올 튜토리얼들을 진행할 수 있기 때문이다
물론 튜토리얼임을 고려해서 어려운 부분을 어느정도 생략하고 이해하기 쉽게 비유해서 설명한 부분이 없지 않으니 지금 이 포스트의 내용은 그냥 "음 이게 그걸 말하는 거구나" 라는 정도로만 넘어가 주면 좋겠다
더 신뢰성 있는 내용을 알고 싶다면 구글에 URL의 구성요소나 구조, URI와 URL의 차이에 대해 검색해서 보는 것이 좋을 것이다
뇌를 빼고 인터넷 세상을 돌아다니다 보면 주소창에 아래와 같은 문자열이 보일 것이다
예시로 에브리타임의 주소를 가져왔다
https://everytime.kr/377393
엥? 이게 URL 아니냐고? 맞는 말인데 이 문자열은 URL 이면서 동시에 URI 이기도 하다
그럼 도대체 뭐가 다른가 싶겠지만 용어가 따로 구분 되어있다는 것은 엄밀히 다른 것을 말하는 것이니 구분 되어있지 않겠는가
URI는 네트워크상에서 어떤 자원을 식별하는 고유한 문자열, 즉 자원 자체를 식별하는 고유한 문자열이다. 예를 들어 위의 에브리타임 주소는 everytime.kr 이라는 곳의 377393 이라는 자원을 식별하는 문자열인 것이다
네트워크 상에서 자원이란 건 어떤 웹페이지가 될 수도 있고, 이미지가 될 수도 있는데 그냥 우리가 구별할 수 있는 모든 데이터가 자원이 된다
아무튼 이 URI는 그냥 자원을 식별하는 코드이지, 그 자원이 어디에 있는지는 알려주지 않는다. 그냥 저렇게 생긴 문자열을 주소창에 입력하면 뇌를 극한으로 뺀 웹서핑이 가능하던 것을 생각해보면 쉽게 이해가 되진 않겠지만 아무튼 그렇다고 외워두자
위에서 말한 URI 만으로는 네트워크 상에서 그 자원이 어디있는지 모른다고 했다. 그럼 그 자원을 얻기 위해서는 그 자원이 어디 있는지, 그리고 어떻게 찾아가는지 알려줘야 하지 않겠는가?
그 자원이 어디있는지, 그리고 어떻게 찾아가야 하는지에 대한 방법을 알려주는 것이 바로 URL이다. URI를 설명할 때 예시로 들었던 에브리타임의 주소를 다시 한번 보자
https://everytime.kr/377393
이 주소는 위에서도 말했듯이 URL 이면서 URI 이다. 그럼 이 문자열은 everytime.kr 의 377393이라는 자원을 나타내는 식별자이면서 동시에 해당 자원으로 가는 길을 안내하는 방법이기도 하다
그런데 앞에 https://
라는 문자가 붙어있다. 이것은 해당 자원을 얻기위해 사용해야하는 통신규약(Protocol)을 나타내는 것으로 everytime.kr의 377393 이라는 자원을 얻기위해서는 https라는 프로토콜을 사용해야 한다는 것을 나타낸다
실제로 URL을 통해 어떤 네트워크 상의 자원에 접근하기 위해서는 그 URL에 맞는 프로토콜도 함께 알아야만 한다
그렇다. URI의 형태로 URL을 사용하니 보통 혼동해서 사용하는 경향이 있는데, 엄연히 URI가 URL의 상위호환격인 개념이다
URL은 아래와 같은 구조로 이루어져 있다. 아래 이미지는 파이어폭스를 개발하는 모질라 재단의 해당 링크에서 가져왔다.
Protocol(Scheme)은 URL에서 해당 네트워크 자원을 얻기위해 사용해야하는 통신규약을 나타내는 부분이다
이 URL의 Scheme은 http라는 규약을 이용해 통신한다고 정의한 것이다
Domain Name은 해당 자원이 위치한 웹서버의 위치를 가리킨다. 예시의 URL에선 www.example.com이라는 웹서버에 해당 자원이 있다고 가리키고 있다
Port는 해당 웹서버 상의 자원에 접근하기 위해서 사용해야만 하는 관문(Port)의 번호를 나타낸다. 포트번호를 생략할 경우 경우 미리 정해져 있는 표준(Well-Known) 포트번호를 이용하게 되는데 http의 경우 80번, https의 경우 443번을 이용하게 된다
만일 포트번호를 지정해주어야 한다면 반드시 포트 번호를 도메인 뒤에 붙여주어야만 제대로 작동하니 주의
Path는 해당 웹서버 상에서 자신이 찾고자 하는 자원이 어디에 있는지 알려주는 경로(Path)이다. 위의 URL에서는 /path/to/myfile.html 이라는 경로를 지정해주면 해당 자원에 접근할 수 있다고 알려주고 있다
초창기엔 웹서버 상의 실제 파일 주소를 나타냈지만 최근에는 이러면 보안상 좋지 않아서 웹서버 상에서 추상화한 경로를 보여주는 경우가 많다. 위에서 예시로 나타낸 에브리타임의 주소가 좋은 예인데 377393 이라는 경로만 보고 저 데이터의 서버 상의 실제 위치를 유추할 수 있는 사람이 얼마나 있을까? 아마 에브리타임 개발자들 외엔 없을 것이다
Parameters는 웹서버에 추가로 제공하는 값들이다. 다른 말로 Query String 또는 Query Parameter 라고도 한다
이 파라미터들은 key=value
와 같이 한쌍의 형태로 데이터를 나타내며, & 기호로 데이터들을 구분한다, 그리고 이 파라미터를 정의하는 규칙은 웹서버마다 모두 다르기 때문에
Anchor는 웹서버로부터 받은 데이터의 특정 부분을 가리키는 일종의 책갈피와 같은 역할을 한다. 다른 말로는 Fragment Identifier라고도 한다
웹서버로부터 받아온 데이터의 특정 위치로 이동만 하며, 요청이 서버에 보내지진 않는다는 특징이 있다