App Link: 개념, 작동 원리 및 설정

저자: IT Sectr 게시일: 2026-05-14 읽는 시간: 9 분

App Link는 Android(Android 6.0+) 메커니즘으로, 설치된 앱에서 웹 링크를 자동으로 열어 선택 대화상자를 건너뜁니다. 이 용어는 Google이 2015년 Android 6.0 Marshmallow와 함께 도입했습니다. Android Developers에 따르면, App Link는 Digital Asset Links를 사용합니다. 이는 서버의 파일을 통한 암호화 검증으로, 도메인이 앱 개발자 소유임을 확인합니다.

핵심 사항

  • App Link — 선택 대화상자 없이 자동으로 앱을 여는 https 링크
  • Digital Asset Links — 서버의 JSON 파일 assetlinks.json이 도메인과 앱의 연결을 검증
  • 인증서의 SHA256 지문 — 개발자와 도메인을 연결하는 핵심 검증 요소
  • Intent Filter — 앱이 처리할 링크를 선언하는 Android 구성 요소
  • 보안 — App Link가 “앱 또는 브라우저에서 열기” 대화상자를 제거하여 전환율 향상

App Link(Android App Link)는 표준 HTTPS 링크로, Android 기기에서 클릭하면 브라우저와 앱 간의 표준 선택 대화상자를 표시하지 않고 설치된 앱을 자동으로 엽니다. Google은 Android 6.0(API 23)에서 추가 클릭과 사용자 혼란으로 인해 deep link 전환율을 낮추던 “선택기 대화상자” 문제의 해결책으로 App Link를 도입했습니다.

핵심 혁신: 검증. Android는 Digital Asset Links API를 통해 도메인이 실제로 앱 개발자 소유인지 확인합니다. Google Play Store는 게시 시 App Link를 확인하고 검증에 실패하면 업데이트를 거부할 수 있습니다. 이로 인해 App Link는 Custom URL Scheme보다 더 안전합니다. 다른 앱이 사용자의 도메인에 대한 링크를 가로챌 수 없습니다.

Digital Asset Links는 Google이 App Link뿐만 아니라 검색 결과, Google Assistant 및 Smart Lock for Passwords에서 웹사이트와 앱을 연결하는 데도 사용하는 개방형 프로토콜입니다. 이 프로토콜은 암호화 검증을 기반으로 합니다. assetlinks.json에는 앱의 서명 인증서 SHA256 지문이 지정되어 위조를 방지합니다.

App Link의 작동 프로세스는 세 단계로 구성됩니다: Digital Asset Links 검증, Intent Filter를 통한 처리, 자동 리디렉션. 각 단계는 필수입니다. 검증에 실패하면 Android는 선택 대화상자를 표시합니다. 이러한 deep link는 정상적으로 작동하지만 자동 전환의 이점은 없습니다.

Digital Asset Links(assetlinks.json)

Asset Links는 https://domain/.well-known/assetlinks.json에 서버에 배치되는 JSON 파일입니다. 파일에는 필드가 있는 객체 배열이 포함됩니다: relation(관계 유형을 설명하는 문자열 배열), target(namespace와 앱의 package_name, 그리고 sha256_cert_fingerprints(서명 인증서의 SHA256 지문 배열)가 있는 객체).

json
// assetlinks.json — App Link 최소 구성
[{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
        "namespace": "android_app",
        "package_name": "com.example.app",
        "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
        ]
    }
}]

SHA256 지문은 앱 서명에 사용된 인증서에서 얻습니다. 디버그 빌드에는 표준 Android 디버그 인증서가 사용되고, 릴리스 빌드에는 Google Play Console의 인증서 또는 자체 인증서가 사용됩니다. 중요: 서명 인증서를 변경할 때(예: App Signing by Google Play로 전환할 때) 서버의 assetlinks.json을 업데이트해야 합니다. 그렇지 않으면 App Link가 작동을 중단합니다.

Intent Filter 및 검증

Android는 처음 링크를 클릭할 때 App Link를 검증합니다. 시스템은 서버에서 assetlinks.json을 다운로드하고, package_name 및 SHA256 지문을 설치된 앱의 인증서와 비교합니다. 데이터가 일치하면 Android는 Intent Filter를 검증된 것으로 표시하고, 이 도메인에 대한 모든 후속 링크는 대화상자 없이 자동으로 열립니다.

xml
// AndroidManifest.xml — App Link용 Intent Filter
<activity
    android:name=".ui.ProductActivity"
    android:exported="true">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="example.com"
            android:pathPrefix="/product" />
    </intent-filter>
</activity>

autoVerify="true"는 Android에 assetlinks.json을 확인하도록 지시하는 필수 속성입니다. 이 속성이 없으면 Intent Filter가 검증되지 않고 App Link가 활성화되지 않습니다. Android는 하나의 Activity에서 여러 Intent Filter(다른 호스트용)를 지원합니다. 시스템은 각 호스트를 개별적으로 확인합니다. 검증은 비동기적으로 수행되며 첫 번째 클릭 시 최대 20초까지 걸릴 수 있습니다.

자동 리디렉션

검증이 성공하면 Android는 검증된 Intent Filter와 일치하는 링크를 클릭할 때 자동으로 앱을 엽니다. 사용자는 선택 대화상자를 보지 않으며 앱이 즉시 열립니다. 앱이 설치되어 있지 않으면 링크가 브라우저에서 열립니다(일반 웹 페이지처럼). 이것이 이상적인 사용자 경험입니다: 불필요한 작업 없는 원활한 전환.

중요: 자동 리디렉션은 https 체계에서만 작동합니다. App Link는 http(비보안 프로토콜)를 지원하지 않습니다. 사용자가 수동으로 http 링크를 열면(예: SMS에서), Android는 검증을 수행하지 않고 선택 대화상자를 표시합니다. 앱으로 연결되는 모든 링크에는 https를 사용하고 서버에서 HTTP에서 HTTPS로 리디렉션을 구성하는 것이 좋습니다.

App Link는 Android에서 Deep Link의 진화형이지 대체품이 아닙니다. 둘 사이의 차이는 근본적입니다. 일반 Deep Link(Custom URL Scheme)는 사용자 정의 체계(myapp://)를 사용하고 autoVerify 없이 Intent Filter를 통해 작동합니다. Android는 앱이 실제로 이 체계와 연결되어 있는지 확인하지 않습니다. 모든 앱이 myapp://을 등록하고 링크를 가로챌 수 있습니다.

App Link는 Deep Link의 세 가지 문제를 해결합니다. 첫째: 보안 — Digital Asset Links를 통한 검증이 링크 가로채기를 방지합니다. 둘째: 사용자 경험 — 선택 대화상자가 없어 대상 작업으로의 전환율이 20~40% 향상됩니다. 셋째: 인덱싱 — Google이 https App Link URL을 인덱싱하고 검색 결과에 앱 내 콘텐츠 링크로 표시할 수 있습니다.

호환성: App Link는 Android 6.0+(기기의 99%)에서 작동합니다. Android 5.x(Lollipop)의 경우 선택 대화상자가 있는 일반 Deep Link가 사용됩니다. 따라서 두 메커니즘을 모두 지원하는 것이 좋습니다: 최신 기기용 App Link와 이전 버전용 폴백으로 Custom URL Scheme. autoVerify="true"가 있는 Intent Filter는 하위 호환성을 깨뜨리지 않으며 Android < 6에서는 속성이 무시됩니다.

특성Deep LinkApp Link
체계사용자 정의(myapp://)HTTPS(https://domain)
검증없음assetlinks.json
선택 대화상자표시됨자동 리디렉션
Android 버전API 1+API 23+(6.0+)
Google 인덱싱아니요예(https URL)

App Link 설정에는 세 단계가 필요합니다: 매니페스트에서 Intent Filter 구성, 서버에 assetlinks.json 배치, 검증 확인. 첫 번째 단계는 AndroidManifest.xml에 android:autoVerify="true"가 있는 Intent Filter를 추가하는 것입니다. https 체계, 호스트 및 앱이 처리해야 하는 경로를 지정하는 것이 중요합니다. 경로에는 하위 폴더에 대한 와일드카드(*)가 포함될 수 있습니다.

두 번째 단계는 assetlinks.json 생성입니다. 파일은 Android Studio(Tools → App Links Assistant)를 통해 생성할 수 있습니다. 어시스턴트는 디버깅 및 테스트에도 도움이 됩니다. 파일은 서버의 /.well-known/assetlinks.json에 배치됩니다. 서버는 Content-Type: application/json을 반환하고 리디렉션 없이 HTTPS를 통해 접근 가능해야 합니다. Google Play Console도 Publishing 섹션에서 App Link 검증 상태를 표시합니다.

  1. 추가 AndroidManifest.xml에 android:autoVerify="true"가 있는 Intent Filter
  2. 획득 인증서의 SHA256 지문(keytool 또는 App Links Assistant)
  3. 생성 package_name 및 sha256_cert_fingerprints가 포함된 assetlinks.json
  4. 배치 HTTPS 서버의 /.well-known/assetlinks.json에 파일 배치
  5. 확인 adb를 통한 검증: adb shell dumpsync domain_verification

테스트 — 세 번째 단계. 확인에 adb를 사용합니다: 명령어 adb shell am start -W -a android.intent.action.VIEW -d “https://example.com/product/42”가 앱을 엽니다. 앱 대신 브라우저가 열리면 assetlinks.json과 autoVerify를 확인하세요. Android Studio App Links Assistant에는 내장 테스터가 포함되어 있어 각 도메인과 경로의 검증 상태를 표시합니다. 자동화된 테스트에는 Intent Matcher와 함께 Android Testing Library를 사용하세요.

구현 특징

Android 12(API 31)는 App Link 처리에 변경 사항을 도입했습니다. 새로운 도메인별 검증이 추가되었습니다: 시스템은 Intent Filter 전체가 아닌 각 링크를 개별적으로 확인합니다. 이는 보안을 향상시키지만 새 경로를 추가할 때 assetlinks.json 파일 업데이트가 필요합니다. Android 12는 ADB에 포함된 Android App Links Assistant도 도입했습니다 — 셸을 통해 검증을 관리하는 명령어입니다.

여러 도메인은 프로덕션에서 일반적인 시나리오입니다. 앱은 example.com, m.example.com 및 example.org의 링크를 처리할 수 있습니다. 각 도메인에는 해당 서버에 별도의 assetlinks.json이 필요합니다. 매니페스트에는 여러 Intent Filter(도메인당 하나)가 추가됩니다. 모든 도메인은 HTTPS를 통해 접근 가능해야 하며 독립적으로 검증을 통과해야 합니다.

App Link 및 Jetpack Navigation은 최신 Android 앱에서 App Link를 처리하는 권장 방법입니다. Jetpack Navigation은 nav_graph.xml 또는 NavDeepLinkRequest를 통한 선언적 deep link를 지원합니다. 이는 탐색을 단순화합니다: 개발자가 특정 URL에 대해 열리는 화면을 설명하면 Navigation 구성 요소가 Intent를 처리하고 탐색 스택을 자체적으로 복원합니다. Google은 App Link에 Jetpack Navigation 사용을 권장합니다.

kotlin
// Jetpack Navigation을 통한 App Link 처리
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        handleDeepLink(intent)
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleDeepLink(intent)
    }

    private fun handleDeepLink(intent: Intent) {
        intent.data?.let { uri ->
            navController.handleDeepLink(NavDeepLinkRequest
                .Builder
                .fromUri(uri)
                .build()
            )
        }
    }
}

Google Play Store는 게시 시 App Link를 확인합니다. 매니페스트에 autoVerify가 있는 Intent Filter가 포함되어 있지만 assetlinks.json을 사용할 수 없거나 올바르지 않은 경우, Google Play는 경고와 함께 업데이트를 거부할 수 있습니다. 개발자 콘솔(Policy and Programs → App Links)에는 각 도메인의 검증 상태가 표시됩니다. 게시 전에 항상 상태를 확인하세요. 업데이트 거부 후 수정하면 릴리스가 지연됩니다.

자주 묻는 질문

Android에서 App Link와 Deep Link의 차이점은 무엇인가요?

App Link는 Digital Asset Links를 통한 검증이 있는 Deep Link입니다. 주요 차이점: App Link는 사용자 정의 체계 대신 https 체계를 사용하고, 선택 대화상자를 표시하지 않으며, Google에서 인덱싱됩니다. 일반 Deep Link는 모든 Android 버전에서 작동하지만 수동으로 앱을 선택해야 합니다.

assetlinks.json은 어디에 배치해야 하나요?

파일은 HTTPS 서버의 루트에 있는 /.well-known/assetlinks.json에 배치됩니다. 서버는 Content-Type: application/json을 반환해야 합니다. 서명 인증서를 변경하거나 새 도메인을 추가할 때 파일을 업데이트해야 합니다.

App Link가 자동으로 앱을 열지 않는 이유는 무엇인가요?

주요 원인: Intent Filter에 android:autoVerify="true" 누락, assetlinks.json을 HTTPS를 통해 사용할 수 없음, 잘못된 SHA256 지문, 다른 서명 인증서(디버그 vs 릴리스). adb shell dumpsync domain_verification을 통해 검증 상태를 확인하세요.

자체 도메인 없이 App Link를 사용할 수 있나요?

아니요 — App Link에는 접근 가능한 assetlinks.json이 있는 HTTPS 서버가 필요합니다. 도메인이 없는 경우 Firebase Hosting 또는 GitHub Pages를 사용하여 파일을 호스팅하세요. 대안: Custom URL Scheme(검증 없음) 또는 Firebase Dynamic Links.

App Link가 Android 5에서 작동하나요?

아니요 — App Link는 Android 6.0(API 23) 이상에서 지원됩니다. Android 5에서는 android:autoVerify="true"가 있는 Intent Filter가 속성을 무시하고 선택 대화상자가 있는 일반 Deep Link로 작동합니다. 하위 호환성을 위해 두 메커니즘을 모두 지원하는 것이 좋습니다.

요약

  • App Link — Android용 Deep Link의 진화: 앱으로 자동 전환되는 https 링크
  • Digital Asset Links — 서버의 assetlinks.json을 통한 암호화 검증
  • 서명 인증서의 SHA256 지문 — 개발자와 도메인을 연결하는 핵심 요소
  • android:autoVerify="true" — App Link 활성화를 위한 필수 Intent Filter 속성
  • 보안 — App Link가 타사 앱의 링크 가로채기를 방지
  • Google Play Store 게시 시 App Link 검증을 확인하고 오류 시 거부
  • Jetpack Navigation — 선언적 deep link로 App Link를 처리하는 권장 방법

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기