Custom URI Scheme 만들기

2013. 1. 20. 12:04Network

인터넷을 하다가 URL 링크가 특정 어플리케이션과 연결되는 경우가 있다. 어떻게 이걸 구현했을까 정보를 찾아 여기에 정리하였다. 모두 URI Scheme를 통해서 구현하는 것이었고 구현도 생각보다 간단하다.

URI Scheme

URI는 특정 Resource에 대한 위치정보를 제공한다. 그래서 링크를 열었을 때 해당자원(HTML 문서, 이미지 등)을 찾아 내려받게 된다. 하지만 내려받은 후 해당자원이 어떤 유형이고 어떻게 처리할지는 어떻게 식별하는 것일까? 확장자로 식별할까? 여러 방법이 있겠지만 그중 하나가 바로 URI Scheme을 통한 식별이다. URI의 시작부터 ':'(콜론)까지의 정보가 URI Scheme이다.

  • http://www.naver.com : 여기서는 http가 URI Scheme이며 이 형태를 만나면 보통 브라우저와 연결되어 HTTP 문서가 해석된다.
  • ftp://file.mycompany.com : 여기서는 ftp가 URI Scheme이며 이 형태를 만나면 보통 FTP 프로그램과 연결되어 FTP처리를 수행한다.
  • kakaolink://sendurl?msg=helloworld : 여기서는 kakaolink가 URI Scheme이며 Custom URI Scheme이다. 시스템에서 Custom URI Scheme을 만나면 해당 Custom URI Scheme의 적합한 처리 방법이 있는지 찾아서 실행한다. (없으면 '알 수 없는 URI Scheme'라고 오류가 뜬다.)
    해당 Custom URI Scheme를 찾지 못한 Firefox Browser가 'The address wasn't understood' 라는 내용을 출력하고 있다

Official URI schemes

IANA(ICNN)에서 이미 여러 URI Scheme를 정의하고 관리하고 있다. http, mailto, magnet 외 다수가 있으며 상세 정보는 http://en.wikipedia.org/wiki/URI_scheme에서 확인할 수 있다.

Custom URI schemes

공식적으로 지정되고 관리되는 URI Scheme도 있지만 사용자가 직접 URI Scheme를 만들수도 있다. 대부분의 OS에서 URI Scheme을 직접 등록하고 설정할 수 있도록 지원하고 있으며 Andrond, iOS, Windows 등 시스템에 따라 각각 이를 등록하는 방법은 다르다.

사용자는 잘 모르겠지만 Software를 인스톨 할 때마다 각 Software들은 자신만의 URI Scheme를 시스템에 등록해 놓는다. 카카오톡을 깔면 kakaolink가.. Visual Studio 2012를 깔면 vstfs라는 URI Scheme가 시스템에 등록된다. 해당 URI Scheme이 포함된 URL을 사용자가 클릭하면 일반적으로 해당 어플리케이션으로 연결되는 방식으로 동작한다. 시스템에 등록되지 않은 URI Scheme이 포함된 링크를 클릭하면 알 수 없는 Scheme라고 메시지가 나타날 것이다.

Custom URI Scheme in Windows OS

Windows에서는 Registry를 편집함으로써 URI Scheme를 등록할 수 있다. 자세한 Custom URI Scheme의 구현 및 등록방법은 http://msdn.microsoft.com/en-us/library/aa767914%28VS.85%29.aspx#app_reg에서 확인할 수 있으며 몇가지 핵심 절차를 간단히 설명하면 아래와 같다.

  1. [Windows Key + R키]를 누른다. [실행] 창이 나타나면 [regedit]를 입력하여 레지스트리 편집기를 열자. [HKEY_CLASSES_ROOT]를 열어보면 시스템에 등록된 확장자 정보 또는 URI Scheme 정보들을 볼 수 있다.
  2. [HKEY_CLASSES_ROOT]의 하위에 [Key]를 추가하여 URI Scheme을 등록할 수 있다. 여기서 [Key]의 이름이 바로 스키마 명이 되게 된다.
  3. 여기서는 [test]라는 URI Scheme명칭을 등록해보도록 하겠다.

  4. 추가된 [Key]에 [String Value]를 추가하자.
  5. 이름은 [URL Protocol]으로 지정하고 값은 공백("")으로 그대로 남겨두면 된다. 이 [URL Protocol]을 통해서 시스템은 이 [Key]가 URI Scheme이라는 것을 식별하게 된다.

  6. 이제 URI Scheme를 통해 실행될 기능을 설정하기 위해 새로운 [Key]를 등록하자.
  7. [Key]의 이름은 [shell]로 지정하면 된다.
  8. 이제 실행될 동작에 해당하는 이름을 가진 [Key]를 하위에 추가하면 된다. 여기서는 프로그램을 실행하는 [open]이라는 [Key]를 [shell] 하위에 추가하도록 하겠다.

  9. [open]하위에 다시 [command] Key를 추가하고 [command] Key의 '(Default)' 항목을 더블클릭하자.

  10. [문자열 편집]창이 나타나면 값으로 실행할 Application을 지정하자. 여기선 경로 주위에 쌍따옴표를 붙여야 한다.

  11. 만약 프로그램 실행 시 매개변수를 넘기고 싶다면 Application Path 뒤에 한칸 뛰우고 "%1"을 추가하면(쌍따옴표 포함) URI값이 Application으로 전달되게 된다.
  12. 아래 그림과 같이 위에서 작성한 URI Scheme를 포함한 링크를 작성하여 테스트 해보자.
  13. 아래와 같이 위에서 지정한 Application이 잘 열리는 것을 확인할 수 있다.


Custom URI Scheme in iOS

iOS에서 Custom URI Scheme를 구현하는 방법은 iOS Developer Library에서 자세히 다르고 있으며 주소는 다음과 같다.
http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW50

기타 정보

  • 직접 URI Scheme를 등록하고 Application과 연동하는 방법은 일반적으로 99% 좋지 않은 방법이라고 하는 정보도 있는데 http://infomesh.net/2001/09/urischemes에서 확인할 수 있다. URI Scheme를 사용하면 반드시 무작위로 넘어오는 URI 정보를 엄격하게 처리해서 프로그램이 공격에 취약해지지 않도록 해야 한다고 한다. 그렇지 않으면 해커들이 공격대상으로 쉽게 삼을 수 있다.
  • 만약 동일한 URI Scheme를 이용하는 Application들이 있다면 어떻게 될까.. 그건 시스템마다 상황에 따라 다르지만 보통 중복된 것 중 하나의 Custom URI Scheme만 실행된다고 한다. 이를 막을 방법은 원칙적으로 없으며, 자신의 Application이 유명해져서 다른 Software들이 알아서 자신의 URI Scheme를 이를 피해가게 하는 것이 하나의 방법이라고들 이야기 한다..


'Network' 카테고리의 다른 글

[HTTP] 301과 302 Redirect의 차이  (0) 2017.01.05
IP Masquerade 란?  (0) 2014.03.19
PING 허용/차단  (0) 2011.08.22