ATT iOS: 개념, 추적 요청 메커니즘 및 IDFA

저자: IT Sectr 게시일: 2026-05-20 읽는 시간: 10 분

App Tracking Transparency(ATT)는 iOS 메커니즘으로, 앱과 웹사이트에서 추적하기 전에 사용자의 명시적 동의를 요구하여 광고 식별자 IDFA에 접근하도록 합니다. iOS 14.5에서 도입된 ATT는 모든 개발자가 추적 권한을 요청하는 시스템 대화상자를 표시하도록 의무화했습니다. Apple Developer Documentation에 따르면, 타겟 광고나 속성 측정을 위해 IDFA를 사용하는 모든 앱은 ATT 프레임워크를 통합하고 접근 권한을 얻어야 합니다.

핵심 요약

  • ATT — iOS 14.5+의 추적 요청 프레임워크인 App Tracking Transparency
  • IDFA — 동의 없이 접근이 제한되는 기기 광고 식별자
  • 시스템 대화상자 — 변경할 수 없는 앱 설명이 포함된 표준 팝업
  • 추적 권한 — 광고 표시 및 설치 속성 측정을 위한 필수 요청
  • 거부 — 사용자는 설정에서 언제든지 권한을 철회할 수 있음

ATT(App Tracking Transparency)란?

App Tracking Transparency는 iOS 14.5에서 도입된 Apple의 사용자 개인정보 보호 프레임워크입니다. 앱이 추적을 위해 기기 광고 식별자(IDFA)에 접근하기 전에 명시적 허가를 받도록 요구합니다.

ATT 등장 전에는 개발자가 요청 없이 IDFA를 읽을 수 있었고, 이를 통해 광고 네트워크가 사용자 프로필을 구축하고 앱과 웹사이트 간의 활동을 추적할 수 있었습니다. Apple은 이러한 방식을 개인정보 침해로 규정하고 필수 동의 대화상자를 도입했습니다.

이 프레임워크는 iOS 14.0부터 사용 가능했지만, IDFA를 사용하는 모든 앱에 필수가 된 것은 2021년 4월 iOS 14.5 출시 이후입니다. Flurry Analytics 데이터에 따르면, ATT 도입 후 미국 사용자의 25% 미만만이 추적에 동의하여 모바일 광고 시장이 근본적으로 변화했습니다.

ATT는 앱이 수정하거나 우회할 수 없는 특별한 시스템 대화상자를 통해 권한 확인을 수행합니다. 사용자는 개발자가 제공한 텍스트가 포함된 표준 팝업을 보고 “허용” 또는 “앱이 추적하지 않도록 요청”을 선택합니다.

ATT와 iOS 개인정보 보호의 연관성

Apple은 ATT를 App Store의 Privacy Nutrition Label 및 Privacy Manifest를 포함하는 전체 개인정보 보호 전략의 일부로 포지셔닝합니다. 세 가지 메커니즘이 함께 작동합니다: 레이블은 앱이 수집하는 데이터를 표시하고, Manifest는 API 사용 이유를 선언하며, ATT는 사용자에게 추적에 대한 통제권을 제공합니다.

추적을 거부해도 앱 자체의 작동은 차단되지 않습니다. 사용자는 모든 기능을 계속 사용할 수 있지만, 광고 네트워크는 개인화 및 속성 측정을 위한 IDFA를 받지 못합니다. Apple의 SKAdNetwork 및 Probabilistic Attribution이 IDFA의 대안이 되었습니다.

Branch Metrics에 따르면, ATT 도입 후 IDFA를 획득하는 앱의 비율이 전 세계적으로 70%에서 20%로 감소했습니다. 이로 인해 설치 속성 측정 및 광고 수익화 접근 방식이 재검토되었습니다.

iOS 15 및 16의 변경 사항

iOS 15에서 Apple은 ATT 요구 사항을 강화하지 않았지만, App Privacy Report를 추가하여 사용자에게 앱이 센서와 데이터에 접근하는 빈도를 보여줍니다. iOS 16에서는 설정 → 개인정보 보호 → 추적을 통해 언제든지 추적 설정을 변경할 수 있는 권한이 확장되었습니다.

중요: 사용자가 ATT 대화상자에서 “앱이 추적하지 않도록 요청”을 선택하면 앱은 IDFA 값을 받지 못하고 대신 00000000-0000-0000-0000-000000000000의 0 문자열을 반환합니다. 다른 방식이나 우회 방법으로 IDFA를 읽으려는 시도는 App Store에서 앱이 거부되는 결과를 초래합니다.

iOS 17부터 Apple은 검사를 강화했습니다. 앱이 ATT 시스템 대화상자를 표시하지 않고 IDFA를 요청하면 빈 식별자 대신 OS 수준에서 거부됩니다. 이는 사용자 모르게 IDFA를 백그라운드에서 수집하는 가능성을 배제합니다.

iOS에서 추적 요청이 작동하는 방식

ATT 요청 프로세스는 세 단계로 구성됩니다: 상태 확인, 시스템 대화상자 표시, 응답 처리. 개발자는 어떤 단계도 건너뛸 수 없으며, OS가 각 단계를 제어합니다.

권한 상태 확인

대화상자를 호출하기 전에 앱은 ATTrackingManager를 통해 현재 상태를 확인해야 합니다. 가능한 상태: notDetermined(아직 요청되지 않음), restricted(기기 정책에 의해 금지됨), denied(사용자가 거부함), authorized(허용됨).

상태가 이미 결정된 경우(authorized 또는 denied), 대화상자를 다시 호출할 수 없습니다. 사용자가 영구적으로 선택한 것입니다. 결정을 변경하는 유일한 방법은 iOS 시스템 설정을 통하는 것입니다.

상태 확인에는 ATTrackingManager.trackingAuthorizationStatus 속성이 사용됩니다. 시스템 대화상자는 UI 구성 요소이므로 호출은 메인 스레드에서 이루어져야 합니다.

swift
import AppTrackingTransparency
import AdSupport

func checkTrackingStatus() {
    let status = ATTrackingManager.trackingAuthorizationStatus
    switch status {
    case .notDetermined:
        requestTrackingPermission()
    case .authorized:
        readIDFA()
    case .denied, .restricted:
        useAlternativeTracking()
    @unknown default:
        break
    }
}

시스템 대화상자 표시

대화상자를 표시하려면 사용자 선택 결과를 받는 클로저와 함께 requestTrackingAuthorization 메서드를 호출합니다. 중요: 대화상자는 한 번만 표시됩니다. 개발자가 다시 호출하려고 하면 시스템이 요청을 무시합니다.

대화상자 텍스트는 두 부분으로 구성됩니다: 시스템 제목(변경 불가)과 개발자가 Info.plist의 NSUserTrackingUsageDescription 키를 통해 지정하는 사용자 정의 메시지입니다.

대화상자는 자연스러운 맥락에서 나타나야 합니다. 앱 실행 직후가 아니라 추적 관련 기능을 처음 사용하려고 할 때 표시됩니다. Apple은 사용자가 기능의 가치를 이해한 후에 대화상자를 표시할 것을 권장합니다.

swift
func requestTrackingPermission() {
    ATTrackingManager.requestTrackingAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                let idfa = ASIdentifierManager.shared().advertisingIdentifier
                print("IDFA: \(idfa)")
            case .denied:
                print("사용자가 추적을 거부했습니다")
            default:
                break
            }
        }
    }
}

IDFA 및 접근 제한

IDFA(Identifier for Advertisers)는 타겟 광고 및 설치 속성 측정에 사용되는 iOS 기기의 고유 광고 식별자입니다. ATT 이전에는 개발자가 ASIdentifierManager를 통해 제한 없이 이를 획득할 수 있었습니다. ATT 도입 후 사용자가 명시적 동의를 하지 않으면 IDFA 접근이 차단됩니다.

IDFA란 무엇이며 왜 필요한가

IDFA는 각 iOS 기기에 고유한 UUID 문자열입니다. 광고 네트워크는 IDFA를 사용하여 앱 설치 추적(속성 측정), 사용자 관심사 기반 관련 광고 표시, 광고 캠페인 효율성 측정 및 리타겟팅(목표 작업을 완료하지 않은 사용자 재유입)을 수행합니다.

사용자가 추적을 거부하면 ASIdentifierManager는 00000000-0000-0000-0000-000000000000 값을 반환합니다. 이 경우 앱은 기술적 목적(예: 안티프로드)으로 여전히 IDFA를 읽을 수 있지만 광고 네트워크에 전송할 수 없습니다.

Singular(2024) 데이터에 따르면, 전 세계 ATT 동의율은 25-35%이며, 유럽(GDPR)에서는 40-50%로 미국(15-25%)보다 높습니다. 이로 인해 광고 플랫폼은 대체 속성 측정 방법을 개발해야 했습니다.

IDFA의 대안: SKAdNetwork 및 Probabilistic Attribution

SKAdNetwork는 IDFA를 공개하지 않고 설치 속성 측정을 위한 Apple의 프레임워크입니다. OS 수준에서 작동합니다: 광고 네트워크는 서명된 포스트백을 보내고 Apple이 이를 확인하여 개발자에게 전달합니다. 속성 측정은 개별 사용자 식별 없이 캠페인 수준에서만 이루어집니다.

Probabilistic Attribution은 기기 모델, iOS 버전, 시간대, 화면 밝기 등 다양한 기기 신호를 사용하여 설치와 광고 노출을 확률적으로 매칭합니다. 그러나 Apple은 자체 정책에서 이 방법을 금지하며, 사용 시 앱 거부로 이어질 수 있습니다.

Google, Adjust 및 AppsFlyer는 SKAdNetwork를 자체 집계 데이터와 결합한 하이브리드 솔루션을 개발했습니다. 예를 들어, Google Ads Conversion Tracking은 SKAdNetwork 포스트백과 자체 머신러닝 모델을 사용하여 IDFA 없이 속성 측정을 수행합니다.

앱 코드에서 ATT 구현

ATT를 통합하려면 Info.plist에 NSUserTrackingUsageDescription 키를 추가하고 AppTrackingTransparency 프레임워크를 임포트해야 합니다. 아래는 Swift 및 Objective-C를 위한 단계입니다.

Info.plist 설정

첫 번째 단계는 Info.plist에 NSUserTrackingUsageDescription 키를 추가하고 앱이 추적이 필요한 이유를 설명하는 텍스트를 입력하는 것입니다. 이 텍스트는 시스템 대화상자에 표시됩니다. 예: “사용자의 IDFA는 개인화된 광고 표시 및 캠페인 효율성 추적에 사용됩니다.”

이 키가 없으면 requestTrackingAuthorization 호출 시 앱이 크래시됩니다. Apple은 대화상자 표시 전에 NSUserTrackingUsageDescription의 존재를 명시적으로 확인합니다. 텍스트는 간결하고 구체적이어야 하며 실제 데이터 사용과 일치해야 합니다.

중요: 이 키는 Xcode Info 탭을 통해 수동으로 추가하거나 Info.plist의 XML 소스를 편집하여 추가합니다. 추가 후 프로젝트를 다시 빌드하고 키가 최종 바이너리에 표시되는지 확인하세요.

xml
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>

Swift에서 완전한 통합

실제 프로젝트에서는 광고 모듈 또는 트래커를 처음 실행하기 전에 ATT 요청을 호출하는 것이 좋습니다. 사전 권한 화면(pre-permission prompt)에서 사용자에게 동의의 가치를 미리 설명하는 것이 좋습니다. 이는 동의율을 20-30% 높입니다.

Pre-permission 프롬프트는 추적 활성화의 이점을 보여주는 자체 UI입니다(“관련 광고를 표시할 수 있도록 도와주세요”). “계속” 버튼을 누른 후에만 시스템 ATT 대화상자가 호출됩니다. Adjust(2024)는 pre-permission 화면 사용 시 동의율이 40% 증가했다고 보고했습니다.

swift
final class TrackingManager {
    static let shared = TrackingManager()

    func requestTrackingIfNeeded() {
        guard ATTrackingManager.trackingAuthorizationStatus
            == .notDetermined
        else { return }

        ATTrackingManager.requestTrackingAuthorization { _ in
            NotificationCenter.default.post(
                Notification(Name("trackingStatusChanged"))
            )
        }
    }
}

ATT 작업 시 발생하는 오류

개발자들은 ATT 통합 시 동의 전환율을 낮추거나 App Store 검토에서 앱이 거부되는 일반적인 실수를 자주 범합니다. 가장 흔한 다섯 가지 문제를 살펴보겠습니다.

앱 실행 직후 ATT 요청

가장 흔한 실수는 앱 로드 후 첫 화면에서 ATT 시스템 대화상자를 표시하는 것입니다. 사용자는 아직 앱의 가치를 이해하지 못했으며 높은 확률로 “거부”를 누릅니다. IronSource(2023)는 첫 화면에서 요청할 때 세 번째 세션 후 요청에 비해 동의율이 32% 감소했다고 보고했습니다.

권장 사항: 사용자가 목표 작업을 수행한 후(콘텐츠 시청, 온보딩 시작) 또는 3-5회의 앱 사용 세션 후에 추적을 요청하세요. 이는 신뢰와 가치 인식을 높입니다.

Pre-permission 화면 부재

사전 설명 없이 ATT 시스템 대화상자를 표시하는 것은 동의율을 15-20%로 낮추는 실수입니다. 사용자는 예상치 못한 요청을 보고 본능적으로 거부합니다. 이점을 설명하는 Pre-permission 화면은 동의율을 35-45%로 높입니다.

Pre-permission 텍스트는 구체적이어야 합니다: “관련 광고를 표시하도록 허용해 주세요. 이는 앱을 무료로 유지하는 데 도움이 됩니다.” 일반적인 문구는 신뢰를 떨어뜨리므로 피하세요. GameAnalytics는 2023년에 이점을 설명하는 pre-permission이 빈 화면보다 28% 더 많은 동의를 얻었다고 보고했습니다.

restricted 및 denied 상태 무시

사용자가 이미 추적을 거부했거나 상태가 restricted(자녀 보호, 기업 정책)인 경우 앱은 ATT 대화상자를 다시 호출해서는 안 됩니다. 다시 호출해도 작동하지 않으며 개인정보 침해로 인식됩니다. 대신 SKAdNetwork 및 컨텍스트 광고로 전환하세요.

restricted 상태에서 앱은 설정에서 “추적 요청 허용” 옵션이 활성화되어 있는지 확인할 수 없습니다. 이 경우 항상 SKAdNetwork를 통한 대체 속성 측정을 사용하고 pre-permission 화면을 표시하지 마세요.

ATT 호출 없이 IDFA 확인

사전 ATT 권한 없이 ASIdentifierManager.shared().advertisingIdentifier를 통해 IDFA를 읽으면 0 문자열이 반환됩니다. 일부 개발자는 비공개 API를 통해 IDFA에 접근하는 이전 방법을 사용하려고 시도합니다. 이는 검토 시 앱이 거부될 것이 확실합니다.

Apple은 정적 코드 분석기와 머신러닝을 사용하여 우회 방법을 탐지합니다. 앱이 검토를 통과하더라도 이후 업데이트나 자동 검사에서 위반 사항이 발견되어 개발자 계정이 차단될 수 있습니다.

잘못된 NSUserTrackingUsageDescription 텍스트

NSUserTrackingUsageDescription 키의 텍스트가 너무 길거나, 모호하거나, 오해의 소지가 있는 경우 앱이 검토에서 거부됩니다. Apple은 설명이 실제 데이터 사용과 일치하는지 확인합니다. 앱에 광고가 없는데 “광고 목적”이라고 명시하면 검토자가 빌드를 거부합니다.

권장 형식: 2-3문장으로 IDFA 사용 목적을 구체적으로 설명합니다. 광고가 없는 앱의 예: “식별자는 분석 및 사기 방지에 사용됩니다. 데이터는 제3자에게 전송되지 않으며 프로파일링에 사용되지 않습니다.”

자주 묻는 질문

앱에 ATT를 추가하지 않으면 어떻게 되나요?

앱이 ATT 없이 IDFA 또는 추적을 사용하는 경우 Apple은 검토 프로세스에서 거부합니다. 추적이 없더라도 투명성을 위해 ATT를 추가하는 것이 좋습니다. 그렇지 않으면 다음 업데이트에서 거부될 위험이 높아집니다.

추적 동의 없이 앱이 작동하나요?

네, 앱은 완전히 작동하지만 광고 네트워크는 개인화 및 속성 측정을 위한 IDFA를 받지 못합니다. 개인화된 광고를 제외한 모든 앱 기능은 계속 사용할 수 있습니다.

iOS에서 ATT 상태를 초기화할 수 있나요?

네, 사용자는 설정 → 개인정보 보호 → 추적으로 이동하여 언제든지 결정을 변경할 수 있습니다. 앱은 프로그래밍 방식으로 상태를 초기화할 수 없으며, 시스템 설정을 통해서만 가능합니다.

ATT 동의율을 높이려면 어떻게 해야 하나요?

이점을 설명하는 pre-permission 화면을 사용하고, 첫 실행 시가 아니라 목표 작업 수행 후에 추적을 요청하세요. Meta(2024)는 지연된 요청 시 동의율이 35% 증가했다고 보고했습니다.

ATT가 어린이용 앱에도 영향을 미치나요?

“어린이용” 카테고리의 앱은 Apple 정책에 따라 IDFA 및 ATT를 추적에 사용할 수 없습니다. 또한 분석이나 광고를 위해 제3자에게 데이터를 전송하는 것도 금지됩니다.

요약

  • ATT — iOS 14.5+에서 IDFA 접근 요청을 위한 필수 프레임워크인 App Tracking Transparency
  • IDFA — 무단 접근으로부터 ATT가 보호하는 기기 광고 식별자
  • 시스템 대화상자 — 사용자는 항상 앱이 변경하거나 우회할 수 없는 대화상자를 봄
  • Pre-permission — 동의율을 20-40% 높이는 자체 이점 설명 화면
  • SKAdNetwork — IDFA에 접근할 수 없는 앱을 위한 Apple의 대체 속성 측정
  • 전환율 — 전 세계 동의율은 25-35%, 유럽은 GDPR 덕분에 최대 50%
  • 트래커를 호출하기 전에 ATT를 통합하고 Info.plist에 NSUserTrackingUsageDescription 키를 반드시 추가하세요

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

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

프로젝트 논의

더 읽어보기