딥링크(Deep link)란?
핸드폰에서 어떤 링크를 누르면 웹 페이지로 이동하는 경우도 있지만, 설치돼 있던 앱이 실행되면서 그 링크가 가리키는 특정 화면으로 이동하는 경우도 있다. 후자의 경우를 구현할 때 사용하는 기법이 딥링크다. iOS에선 유니버셜 링크라는 이름으로 통용된다.
먼저 간단하게 딥링크를 확인했지만 이것을 좀 더 자세하게 확인해 본다. 위키백과에선 아래와 같이 설명한다.
https://en.wikipedia.org/wiki/Deep_linking
딥링크는 일반적으로 검색 가능하거나 색인이 생성된 웹 사이트의 특정 웹 컨텐츠로 연결되는 하이퍼링크를 사용하는 것이다. 웹 사이트의 홈페이지가 아니다. URL에는 특정 항목을 가리키는 데 필요한 모든 정보가 포함돼 있다. 딥링크는 HTTP가 아닌 URI를 써서 인앱 컨텐츠에 직접 연결하는 모바일 딥링크와 다르다
WWW의 이면에 있는 HTTP는 실제로 딥링크와 다른 링크들을 구분하지 않는다. 모든 링크는 기능적으로 동일하다. 이것은 의도적이다. 웹의 설계 목적 중 하나는 작성자가 다른 사이트에 게시된 문서에 링크할 수 있도록 하는 것이다. 따라서 딥링크의 가능성은 HTTP 및 URL의 웹 기술에 내장돼 있다. 사이트에서 딥링크를 제한하려고 시도할 수 있지만 그렇게 하려면 추가 과정이 필요하다...(중략)
이 딥링크를 구현하는 방식은 총 3가지 종류가 존재한다.
- URI Scheme : 앱에 URI 스킴을 등록해서 딥링크 URL을 받으면 해당 링크로 이동
- 앱 링크 : 안드로이드에서 제공함. 도메인 주소를 사용한 딥링크
- 유니버셜 링크 : iOS에서 제공함. 앱 링크와 똑같이 도메인 주소를 사용한 딥링크
유니버셜 링크를 제외한 URI Scheme, 앱 링크에 대해 확인한다. iOS를 모르는데 어떻게 유니버셜 링크에 대해 써요
URI Scheme
URI Scheme은 최초의 딥링크 방식 중 하나로, URL에 어떻게 접근해야 하는지를 알려주는 식별자라고 볼 수 있다. 따지고 보면 http://나 https://도 URI Scheme에 속한다.
예를 들어 file://usr/share/doc이라는 경로가 있을 때, "file://"이란 글자는 이 뒷부분이 로컬에서 사용할 수 있는 파일 시스템 경로로 해석돼야 한다고 알려준다.
안드로이드의 경우 "myservice://https%3A%2F%2Ffoo.co.kr/..."과 같은 형태의 URI를 받았을 때, myservice라는 URI Scheme을 매니페스트에 등록해 놨다면 해당 앱이 실행된다. 앱이 설치돼 있지 않다면 플레이 스토어로 이동할 수 있다.
그러나 최초로 사용되던 방식인 만큼 문제가 있다. 앱의 개수가 적었던 시절에는 광고 클릭을 통해 앱으로 유입시키는 좋은 수단이었겠지만 현재는 이 URI Scheme이 중복되면서 문제가 발생한다. 만약 2가지 앱이 중복된 URI Scheme을 가졌다면 딥링크를 실행했을 때 내가 실행될 것으로 예상한 앱과 다른 앱이 실행될 수 있다. path도 동일하다면 안드로이드는 암시적 인텐트의 영향으로 앱 선택창이 표시된다.
고유성을 확인하려고 해도 모든 안드로이드 개발자들이 어떤 URI Scheme을 사용한다고 공유하진 않으니까 내가 만든 URI Scheme이 정말로 고유한 값인지 확인할 수는 없다.
또한 갤럭시의 경우 앱스토어만도 플레이 스토어, 갤럭시 스토어, 원스토어 3가지가 존재한다. 심지어 이 앱들은 모두 market://이라는 URI Scheme을 사용한다. 그래서 기본적으로 사용할 앱을 핸드폰 설정으로 걸어놓지 않으면, 앱 다운 링크를 클릭했을 경우 암시적 인텐트의 영향으로 사용자들은 앱 선택창을 보게 된다. 이 문제는 안드로이드 뿐 아니라 iOS에서도 비슷한 형태로 존재했다.
이 문제를 극복하기 위해 안드로이드, iOS 각 진영에서 각각 내놓은 방안이 바로 앱 링크와 유니버셜 링크다.
앱 링크
오늘날 우리가 사용하는 사이트의 도메인 주소는 고유하다. 티스토리만 해도 tistory.com이라는 고유 주소를 갖고 있다. 이것을 도메인 주소라고 하는데, 안드로이드의 앱 링크와 iOS의 유니버셜 링크는 도메인 주소를 딥링크 실행 값으로 사용한다.
뭔 소리냐면 인터넷 앱 주소창에 tistory.com을 치면 티스토리 홈 화면이 표시되고, naver.com을 치면 네이버 메인 화면이 표시된다. 이 도메인 주소 뒤에 특정 키값들을 이어붙여서 어떤 URL을 만들면, 이 URL은 고유할 수밖에 없기 때문에 딥링크 값으로 사용하기 매우 알맞다는 것이다.
그러나 아직 모든 앱에서 앱 링크, 유니버셜 링크를 지원하지 않기 때문에 각 링크가 완전하다고는 볼 수 없다. 이외에 디퍼드 딥링크라는 것도 있지만 이것 또한 안드로이드의 딥링크는 안드로이드에서만 작동하고 iOS의 딥링크는 iOS에서만 작동하기 때문에 두 OS를 모두 커버하려면 생성 로직을 2번 호출해야 한다. 광고도 안드로이드용, iOS용으로 분기될 것이다.
파이어베이스가 제공하는 다이나믹 링크를 쓰는 것도 좋은 방법이지만, 권장되지는 않는다.
왜냐면 2025년 8월 25일부터 파이어베이스가 제공하는 다이나믹 링크가 작동 중지되기 때문이다.
이제 모바일 개발자들은 각 플랫폼 별로 다이나믹 링크와 똑같이 작동하도록, 혹은 유사하게 작동하도록 하는 방법을 찾아야만 한다. 새로 앱을 개발한다면 다이나믹 링크는 아예 건들지도 않는 게 좋을 것 같다.
이렇게 딥링크를 알아봤다. 앱을 잘 만들었지만 사용자의 유입이 없으면 앱이 죽어버리는 만큼, 딥링크는 잘 사용한다면 앱을 광고하고 사용자들에게 알리는 데 좋은 무기가 될 수 있다.