회사에서 프로젝트를 진행하면서 모바일 웹에서 버튼을 클릭하면 앱이 실행되는 기능을 구현하게 됐다.
먼저, 요구사항은 아래와 같았다.
[요구사항]
더보기 버튼을 눌렀을 때
- 앱이 있는 경우, 앱을 열어 현재 보고 있는 페이지를 연다.
- 앱이 없는 경우, 해당 앱을 다운 받을 수 있도록 마켓 페이지로 이동한다.
해당 기능을 처음 구현해보기 때문에 구글링을 통해 정보를 먼저 얻었는데, 관련된 용어가 많아 점점 헷갈리기 시작했고,
용어에 대한 정리가 필요할 것 같아서 용어 정리 포스팅을 하게 됐다.
따라서 해당 포스팅엔 웹에서 딥링크를 구현하는 방법이나 코드는 설명하지 않는다.
(또한 나는 앱개발자가 아니기 때문에 용어 외 딥링크를 생성하는 방법 등은 자세히 알고 있지 못한다.)
1. 딥링크(Deep Link)
2. 딥링크의 종류
2-1. URI Scheme
2-2. Universal Link & App Link
3. 다이나믹 링크(Dynamic Link)
4. 내 생각(의문점)
1. 딥링크(Deep Link)
딥링크는 모바일 환경의 웹 또는 앱에서 URL을 클릭했을 때 특정 앱을 실행시키거나 특정 앱의 특정 화면으로 이동하도록 하는 기술을 말한다. 그러니까 내가 구현해야 하는 것이 딥링크 구현인 것이다!
(사실 딥링크라는 용어는 모바일에 한정된 용어는 아니다. 특정 콘텐츠에 직접 도달하는 모든 링크(웹 URL 등)를 딥링크라고 하며, 모바일 환경에서의 딥링크는 '모바일 딥링크'라고 부른다고 한다.)
아래 사진은 이해를 돕기 위해 캡처해왔다. (왼쪽부터 1번)
1번 사진에서 '쿠팡 앱으로 보기'를 클릭했을 때, 앱이 있다면 2번 사진처럼 쿠팡앱으로 이동할 것이고, 앱이 없다면 3번 사진처럼 마켓으로 이동하게 된다.
딥링크는 웹 사용자를 앱으로 유입하려는 마케팅을 위해 사용된다.
예를 들어 웹을 사용하던 사용자가 상품광고를 보고 광고를 클릭(딥링크를 클릭)했는데 상품의 상세페이지가 아닌 앱의 메인화면으로 이동한다거나, (앱이 설치돼있음에도) 마켓으로 이동하게 되면 사용자는 이탈을 하게 될 확률이 높아진다.
이처럼 사용자의 이탈을 막기 위해선 매끄러운 딥링크 구현이 필요하다.
2. 딥링크의 종류
딥링크에는 자주 쓰이는 세 가지 방식이 있다.
- URI Scheme 방식 : (공통) 앱에 URI 스킴(scheme) 값을 등록하여 딥링크 사용
- Universal Link 방식 : (iOS 전용) 도메인 주소를 이용한 딥링크 사용
- App Link 방식 : (Android 전용) 도메인 주소를 이용한 딥링크 사용
URI Scheme은 OS에 상관없이 사용할 수 있는 방식이고, Unoversal Link는 iOS 전용 방식, App Link는 안드로이드 전용 방식이라고 생각하면 된다.
조금 더 구체적으로는 URI Scheme이 초기의 딥링크 구현 방식이고, URI Schem방식의 한계를 보완하고 더 발전된 것이 iOS에서 제시한 Universal Link와 Android에서 제시한 App Link이다.
'어? 그럼 URI Scheme은 쓰지 말고 iOS는 Universal Link, Android에서는 App Link를 사용하여 구현하면 되는구나?! '라고 생각할 수 있다. 하지만 안타깝게도(?) 개발자는 위 세 가지 방식을 모두 구현해두는 것이 좋다.(아래에 설명)
일단 각각의 특징을 자세하게 살펴보자.
1) URI Scheme(커스텀 스킴)
· URI Scheme의 이해
URI Scheme은 초기의 딥링크 구현 방식으로, 가장 널리 사용되는 방식이다. URI Scheme은 우리가 잘 알고 있는 웹의 URL과 비슷하게 생겼다(?).
웹 URL인 https://naver.com을 보면 https라는 프로토콜과 naver.com이라는 도메인으로 이루어져 있다.
URI Scheme에서는 https와 같은 부분을 스킴(Scheme)이라고 부르고, 그 뒤에 오는 주소는 path라고 부른다.
즉, URI Scheme은 Scheme://path의 형태로 이루어져 있다.
스킴은 앱 개발자가 앱마다 등록할 수 있는 값인데, 예를 들어 내가 쿠팡을 개발하는 개발자라면 이 스킴 값을 coupang으로 정하여 coupang://path로 링크를 만들 수 있다. 뒤에 오는 path는 앱 내의 특정 페이지를 지정할 수 있는 주소로, 로그인 페이지에는 coupang://login의 형식으로 링크를 지정해줄 수 있다.
· URI Scheme의 한계
이 방식은 앱 개발자가 쉽게 스킴을 등록하고 설정할 수 있기 때문에 널리 쓰였으나, 두 가지 문제가 존재했다.
첫 번째, 앱의 증가로 인해 스킴 값이 겹치기 시작했다.
스킴 값은 id중복 체크처럼 스킴 중복체크를 할 수가 없다. 앱 개발자가 앱에 등록된 스킴 값이 자신들의 앱만 사용하는 고윳값인지 확인할 방법이 현재는 없다고 한다. 때문에 여러 앱에서 같은 스킴을 사용하면서 앱으로의 연결이 매끄럽게 진행되지 못하는데, 안드로이드의 경우 어떤 앱을 열지 선택하는 선택창이 나오고, iOS의 경우 제일 마지막으로 설치된 앱을 실행한다고 한다.
두 번째, 앱이 설치되어 있다면 위 상황으로 끝나지만 앱이 설치되어 있지 않다면? URI Scheme은 우리를 에러 페이지로 데려다준다.
이런 상황은 마케팅적으로 봤을 때 큰 문제가 된다. 딥링크를 사용하는 목적은 자신들의 앱의 이용자 수를 늘리기 위함인데, 자신들의 앱으로 연결하지 못한다면 의미가 없기 때문이다.
이러한 한계를 보완하기 위해 iOS에서는 Universal Link를, Android에서는 App Link를 제시했다.
2) Universal Link (iOS) & App Link (Android)
· Universal Link, App Link의 이해
Universal Link와 App Link는 URI Scheme방식을 보완하기 위해 각각 애플, 구글에서 내놓은 딥링크 방식 중 하나이다. 이 링크들은 웹 URL의 도메인처럼 각 앱마다 고유한 도메인을 설정할 수 있다. 생긴(?) 것도 URL과 비슷하다!(거의 똑같다.)
Universal Link 혹은 App Link가 호출되면 디바이스는 해당 도메인에 등록된 앱이 있는지 검사를 시작하고, 앱이 있다면 해당 앱을 실행해 앱의 특정 페이지로 이동하게 되고, 없다면 앱 마켓으로 우리를 데려다준다.
· Universal Link, App Link의 한계
URI Scheme에서 문제가 됐던 중복스킴값을 고유한 도메인으로 설정함으로써 문제를 해결했고, 앱이 설치되어있지 않을 때도 에러가 아닌 앱 마켓으로 연결해주면서 문제를 해결했다. 이렇게 모든 문제가 해결된 듯 보이지만 Universal Link와 App Link에서도 몇 가지 문제가 있다.
첫 번째, 모든 앱에서 Universal Link와 App Link를 지원하지는 않는다. 그 예로 페이스북이나 트위터는 Universal Link를 지원하지 않는다고 한다. 즉, iOS 개발자는 페이스북, 트위터 사용자들의 매끄러운 사용자 경험을 위해 URI Scheme과 Universal Link를 모두 구현해야 하는 것이다.
두 번째, Universal Link와 App Link는 각각의 OS에서 제공하는 딥링크이기 때문에 각 OS의 브라우저인 Safari(iOS), Chrome(Android)에서는 해당 딥링크 방식이 잘 동작하지만 사용자가 임의로 브라우저를 변경했을 땐 동작이 제한되어 있는 경우가 상당히 많다고 한다. 그 예로 Safari의 경우 URI Scheme은 동작하지 않는다.
그러니까, 어떤 앱을 URI Scheme만 지원하고, 어떤 앱은 Universal Link만 지원하고, 어떤 앱은 App Link만 지원하고, 또 어떤 앱은 모두 지원하지만 제한사항이 있는 경우가 있고......(OS 버전에 따라서도 지원 유무가 다르다.)
아래 이미지는 URI Scheme, Universal Link, App Link 세 가지 방식으로 딥링크를 구현했을 때 우리가 주로 사용하는 앱, 브라우저에서 어떤 동작이 발생하는지 정리해놓은 이미지이다.
(유니버설 링크 테스트 결과, 앱링크 테스트결과 보다는 iOS 딥링크 테스트결과, Android 딥링크 테스트 결과로 이해하는 것이 좋을 듯하다.)
우리가 어떻게 딥링크를 실행하느냐에 따라서 동작하는 딥링크 방식이 모두 다른 것을 확인할 수 있다.
심지어 Android 딥링크 테스트 이미지를 보면 딥링크가 아예 동작하지 않는 경우가 있다는 것도 알 수 있다.
이렇듯 모든 딥링크는 완벽하지 않으며, 우리 개발자들은 세 가지 방식의 딥링크를 모두 구현하여 사용자의 이탈을 막고 나의 앱으로 사용자가 자연스럽게 흘러들어올 수 있게 개발을 해야 한다.
3. 다이나믹 링크(Dynamic Link)
다이나믹 링크가 꼭 딥링크가 아닌 것처럼 목차를 따로 빼놨지만, 사실 다이나믹 링크도 딥링크의 한 종류이다.
다이나믹 링크는 구글의 파이어베이스에서 제공하는 서비스다.
위에서 설명한 딥링크 방식은 OS에 따라 각자 맞는 방식을 구현하고, 앱이 설치되었는지 아닌지도 판단해서 모든 경우의 수를 다 구현해 줬어야 했다.
하지만 이 다이나믹 링크는 OS에 상관없이, 또 앱이 설치 되었는지 아닌지에 상관없이 링크 하나로 모든 것을 구현할 수 있다. 그래서 다이나믹 링크는 원링크(One Link)라고도 불린다.
실제 Firebase 홈페이지에서도 아래와 같이 최상의 경험을 얻을 수 있다고 설명되어 있다.
(Firebase 다이나믹 링크 소개 : https://firebase.google.com/docs/dynamic-links)
Firebase 동적 링크는 앱이 이미 설치되어 있는지 여부와 상관없이 여러 플랫폼에서 원하는 방식으로 작동하는 링크입니다.
동적 링크를 사용하면 사용자가 링크를 여는 플랫폼에서 사용 가능한 최상의 경험을 얻을 수 있습니다. 사용자가 iOS 또는 Android에서 Dynamic Link를 열면 기본 앱의 연결된 콘텐츠로 직접 이동할 수 있습니다. 사용자가 데스크톱 브라우저에서 동일한 동적 링크를 열면 웹사이트의 동등한 콘텐츠로 이동할 수 있습니다.
또한 동적 링크는 앱 설치 간에 작동합니다. 사용자가 iOS 또는 Android에서 동적 링크를 열고 앱이 설치되어 있지 않은 경우 사용자에게 설치하라는 메시지가 표시될 수 있습니다. 그런 다음 설치 후 앱이 시작되고 링크에 액세스할 수 있습니다.
즉, 다이나믹 링크 하나만 생성하면 사용자가 iOS를 쓰던, Android를 쓰던, 앱이 설치되어있던, 설치되어있지 않던, 어떤 웹브라우저에서 들어오던, 개발자들은 그 많은 상황들을 신경 쓰지 않고 간단하게 딥링크를 구현할 수 있다는 것이다.
흠 다른 딥링크 설명에 비해 설명이 부족한 것 같긴 한데 내가 이해한 바로는 이 이상 설명이 필요 없을 정도로 간단하다.
실제로 회사에서 앱 개발자분이 다이나믹 링크를 딱 하나 전달해 주셨는데, 위 딥링크들을 열심히 알아본 게 허무할 정도로 그 다이나믹 링크 하나로 OS 상관없이, 앱 설치 여부 상관없이 사용자가 필요로 하는 화면으로 이동하는 것을 확인할 수 있었다.
4. 내 생각(의문점)
일을 하면서 처음 알게 된 '딥링크'에 관련한 용어들을 정리해봤다. 결론적으로 내가 딥링크를 생성해봤다거나 한 것은 아니지만 그래도 딥링크에 대해 꽤 흥미롭게 알아봤다. 초기 URL Scheme방식부터 최근에 나온 Dynamic Link 방식까지 쭉 알아봤는데, 한 가지 의문점이 생겼다.
'그럼 웹에서 앱을 실행하고 싶을 땐 다이나믹 링크를 사용하면 아주 간단한 거 아닌가?' 하는 생각이 든다.
그러나 '웹에서 앱 실행하기'라고 구글에 검색을 하면 다이나믹 링크보다는 URL Scheme방식과 Universal Link, App Link로 딥링크를 구현하는 방식이 훨씬 많이 노출된다.
아직 다이나믹 링크가 많이 활성화되지 않은 건지? 아니면 이렇게 회사에서 하는 프로젝트가 아니면 사용하기(접근하기) 어려운 건지? 내가 미처 알아보지 못한 크디큰 단점이 있는 건지? 하는 의문점이 남는다.
아직은 내 분야가 아니므로.. 후에 다시 기회가 된다면 딥링크에 대해 더 자세하게 알아보고 각각의 장단점이나 특징을 구체적으로 작성해야겠다.
딥링크 정리 끝!
'기타 지식' 카테고리의 다른 글
API명세서로 협업하기 (1) | 2024.04.20 |
---|---|
스프링 프레임워크 버전 업데이트 하는 방법(Eclipse, Maven환경) (0) | 2022.02.06 |
윈도우10(windows10)에 자바(java) 설치하기 (0) | 2022.01.23 |
Mysql8버전 계정 생성과 권한 부여 (0) | 2022.01.23 |
(이클립스) Workspace 여러개 만들기 (0) | 2022.01.23 |
댓글