URL Scheme는 iOS 앱을 식별하고 외부에서 앱을 호출할 수 있게 해주는 고유 주소 체계입니다.
마치 Safari에서 https://로 웹사이트를 여는 것처럼, letsgitit:// 같은 앱 전용 프로토콜을 등록해두면 다른 앱(예: Safari, GitHub 웹페이지)에서 우리 앱을 열 수 있어요.
가장 간단한 예시로는 기본 앱에서 많이 활용하는 기능들이 있습니다.
번호 형태의 텍스트를 누르면 전화걸기가 바로 뜨는 방식이죠. 번호를 누르면 팝업메뉴가 뜨고 다양한 액션을 취할 수 있게 확인되는 부분에서 연결하는 느낌입니다. (기본 앱끼리 간의 호환성이 엄청 뛰어나지 않을까 하는 생각이 들었어요)
문득 생각난 예시가 카카오T나 카카오페이에서 카카오톡 앱을 열 때와 비슷하다고 생각했는데, 동작은 비슷하지만 조금 다를 수도 있다고 합니다. (개인적으로 LG 익시오(AI 통화녹음 앱)에서 이걸 지원해줬으면 좋았을 텐데 하는 생각을 했어요.)
다른 활용 예시들:
사용할 수 있는 범위는 정말 다양할 것 같습니다.
실제로 URL Scheme를 지원하는지 확인하는 방법은 웹에서 공개 문서를 검색하는 것입니다.
실무에서는 주로 이런 패턴으로 활용됩니다:
딥링크는 단순히 앱만 여는 게 아니라, 앱 안에서 특정 위치(화면, 콘텐츠, 탭, 글 등)를 바로 보여주는 기능입니다.
"링크 하나 클릭했는데, 앱이 열리더니 딱 내가 보던 화면이 떠!" 이게 바로 딥링크입니다.
딥링크 경험 예시
유튜브 | Safari → 유튜브 앱에서 영상 재생 |
인스타그램 | 브라우저 링크 → 앱의 특정 계정 or 포스트 바로 열기 |
카카오맵 | 웹 지도 → 앱에서 길찾기 화면 바로 실행 |
쿠팡 | 프로모션 링크 클릭 → 앱에서 특정 상품 상세 페이지로 이동 |
딥링크의 종류
딥링크는 구현 방식에 따라 세 가지로 나뉩니다:
종류 | 설명 | 예시 |
URL Scheme 딥링크 | 앱 고유 스킴 사용 (구형 방식) | youtube://watch?v=1234 |
Universal Link | 웹 주소 기반 (iOS 공식 권장) | https://youtube.com/watch?v=1234 |
Deferred Deep Link | 앱이 설치 안 되어 있어도, 설치 후 딥링크 자동 적용 | 마케팅, 광고에서 많이 씀 |
요약하자면 딥링크가 상위 개념입니다.
"앱 외부(웹 또는 다른 앱)에서 앱 내부의 특정 위치로 연결하는 기술"을 딥링크라고 하고, 앱 간의 연결을 하기 위해서 URL Scheme과 Universal Link, Deferred Deep Link의 선택지가 있는 것입니다.
세 가지 딥링크 방식 비교
항목 | URL Scheme | Universal Link | Deferred Deep Link |
링크 형식 | myapp://screen/123 | https://myapp.com/screen/123 | https://xyz.page.link/... (Firebase 등) |
앱 설치 시 동작 | 무조건 앱 실행 시도 | 앱 설치되어 있으면 앱 열림 | 설치되면 앱 실행 + 링크 복원 |
앱 미설치 시 동작 | ❌ 아무 반응 없음 or 오류 | ✅ 웹페이지 fallback or AppStore 이동 | ✅ AppStore → 설치 후 앱에서 목적지로 자동 이동 |
사용 목적 | 앱 간 실시간 연결, 인증 호출 등 | 웹 공유, SNS 마케팅, 푸시 대응 등 | 앱 설치 유도 + 설치 후에도 목적 유지 |
보안성 | ❌ 낮음 (스푸핑/가로채기 가능) | ✅ 높음 (도메인 검증) | ✅ 높음 (동적 링크 플랫폼 기반) |
설정 난이도 | ⭐ 쉬움 (Plist 설정만) | ⭐⭐⭐ 복잡 (도메인 설정 + AASA 파일 + Capabilities) | ⭐⭐⭐⭐ 플랫폼 연동 필요 (Firebase, Branch 등) |
권장 여부 | ❌ Deprecated 경향 (하지만 여전히 사용됨) | ✅ iOS 공식 권장 방식 | 🔁 Universal 기반 확장 (권장 방식 포함) |
대표 사용처 | Toss 인증, 카카오톡 로그인 | 쿠팡 상품 링크, 마케팅 캠페인 | 앱 설치 유도형 공유 링크, 추천인 코드 등 |
상황별 권장 딥링크 방식상황별 권장 딥링크 방식
시나리오 | 권장 딥링크 | 방식이유 |
A 앱에서 B 인증앱 열기 | ✅ URL Scheme | 즉시 전환, 빠른 응답 |
카톡/메일에서 앱 설치 유도 | ✅ Deferred Deep Link | 설치 후에도 원래 목적 유지 |
웹에서 특정 상품으로 앱 연결 | ✅ Universal Link | 사용자 경험, 보안, fallback 완비 |
앱 설치 후 광고 성과 추적 | ✅ Firebase 기반 Deferred Deep Link | 클릭 → 설치 → 전환까지 추적 가능 |
인증 후 redirect 시 콜백 처리 | ✅ URL Scheme or Universal Link | OAuth 구조에 따라 선택 가능 |
URL Scheme이 여전히 사용되는 이유
그렇다면 왜 아직도 URL Scheme 방식을 고집하는 경우가 있을까요? 무슨 성능적 이점이라도 있을까요?
URL Scheme의 장점:
하지만 보안적인 스푸핑의 위험이 있어서 추천하지 않는데도 불구하고 인증 앱에 어떻게 쓸 수가 있는 건지 궁금했습니다.
스푸핑 위험이란?
URL Scheme은 앱 이름만 맞추면 누구나 흉내낼 수 있습니다.
예시:
kakaotalk://auth?code=abc123
이 스킴을 악성 앱이 사전에 등록해버리면 → 진짜 인증 대신 가짜 앱이 열릴 수도 있음
이를 Scheme Hijacking / URL Spoofing이라고 부릅니다.
그럼에도 불구하고 보안 분야에서 사용하는 이유
보안이 URL Scheme 자체에 의존하지 않기 때문입니다.
🔑 핵심은 "URL은 신호일 뿐, 진짜 인증은 내부에서 다시 검사"하기 때문이에요.
결국 "URL Scheme도 결과 신호만 전달하고, 진짜 보안은 서버에서 하니까 문제없잖아? 그런데 왜 Apple은 Universal Link를 더 권장할까?"
URL Scheme의 문제점: "기능 부족 + 예측 불가능성"
Universal Link는 "플랫폼 연계와 UX에 최적화"
보안은 다중 레이어로 설계되어야 안전합니다. 즉, 들어오는 입구부터 위험을 줄이면 전체 보안 사고 확률이 낮아지는 것입니다.
내 상황에서 URL Scheme을 쓰는 것이 맞는가?
OAuth 인증에는 URL Scheme이 최적화된 방식이라고 합니다.
왜 OAuth에는 URL Scheme이 더 나은가?
OAuth 연동 기준에서 실시간 앱 전환이 빠르다는 장점이 있습니다:
왜 중간에 코드가 탈취당해도 문제가 없을까요?
처음에는 뭐부터 무엇을 해야할지 감이 잡히지 않을때가 많이 있는데, 뭐라도 하다보니까 감이 잡히는 느낌을 받곤 해요.
"일단 해보고, 해본다음 생각하자 " 자꾸 잊게 되고 놓치는 경우가 많지만 "오늘도 나는 포기 하지않았다" 이 부분이 저에게 추진력을 가져다 줬으면 좋겠습니다.!
[Swift] OAuth 인증 완벽 가이드: 안전한 앱 연동의 모든 것 (1) | 2025.05.28 |
---|---|
[Swift] Data Race (0) | 2025.05.27 |
[Swift] CoreML (3) | 2024.12.25 |