최근 들어 저의 눈에 자주 띄는 용어 중에 URL과 URI가 있습니다. 보통 웹서버 호출을 위해 서버 URL을 코드에 사용하게 되죠.
근데 여러 API를 사용하던 중에 분명 보내는 데이터는 내가 아는 URL인데 URI라고 파라미터명이 적혀 있는 경우가 있습니다. 처음에는 비슷한 의미니 대충 넘어갔는데 이번에 한번 알아보고 정리해보았습니다.
URI (Uniform Resource Identifier)
- Uniform : 일정한 규칙을 따르는, 일정한, 균일한, 고른, 같은 형태의
- Resource : 자료, 자원
- Identifier : 식별자
위의 영어 단어의 뜻으로 보자면 URI = "일정한 규칙을 따르는 자료 식별자"라고 할 수 있겠네요. Identifier의 경우에는 우리가 흔히 아는 ID의 약자이기도 합니다. 즉, 식별할 수 있는 유일한 이름입니다.
여기서 유일하다는 속성이 중요합니다. URI는 특정한 자료에 대한 유일한 식별자여야 합니다. 그래서 우리가 브라우저의 주소창에 URI를 입력하면 동시에 2개의 페이지가 뜨는 경우는 없습니다. 단 하나의 페이지로 이동하게 됩니다.
그리고 Uniform이란 단어로 봤을 때 어떠한 규칙을 따르고 있어야합니다. 이것은 인터넷 표준으로써 정해져 있습니다.
규칙은 아래와 같습니다.
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
이렇게만 보면 굉장히 이해하기 어렵지만 우리가 일반적으로 이해하는 것은 아래의 그림을 보시면 됩니다.
각각의 간략한 뜻은 아래와 같습니다.
- http : http 프로토콜 규약을 의미합니다. http 이외에 ftp 등 여러 규약이 있습니다.
- :// : scheme 중의 일부입니다.
- opentutorials.org : Host, 즉, 도메인 이름입니다. IP 주소로 대체 사용하는 것도 가능합니다.
- :3000 : 포트, 웹서버에 접근하여 어떠한 포트로 접근할지를 정합니다. HTTP 표준 포트(80)는 생략이 가능합니다.
- ?~~ : Query String으로서 웹서버에 제공하는 추가 파라미터입니다. &으로 구분되는 키/값으로 짝을 이룬 리스트입니다.
URL (Uniform Resource Locator), URN (Uniform Resource Name)
위의 그림처럼 URI는 URN과 URL을 포함합니다. 그림과 함께 자세히 살펴보겠습니다.
URL (Uniform Resource Locator)
- 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약
- 웹 사이트 주소뿐만 아니라 네트워크 상의 자원을 모두 나타낼 수 있다.
- 프로토콜을 포함
- URL의 한계 - 만약 http://naver.com/directory/test1이라는 링크를 사용하다가 해당 URL을 가진 소유자가 http://naver.com/test1으로 위치를 변경했다면 링크는 사용할 수 없게 된다.
URN (Uniform Resource Name)
- URL의 한계로 인해 만들어졌다.
- URN은 네트워크 자료에 특정 이름을 부여하는 것
- URL과 다르게 위치를 변경하더라도 자료를 찾을 수 있다.
URL과 URI의 차이점
여기까지 보았을 때 전체적으로 URI는 규약이고 URL은 URI의 일부로 URI규약을 따르는 자원의 위치를 표시하는 방법인 것으로 보입니다.
결론적으로는 URL은 자료의 위치, URI는 자료의 식별자라고 보시면 됩니다.
URI O, URL O : https://marrrang.tistory.com/72.html
URI O, URL X : https://marrrang.tistory.com/72
예시에서 위쪽의 "https://marrrang.tistory.com/72.html"은 도메인과 파일명까지 나타나 있습니다. 즉, 특정 자료를 식별할 수 있고(URI), 자료의 위치도 알 수 있죠(URL).
하지만 아래의 "https://marrrang.tistory.com/72"의 경우에는 어디에 위치한 자료를 줄지는 서버만 알고 있습니다. 하지만 저것을 호출하면 특정 자료를 준다는 것은 알 수 있고 그것은 유일하죠. 따라서, URI적 특성은 만족하지만 URL적 특성은 만족하지 못합니다.
'Web > 웹 상식' 카테고리의 다른 글
[Kubernetes] Kubernetes tls Secret 생성하기 (0) | 2021.12.29 |
---|---|
[Spring Cloud] Feign에 대해서 (0) | 2021.10.09 |
[GraphQL] GraphQL 처음 시작하기 (0) | 2021.08.12 |
HandlerMethodArgumentResolver에 대해서 (0) | 2021.07.13 |
Java의 직렬화란 (0) | 2021.07.05 |