rosieblue
article thumbnail
728x90

URI

URI(Uniform Resource Identifier)λŠ” μžμ›μ„ κ°€λ¦¬ν‚€λŠ” λ¬Έμžμ—΄μ΄λ‹€.

μžμ›μ€ μ›ΉνŽ˜μ΄μ§€, μ‚¬μ§„μ΄λ‚˜ html 파일, λ™μ˜μƒ λ“± μΈν„°λ„·μ—μ„œ κ°€μ Έμ˜¬ 수 μžˆλŠ” 데이터 무엇이든 될 수 μžˆλ‹€.
URIλŠ” 이제 κ·Έ μžμ›μ„ κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžμ΄λ‹€. μžμ›μ€ μ΄λ¦„μœΌλ‘œ λ‚˜νƒ€λ‚Ό μˆ˜λ„ 있고 κ·Έ μžμ›μ˜ μœ„μΉ˜λ‘œ λ‚˜νƒ€λ‚Ό μˆ˜λ„ μžˆλ‹€.

 

URI Syntex

https://en.wikipedia.org/wiki/Uniform_Resource_Identifier

 

URIλŠ” scheme, authority(userinfo), path, query 그리고 fragment둜 μ΄λ£¨μ–΄μ Έμžˆλ‹€.

   The generic URI syntax consists of a hierarchical sequence of
   components referred to as the scheme, authority, path, query, and
   fragment.

      URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

      hier-part   = "//" authority path-abempty
                  / path-absolute
                  / path-rootless
                  / path-empty

좜처 : https://datatracker.ietf.org/doc/html/rfc3986#section-3.1

scheme의 λŒ€ν‘œμ μΈ μ˜ˆλ‘œλŠ” httphttpsftpmailtofiledata and irc 등이 μžˆλ‹€. scheme을 톡해 μžμ›μ— μ–΄λ–»κ²Œ μ ‘κ·Όν•΄μ•Όν•˜λŠ”μ§€ μ•Œ 수 μžˆλ‹€. λ‚˜λ¨Έμ§€ ꡬ성 μš”μ†Œλ“€μ€ URL λΆ€λΆ„μ—μ„œ 더 μžμ„Ένžˆ 보도둝 ν•˜κ² λ‹€.

 

μ•„λž˜λŠ” URI의 μ˜ˆμ‹œμ΄λ‹€.

          userinfo       host      port
          β”Œβ”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β” β”Œβ”΄β”
  https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top
  β””β”€β”¬β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”¬β”˜
  scheme          authority                  path                  query           fragment

  ldap://[2001:db8::7]/c=GB?objectClass?one
  β””β”¬β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜β””β”€β”¬β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
  scheme   authority   path      query

  mailto:John.Doe@example.com
  β””β”€β”¬β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  scheme     path

  news:comp.infosystems.www.servers.unix
  β””β”¬β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  scheme            path

  tel:+1-816-555-1212
  β””β”¬β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
  scheme    path

  telnet://192.0.2.16:80/
  β””β”€β”¬β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜β”‚
  scheme     authority  path

  urn:oasis:names:specification:docbook:dtd:xml:4.1.2
  β””β”¬β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  scheme                    path

 

URL

URL(Uniform Resource Locator)은 μΈν„°λ„·μ—μ„œ μžμ›μ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” λ¬Έμžμ—΄μ΄λ‹€.

HTTP λ§₯λ½μ—μ„œ URL은 보톡 링크 ν˜Ήμ€ μ›Ή μ£Όμ†ŒλΌκ³  λΆˆλ¦°λ‹€. μš°λ¦¬κ°€ κ°€μž₯ 많이 λ³΄λŠ” URI의 ν˜•νƒœκ°€ URL이라고 ν•  수 μžˆλ‹€. URI와 URL μ°¨μ΄λŠ” μ•„λž˜ μžˆμœΌλ‹ˆκΉŒ κΆκΈˆν•˜λ©΄ λ¨Όμ € 보고 였기!

https://developer.mozilla.org
https://developer.mozilla.org/en-US/docs/Learn/
https://developer.mozilla.org/en-US/search?q=URL

μœ„μ™€ 같은 것듀이 URL의 μ˜ˆμ‹œλΌκ³  λ³Ό 수 μžˆλ‹€. ν•΄λ‹Ή URLλ₯Ό μ£Όμ†Œμ°½μ— μž…λ ₯ν•˜λŠ” 이에 λ§žλŠ” 데이터λ₯Ό λ‘œλ“œν•  수 μžˆλ‹€.

 

URL Syntex

이제 URL의 ꡬ쑰λ₯Ό μ‚΄νŽ΄λ³΄μž.

URL도 URI이기 λ•Œλ¬Έμ— μœ„μ— λ‚˜μ˜¨ URI의 ꡬ성을 λ”°λ₯Έλ‹€. 이제 μ € ꡬ성 μš”μ†Œμ— λŒ€ν•˜μ—¬ ν•˜λ‚˜ν•˜λ‚˜ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž.

 

scheme 

URL의 첫 번째 뢀뢄은 λΈŒλΌμš°μ €κ°€ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ” 데 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” ν”„λ‘œν† μ½œμ„ λ‚˜νƒ€λ‚Έλ‹€. 일반적으둜 μ›Ήμ‚¬μ΄νŠΈμ˜ 경우 ν”„λ‘œν† μ½œμ€ HTTPS λ˜λŠ” HTTP, FTP 등이 μžˆλ‹€.

Authority 

Authorityμ—μ„œλŠ” User info, 호슀트λͺ…(ex: IP μ£Όμ†Œ, 도메인 이름 λ“±), 포트 등이 ν¬ν•¨λœλ‹€.

  • μ—¬κΈ°μ„œ User infoλŠ” 거의 쓰이지 μ•ŠλŠ”λ‹€
  • 호슀트λͺ…은 IPμ£Όμ†Œ ν˜Ήμ€ 도메인이름(tistory.com) 등이 올 수 μžˆλ‹€.
  • ν¬νŠΈλŠ” ':'둜 κ΅¬λΆ„λ˜λŠ”λ° 80번(HTTP), 443(HTTPS)이면 μƒλž΅κ°€λŠ₯ν•˜λ‚˜, κ·Έ μ΄μ™Έμ˜ 경우 ν•„μˆ˜μ΄λ‹€.

Path

/path/to/myfile.html은 μ›Ή μ„œλ²„μ— μžˆλŠ” μžμ›μ˜ κ²½λ‘œμ΄λ‹€.

Query String

'?'λ‘œμ‹œμž‘ν•˜κ³  key-value ν˜•νƒœμ΄λ‹€. μ—¬λŸ¬κ°€μ§€ νŒŒλΌλ―Έν„°κ°€ 있으면 '&'으둜 κ΅¬λΆ„ν•œλ‹€.

Fragment

fragmentλŠ” '#'둜 μ‹œμž‘ν•˜λ©° html λ‚΄λΆ€ 뢁마크 등에 μ‚¬μš©ν•œλ‹€. ν•˜μ§€λ§Œ μ„œλ²„λ‘œ μ „μ†‘λ˜μ§€λŠ” μ•ŠλŠ”λ‹€.

 

URL의 ν•œκ³„

이건 μ•„λ§ˆ μ—¬λŸ¬λΆ„λ„ μ’…μ’… λ³Έ 경우일 것이닀. μžμ›μ€ κ·ΈλŒ€λ‘œμ§€λ§Œ 이λ₯Ό κ°€λ¦¬ν‚€λŠ” μ£Όμ†Œκ°€ λ³€ν•˜λŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μž.

예λ₯Ό λ“€μ–΄ μ–΄λ–€ μ£Όμ†Œ http://aaaaa/pathA/1에 있던 글을 λ‚΄κ°€ μŠ€ν¬λž©ν–ˆλ‹€κ³  ν•˜μž. 그런데 κ·Έ κΈ€μ˜ μž‘μ„±μžκ°€ κ°‘μžκΈ° κ·Έ μ£Όμ†Œλ₯Ό http://aaaaa/pathB/1둜 λ°”κΏ¨λ‹€κ³  μƒκ°€ν•΄λ³΄μž. (예λ₯Ό λ“€μ–΄ μΉ΄ν…Œκ³ λ¦¬λ₯Ό λ°”κΎΌκ²½μš°) 그런 경우 λ‚˜λŠ” 이제 아무리 http://aaaaa/pathA/1μ•ˆμ— μžˆλŠ” 글에 μ ‘κ·Όν•˜κ³  싢어도 μ ‘κ·Όν•  μˆ˜κ°€ μ—†λ‹€. μ™œλƒν•˜λ©΄ κ·Έ μ£Όμ†Œκ°€ μ˜λ―Έμ—†μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ΄λ‹€.

 

κ°‘μžκΈ° μ˜ˆμ‹œκ°€ λ– μ˜¬λžλŠ”λ° Cμ—μ„œ 포인터λ₯Ό μƒκ°ν•΄λ³΄μž. (λͺ¨λ₯΄λ©΄ λ„˜μ–΄κ°€λ„ λœλ‹€)

int a=1;
int* p1=&a;

이런 경우 λ³€μˆ˜ a에 μ ‘κ·Όν•˜κΈ° μœ„ν–‡ μš°λ¦¬λŠ” 포인터 p1을 μ‚¬μš©ν–ˆλ‹€.

 

ν•˜μ§€λ§Œ μ €κΈ°μ„œ 이후에 p1=NULL;둜 ν•΄μ£Όλ©΄ μ–΄λ–»κ²Œ 될까? μš°λ¦¬λŠ” 더이상 aλ₯Ό μ ‘κ·Όν•  μˆ˜κ°€ μ—†λ‹€. μ™œλƒν•˜λ©΄ μš°λ¦¬λŠ” μ›λž˜ aμžμ²΄κ°€ μ•„λ‹ˆλΌ p1으둜 μ ‘κ·Όν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. μ˜ˆμ‹œκ°€ μ’€ μ–΅μ§€μŠ€λŸ¬μš΄ 점이 없지 μ•Šμ€λ°, μ΄λŸ°μ‹μœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€. URL은 포인터고, μžμ›μ€ 데이터 그자체둜!

μ•„λ¬΄νŠΌ μ΄λŸ¬ν•œ ν•œκ³„ λ•Œλ¬Έμ— URN이 λ“±μž₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

 

URN

URN(Uniform Resource Name)은 μžμ›μ˜ '이름'을 λ‚˜νƒ€λ‚΄λŠ” μ‹λ³„μžμ΄λ‹€. URN은 μœ„μΉ˜(μ£Όμ†Œ)λ‚˜ 접근법에 λŒ€ν•œ λͺ…μ‹œ 없이 μžμ›μ„ λ‚˜νƒ€λ‚Έλ‹€.

예λ₯Ό λ“€λ©΄, ISBN μ‹œμŠ€ν…œμ—μ„œ ISBN 0-486-27557-4은 μ…°μ΅μŠ€ν”Όμ–΄μ˜ μž‘ν’ˆ λ‘œλ―Έμ˜€μ™€ μ€„λ¦¬μ—£μ˜ νŠΉμ • μ—λ””μ…˜μ„ μ§€μΉ­ν•œλ‹€. 이λ₯Ό URN으둜 λ‚˜νƒ€λ‚΄λ©΄ urn:isbn:0-486-27557-4으둜 ν‘œκΈ°ν•  수 μžˆλ‹€. 단, 이 ν‘œκΈ°λ²•μ—λŠ”μ–΄λ””μ—μ„œ μ±…μ˜ 사본을 μ°Ύμ•„μ•Ό 할지에 λŒ€ν•œ μ •λ³΄λŠ” ν¬ν•¨ν•˜κ³  μžˆμ§€ μ•Šλ‹€.

 

URI, URL, URN의 관계

예λ₯Όλ“€μ–΄ '뿑뿑이'λΌλŠ” μ‚¬λžŒμ΄ Aμ•„νŒŒνŠΈ 123ν˜Έμ— μ‚°λ‹€κ³  κ°€μ •ν•΄λ³΄μž. μ΄λ•Œ μžμ›μ€ λΏ‘λΏ‘μ΄λΌλŠ” 생λͺ…체가 λ˜λŠ” 것이고, μžμ›μ˜ 이름은 '뿑뿑이'일 것이닀. 그리고 μžμ›μ˜ μœ„μΉ˜λŠ” 'Aμ•„νŒŒνŠΈ 123호'κ°€ λœλ‹€.

μ—¬κΈ°μ„œ μžμ›μ˜ μœ„μΉ˜λ₯Ό μš°λ¦¬λŠ” URL(Uniform Resource Loacator), μžμ›μ˜ 이름을 URN(Uniform Resource Name)이라고 ν•˜λŠ” 것이닀. λ”°λΌμ„œ '뿑뿑이'λΌλŠ” 이름은 URN, 'A μ•„νŒŒνŠΈ 123호'λŠ” URL이 λœλ‹€κ³  ν•  수 μžˆκ² λ‹€. 그리고 URL, URN λͺ¨λ‘ μžμ›μ„ κ°€λ¦¬ν‚€λŠ” 방법 쀑 ν•˜λ‚˜μ΄λ―€λ‘œ URI에 μ†ν•˜κ²Œ λœλ‹€. μ™œλƒν•˜λ©΄ μš°λ¦¬λŠ” μžμ›μ„ κ°€λ¦¬ν‚€λŠ” 것 자체λ₯Ό URI라고 ν•˜κΈ°λ‘œ ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

μœ„ 그림처럼 URLκ³Ό URN은 URI의 뢀뢄집합이닀.

 

더보기
profile

rosieblue

@Rosieblue

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!