🟣 딥링크가 하는 일
웹에서 https://shop.example.com/product/42를 누르면 상품 화면으로 간다. 딥링크는 같은 일을 앱에서 하는 링크다. 푸시·알림톡·광고를 눌렀을 때 홈이 아니라 그 화면으로 곧장 보낸다. 중간 화면을 하나 더 거치게 두면 그 사이에서 이탈이 난다.
방식은 세 갈래다. URI Scheme, Universal Link(iOS) / App Link(Android), 그리고 미설치까지 목적지를 가져가는 Deferred DeepLink.
🟣 URI Scheme
앱이 자기 스킴을 등록해 두면, 그 스킴으로 시작하는 URL을 OS가 앱으로 넘긴다.
{scheme}://{path}?id=42
scheme: 어떤 앱인지path/ query: 어떤 화면·파라미터인지
시스템 스킴도 같은 계열이다. sms://, tel://, mailto://, market://.
🚀 한계
- 미설치면 동작하지 않는다.
myapp://를 눌러도 아무 일도 안 일어난다. - 스킴에 주인이 없다. 다른 앱이 같은 스킴을 등록할 수 있다. Android는 선택 팝업이 뜨고, iOS는 어느 앱이 열릴지 보장하지 않는다.
이 한계를 메운 것이 App Link / Universal Link다.
🟣 Universal Link / App Link
형태는 항상 HTTPS 웹 URL이다.
https://shop.example.com/product/42
도메인은 유일하다. 그 도메인을 이 앱이 소유했다는 증명이 있어야 가로채기가 허용된다.
🚀 소유자 인증
도메인에 앱 식별 파일을 올리고, OS가 확인한다.
- Android:
https://shop.example.com/.well-known/assetlinks.json - iOS:
https://shop.example.com/.well-known/apple-app-site-association(AASA)
iOS는 앱 설치 시점에 AASA를 받아 캐시한다. 앱 쪽에서는 Associated Domains에 applinks:shop.example.com을 등록한다.
🚀 실행 동작
- 설치됨: 앱 화면으로 연다
- 미설치: 같은 URL의 웹이 열린다. 웹이 없으면 스토어로 유도하면 된다
문자·소셜에 뿌리는 링크가 HTTPS여야 하는 이유가 여기 있다. 프리뷰가 깨지지 않고, 미설치 사용자도 빈 화면 대신 웹을 본다.
🚀 남는 구멍
- 브라우저 주소창에 직접 붙여 넣으면 가로채기가 안 되는 경우가 많다
- 카카오톡·인스타그램처럼 인앱 브라우저를 쓰는 앱에서는 앱으로 열리기도, 웹으로 열리기도 한다
- URI Scheme·Universal Link 모두, 미설치 상태에서 누른 목적지를 설치 이후까지 가져가지 못한다
그 공백이 Deferred DeepLink다.
🟣 Deferred DeepLink
미설치로 링크를 눌렀을 때 목적지를 미뤄 두었다가, 설치 후 첫 실행에 복원한다.
추천 링크·캠페인 링크가 대표 사례다. 앱이 없어도 스토어로 보내고, 설치 직후 홈이 아니라 원래 콘텐츠(또는 추천 코드)로 이어 준다.
🚀 매칭은 확률적이다
웹에서 클릭한 사람과 앱을 처음 연 사람이 같은지, SDK는 IP·기기 정보·광고 ID(ADID/IDFA)·쿠키 같은 신호를 조합해 추정한다. 확정 ID가 아니라 추정이라 확률적이다.
같은 IP에서 비슷한 기기가 거의 동시에 같은 링크를 누르면 한 사람으로 오인할 수 있다. ATT 이후 기기 지문 추정은 더 약해졌다. Deferred는 100% 라우팅이 아니라 확률적 attribution이라는 전제로 설계해야 한다. 값이 없을 때 온보딩·홈이 막히지 않게 fallback을 둔다.
매칭을 직접 구현하기는 부담이 커서 보통 SDK에 맡긴다.
- AppsFlyer
- Branch
- Adjust
- Firebase Dynamic Links (2025년 8월 종료. 신규 선택지가 아니다)
🟣 앱 안의 라우팅
방식이 달라도 OS가 앱에 넘기는 것은 결국 URL 하나다. URI Scheme은 SceneDelegate의 URL 콜백으로, Universal Link는 NSUserActivity로 들어온다. 그 URL을 화면으로 바꾸는 일을 라우터 한곳에 모은다.
바깥에서 온 값이므로 경로·파라미터가 깨질 수 있다. 실패하면 크래시가 아니라 안전한 기본 화면으로 보낸다. 상세만 덜렁 열면 뒤로 가기가 비는 경우가 있으니, 필요하면 홈부터 상세까지의 스택을 같이 복원한다.
🟣 정리
- 딥링크는 앱 바깥 링크를 앱 안 특정 화면으로 곧장 보낸다
- URI Scheme은 단순하지만 미설치·스킴 충돌에 약하다
- Universal Link / App Link는 HTTPS + 도메인 소유 검증. 미설치면 웹으로 이어진다
- Deferred는 설치 후 첫 실행에 목적지를 복원하지만, 사용자 매칭은 확률적이다
- URL → 화면 변환은 라우터 한곳에 모으고, 파싱 실패와 뒤로 가기 스택을 같이 설계한다
다음 장은 앱이 기기에 남겨야 할 데이터를 어디에 둘지다.