Suhwanc

 

1. 서론

 

저번 학기 모바일 스튜디오 수업 때 안드로이드 앱을 하나 만든 적이 있는데, 거기서 URI를 파싱 해서 이미지를 참 많이도 불러왔었다. 그땐 URI가 비트맵처럼 이미지와 관련된 무언가? 일 거라고만 생각했지 막상 찾아볼 생각을 안 했는데, 이번에 URI에 대해 알고는 조금 놀랐다. 이 글은 간단한 내용이지만 나의 무지를 반성하고자 넣었다. 

 

 

 

2. URI(i)

 

URL이 아니라 URI이다.

URI는 인터넷 자원을 나타내는 고유 식별자로 풀 네임은 Uniform Resource Identifier이다.

단어를 천천히 해석해보면 다음과 같다.

 

Uniform : 리소스를 식별하는 통일된 방식

Resource : 자원. URI로 식별할 수 있는 모든 자원을 의미한다.

Identifier : 다른 항목과 구분하는 데 필요한 정보

 

URI는 예를 들자면, 현재 이 블로그의 메인 페이지 주소이다. https://no-answer-brother.tistory.com/

이 링크를 클릭하면 반드시 메인 페이지가 나와야 하듯, 모두 독립적이어야 한다.

이 선수들 이름처럼..

 

또한 URI는 URL과 URN을 포함하는 개념이다.

 

3. URL, URN

 

3.1 URL

 

URL은 앞에 UR은 URI랑 같은데, L이 Locator를 의미한다.

U R man?..

 

Locator는 리소스가 있는 위치를 지정한다는 의미이다.

 

3.2 URN

 

URN도 N은 Name을 의미한다. 리소스에 이름을 부여한다는 의미이다.

 

 

3.3 차이점

 

이번엔 이 둘의 차이점을 알아보자.

 

 

이 사진은 우리학교 도서관에서 정의란 무엇인가라는 책을 검색해 나온 결과이다.

여기서 URL은 책의 고유 번호인 ISBN을 의미한다. 아마 이 ISBN은 국내 존재하는 모든 책들 중 유일할 것이다.

하지만 URN은 정의란 무엇인가라는 책 이름을 의미한다. 따라서 유일하지 않을 수도 있다.

 

이러한 이유로 사실 URN은 잘 사용하지 않는다. 심지어 URI와 URL을 거의 동일시하는 분위기이다.

따라서 이 글에서도 나중에 두 용어를 혼동하더라도 URL이라고 봐주시면 좋을 듯하다 😅

 

 

 

4. URL 심층 분석

 

앞에서 우린 URL에 주목해야 한다는 점을 알았다. 그래서 좀 더 깊게 파보도록 하자.

 

우선 URL의 전체 문법은 다음과 같다.

 

scheme://[userinfo@]host[:port][/path][?query][#fragment]

 

이건 문법일 뿐이고, 직접 구글에 일론 머스크를 검색해보았다. 같이 비교해보자.

 

https://www.google.com/search?q=elon+musk&ei=LkDEB&sclient=gws-wiz 

 

사실 훨씬 더 긴데 쿼리가 너무 많이 붙어서 뒷부분을 잘라냈다. 

 

하나씩 살펴보자.

 

1) scheme

scheme는 주로 프로토콜을 의미한다.

프로토콜은 어떤 방식으로 자원에 접근할 것인지에 대한 규칙 명시이다.

scheme는 아래 주소의 https 부분인데, https는 http에 보안(secure)을 추가한 프로토콜이다.

 

2) userinfo@

거의 쓰이지 않는다고 한다. 스킵!

 

3) host

간단하다. www.google.com

IP주소도 호스트가 될 수 있다.

 

4) :port

포트 번호를 의미한다. 포트에 대한 것은 앞 장에서 설명하였으니 생략한다.

덧붙여서 이 포트 부분도 생략이 가능한데, 위 구글 주소도 생략된 것을 볼 수 있다.

 

5) /path

리소스 경로를 의미하며, 계층적 구조이다.

여기서는 구글의 search 기능을 통해 접근하였으므로 뒤에 search가 붙었고

현재 필자가 쓰고 있는 공간도 사실 tistory/manage/newpost 와 같은 계층적 주소 공간이다.

 

6) query

쿼리는 질문을 의미한다. (너무 당연한가?..)

key=value 형태를 가지며 ?로 시작하고 &로 추가할 수 있다.

 

예를 들어 사과랑 멜론이랑 수박줘! 라고 쿼리를 날린다면

?fruit=apple&fruit=melon&fruit=watermelon 이 되겠다.

 

이 문장 자체를 쿼리 파라미터, 또는 쿼리 스트링이라 불린다.

 

7) fragment

fragment는 html 내부 북마크 등에 사용되는 요소로, 서버에 전송하는 정보는 아니다.