URI(Uniform Resource Identifier)는 인터넷에서 자원을 나타내는 유일한 식별자입니다. URI는 URL과 URN으로 나누어집니다.
URI와 URL의 가장 큰 차이는 URI 식별하고, URL의 위치를 가리킨다는 점이다.
URN은 URL의 단점을 이야기하면서 URN의 식별에 대해 좀 더 이야기해보자.
웹 상에서 URL은 완벽하지 않다. URL은 주소이지 실제 이름이 아니다. 이때의 단점은 리소스가 옮겨지면 URL을 더는 사용할 수 없다는 것이다. 그리고 그 시점에 기존 URL을 가리키고 있던 객체를 찾을 방법이 없어진다.
이런 문제를 예방할 수 있는 방법이 URN이다. 실제 그 객체의 위치와 상관없이 그 객체를 가리키고 있는 이름을 사용하는 것이다.
URN은 지속 통합 자원 지시자, PURL을 사용해서 URL로 URN의 기능을 제공해서 사용할 수 있다.
PURL은 리소스의 실제 URL 목록을 리소스 위치 중개 서버에 두고, 해당 리소스를 우회적으로 제공한다.
하지만 URL에서 URN으로 주소 체계를 TradeOff 하는 건 매우 큰 작업이기 때문에 당분간은 URL이 계속 사용될 것이다.
URL은 애플리케이션이 리소스에 접근할 수 있는 방법을 제공한다.
URL로 웹 상의 모든 리소스를 찾을 수 있지만, 그 리소스들은 스킴별로 접근방식이 달라진다.
💡 URL 문법
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프레그먼트>
이 모든 컴포넌트를 가지는 URL은 거의 없다. 보통 URL의 가장 중요한 세가지 컴포넌트 스킴, 호스트, 경로를 표기한 www.google.com처럼 주로 사용한다.
컴포넌트 | 설명 | 기본값 |
---|---|---|
스킴 | 리소스를 가져오기 위해 어떤 프로토콜을 사용하여 서버에 접근해야하는지 가리킨다. | 없음 |
사용자 이름 | 리소스에 접근하기 위해 사용자 이름이 필요한 몇몇 스킴이 존재한다. | anonymous |
비밀번호 | 사용자의 비밀번호, 사용자 이름에 콜론(:)으로 이어서 기술한다. | <이메일 주소> |
호스트 | 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소 | 없음 |
포트 | 리소스를 호스팅하는 서버가 열어놓은 포트번호 | 스킴별로 다름 |
경로 | 서버 내 리소스가 서버 어디에 있는지 가리킨다. | 없음 |
파라미터 | 이름/값 쌍을 가지며, 입력 파라미터를 기술하는 용도로 사용한다. | 없음 |
질의 | 스킴에서 애플리케이션에 파라미터를 전달하는데 쓰인다. URL의 끝에 ‘?’로 구분한다. | 없음 |
프레그먼트 | 리소스의 조각이나 일부분을 가리키는 이름이다. | 없음 |
스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 (:) 콜론으로 구분된다. 스킴 명은 대소문자를 가리지 않는다.
스킴 | 설명 |
---|---|
http | 일반 URL 포맷, 포트의 기본값은 80(생략가능) 예) http://www.google.com:80/index.html |
https | http 스킴과 거의 같다. 다른 점은 HTTP의 커넥션 양 끝단에서 암호화하기 위해 SSL을 사용한다. 예) https://www.google.com:443/secure.html |
mailto | 이메일 주소를 가리킨다. 이메일은 다른 스킴과는 다르게 동작하기 때문에 표준 URL과는 다른 포맷을 가진다. |
ftp | 파일 전송 프로토콜은 FTP 서버에 있는 파일을 내려 받거나 올리고 콘텐츠 목록을 가져오는 데 사용한다. |
rtsp, rtspu | 실시간 스트리밍 프로토콜을 통해서 읽을 수 있는 오디오 및 비디오 같은 미디어 리소스 식별자다. |
file | 주어진 호스트 기기(로컬, 네트워크 파일 시스템 등)에서 바로 접근할 수 있는 파일들을 나타낸다. |
news | 특정 문서나 뉴스 그룹에 접근하는데 사용한다. |
telnet | 대화형 서비스에 접근하는데 사용한다. |
URI는 다음과 같은 방식으로 활용됩니다.
URI는 인터넷에서 리소스를 고유하게 식별하는 중요한 수단입니다. URI를 사용하여 인터넷 상의 다양한 리소스를 쉽게 찾고 공유할 수 있습니다.
URL은 상대 URL과 절대 URL 두 가지로 나뉩니다.
상대 URL은 기저 URL을 기준으로 상대적인 경로를 나타내는 URL입니다. 예를 들어, "https://www.example.com/some/very/long/path/to/a/page"라는 기저 URL이 있다고 가정하면, 상대 URL인 "../another/page"는 "https://www.example.com/some/very/long/path/to/another/page"로 변환됩니다.
상대 URL을 절대 URL로 변환하기 위해서는 기저 URL과 상대 URL을 결합하는 알고리즘을 사용합니다. 이 알고리즘은 다음과 같이 작동합니다.
예를 들어, 기저 URL이 "https://www.example.com/some/very/long/path/to/a/page"이고, 상대 URL이 "../another/page"인 경우, 다음과 같이 알고리즘을 적용할 수 있습니다.
이처럼, 상대 URL과 기저 URL을 결합하여 절대 URL로 변환하는 알고리즘을 사용하여 단축 URL을 포함한 모든 URL을 절대 URL로 변환할 수 있습니다.
단축 URL(Shortened URL)은 긴 URL을 짧게 줄이는 서비스로, 주로 Twitter나 SMS 등에서 많이 사용됩니다. 단축 URL은 URL을 대체하는 새로운 URL입니다. 즉, 원래 URL을 짧은 URL로 대체하여 사용합니다. 대부분의 단축 URL 서비스는 사용자가 입력한 URL을 데이터베이스에 저장하고, 해당 URL에 대한 짧은 URL을 생성합니다. 이렇게 생성된 짧은 URL은 원래 URL과 연결되어 사용됩니다.
하지만, 단축 URL을 사용하면 보안 문제가 발생할 수 있습니다. 예를 들어, 단축 URL을 클릭하면 악성 코드가 설치된 웹 사이트로 리디렉션될 수 있습니다. 또한, 단축 URL을 통해 사이트에 접속하면, 사용자의 개인정보가 수집되거나 해킹 당할 수도 있습니다. 따라서, 단축 URL을 사용할 때에는 주의해야 합니다.
URI는 일부 문자들이 안전하지 않은 문자로 간주됩니다. 이러한 문자들은 URI에 직접 사용될 수 없으며, 이를 URI 인코딩을 통해 변환해야 합니다. 안전하지 않은 문자에는 공백, &, %, ?, /, # 등이 있습니다.
안전하지 않은 문자를 URI에서 사용할 경우, URI 해석기는 이를 잘못 해석할 수 있습니다. 예를 들어, URI에서 공백은 %20으로 대체됩니다.
URL 설계자는 사람들이 URL에 안전한 알파벳 이외의 문자도 포함하려고 할 때가 있다는 사실을 알고 나서부터 이스케이프라는 기능을 추가했다.
이스케이프는 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있는 기능이다.
프락시(Proxy)는 클라이언트와 서버 간의 중개자 역할을 하는 컴퓨터입니다. 프락시는 클라이언트로부터 요청을 받아 서버에 전달하고, 서버로부터 응답을 받아 클라이언트에게 전달합니다. 이렇게 프락시를 통해 데이터를 전달하는 것을 프락시 서버라고 합니다.
프락시는 URL을 사용하여 클라이언트와 서버 간의 통신을 중개합니다. 프락시는 URL을 이용하여 웹 사이트에 접속하거나 파일을 다운로드하도록 설정할 수 있습니다. 이를 통해 프락시는 네트워크 대역폭을 효율적으로 관리하고, 웹 사이트의 캐싱, 보안, 로깅 등 다양한 기능을 수행할 수 있습니다.
프락시는 URL을 사용하여 원격 서버에 접근할 수 있습니다. 클라이언트가 프락시에 요청을 보내면, 프락시는 해당 URL을 사용하여 원격 서버에 접속하고 데이터를 가져옵니다. 이러한 프락시는 웹 캐싱 프락시, 웹 필터링 프락시, 리버스 프락시 등으로 구분됩니다.
따라서, URI는 프락시 서버를 이용하여 웹 사이트에 접근하고, 데이터를 전송하는데 중요한 역할을 합니다.
URI는 URL과 URN을 포함하는 개념이기 때문에 우리가 일반적으로 주소창에서 보는 것은 URL이라고 해석해도 무리가 없다.
URL은 정해진 문법대로 작성해야 원하는 리소스를 정확하게 얻어올 수 있다.
현재는 정해진 문법대로 작성하지 않은 경우, 즉 단축 URL을 사용하거나 안전하지 않은 문자를 사용하는 경우 알고리즘을 통해 절대URL로 변환하거나 안전한 문자로 인코딩할 수 있는 이스케이프라는 기능도 있다.
URI에 대해 설명하겠습니다.
보통 우리가 자주 사용하는 용어는 URL입니다. 하지만 URI는 URL과 URN 개념을 모두 담고 있는 개념입니다.
URI는 인터넷에서 자원을 나타내는 식별자입니다. URL은 주소, URN은 주소를 이름으로 대신 접속할 수 있는 하나의 명칭을 이야기합니다.
URL 주소가 변경될 경우, 사용자들이 URL을 북마크하여 다시 그 자원을 찾아갈 수 없는 문제를 해결하기 위해 URN을 활용하는 노력도 있지만, 아직은 큰 필요성을 느끼지 못해서 URL을 대부분 사용하고 있습니다.
그래서 URI를 이야기할 때 URL로 바꿔 이야기해도 이상하지 않습니다. 그러나 개념을 명확하게 구분하고 알고 있는 것이 중요합니다. 또한, 웹 데이터가 앞으로 점점 더 많아짐에 따라 URN의 개념이 중요해질 순간도 올 것으로 예상됩니다.
URL은 하나의 문법적 규칙이 존재합니다. 이것은 자원을 효율적으로 가져오기 위한 하나의 방법입니다. 규칙을 제대로 지켜 작성한 URL은 네트워크 상에서 도중에 길을 잃어버리지 않게 해줄 수 있습니다.
문법 중에서 우리가 자주 사용하는 부분은 프로토콜을 기록하는 스킴 부분과 서버 부분인 호스트, 자원을 찾아올 수 있게 해주는 경로 부분입니다.
현재는 프로토콜 부분에 주로 포트번호 443인 https를 많이 사용합니다. www.google.com의 경우 스킴 부분인 https는 생략되었고, 자원 부분도 생략되어 있는 것입니다. 따라서 www.google.com 자체만 본다면 호스트만 기록되어 있는 것입니다.
이 경우를 단축 URL이라고 하는데, 브라우저는 단축 URL을 알고리즘을 통해 원하는 정보를 추가해서 제대로 된 정보가 서버에 도달할 수 있도록 해줍니다.
URI는 보통 다음과 같은 방식으로 활용됩니다.
URI는 인터넷에서 리소스를 고유하게 식별하는 중요한 수단입니다. URI를 사용하여 인터넷 상의 다양한 리소스를 쉽게 찾고 공유할 수 있습니다.
Reference
성공과 실패를 결정하는 1%의 네트워크 원리 - Tsutomu Tone 지음, 이도희 옮김, (주)도서출판 성안당
HTTP 완벽 가이드 - [ 데이빗 고울리, 브라이언 토티, 마조리 세어이, 세일루 레디,안슈 이가왈 ]지음, [ 이응준, 정상일 ]옮김, 프로그래밍 인사이트
ChatGPT