Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✏️ 모바일 딥링크 기술에 대해 알아보자 #10

Closed
BangDori opened this issue Dec 15, 2024 · 8 comments
Closed

✏️ 모바일 딥링크 기술에 대해 알아보자 #10

BangDori opened this issue Dec 15, 2024 · 8 comments
Assignees
Labels
검토 중 검토가 진행중인 글 초안 검토를 받기 전 글

Comments

@BangDori
Copy link
Contributor

내용 (한줄 요약)

딥링크의 필요성을 시작으로 딥링크가 어떻게 발전해왔는지를 알아봅시당

예상 독자

앱 개발자, 마케터, 모바일 링크가 궁금한 사람

블로그 링크

https://bangdori.kr/posts/deeplink/

@BangDori BangDori added the 초안 검토를 받기 전 글 label Dec 15, 2024
@psychology50
Copy link

Recently, I came across the concept of deep links, but I was able to better understand it after reading your post. 👍

The example you provided in the blog is great, but I think if your target readers are Korean, you could use more relatable examples like Kakao, Instagram, or similar apps.

As you mentioned in section 3-2, a URL Scheme can conflict with other applications. While it might seem like a minor inconvenience for clients, it could also be exploited for abuse attacks. 😈

In section 3-3, you wrote, "고유한 웹사이트 주소를 이용하기 위해서는 Android, iOS 각각 도메인 소유자를 인증하는 과정을 거쳐야 합니다." However, I don’t fully understand this part. Where can I find more information about this process?


최근에 딥링크라는 개념을 접했는데, 병준님 글을 읽고 나서 더 잘 이해하게 되었습니다. 👍

블로그에 작성한 예시는 좋았지만, 만약 타겟 독자가 한국인이라면 카카오톡이나 인스타그램 같은 더 익숙한 예시를 제공하면 좋을 것 같아요.

3-2 단원에서 언급하셨듯이 URL Scheme은 다른 애플리케이션과 중복될 수 있습니다. 이는 단순히 사용자에게 불편을 주는 것처럼 보이지만, 어뷰징 공격으로 악용될 수도 있기 때문에 보안적으로도 위험합니다. 😈

3-3 단원에서는 "고유한 웹사이트 주소를 이용하기 위해서는 Android, iOS 각각 도메인 소유자를 인증하는 과정을 거쳐야 합니다."라고 하셨는데요. 이 부분이 잘 이해되지 않습니다.
관련 정보를 어디에서 확인할 수 있을까요?

@github-actions github-actions bot added the 검토 중 검토가 진행중인 글 label Dec 18, 2024
@BangDori
Copy link
Contributor Author

@psychology50

블로그에 작성한 예시는 좋았지만, 만약 타겟 독자가 한국인이라면 카카오톡이나 인스타그램 같은 더 익숙한 예시를 제공하면 좋을 것 같아요.

딥링크를 아주 잘 나타내는 예시라 생각해서 가져온 이미지인데, 확실히 한국인에게는 카카오톡이나 인스타가 더욱 익숙한 예시가 될 수 있겠네요! 이것이 사용자 경험..! 감사합니다

3-2 단원에서 언급하셨듯이 URL Scheme은 다른 애플리케이션과 중복될 수 있습니다. 이는 단순히 사용자에게 불편을 주는 것처럼 보이지만, 어뷰징 공격으로 악용될 수도 있기 때문에 보안적으로도 위험합니다. 😈

해당 문장에서 주는 모호함과 어뷰징 공격과 관련해서는 저도 확실한 정보를 얻지 못해서 제가 분명히 제거하고 다시 재업로드 했던 것으로 기억하는데, 재서님이 그 짧은 사이에 보신 것 같네요.. 😓 ㅠㅠㅋㅋ큐

@BangDori
Copy link
Contributor Author

BangDori commented Dec 19, 2024

3-3 단원에서는 "고유한 웹사이트 주소를 이용하기 위해서는 Android, iOS 각각 도메인 소유자를 인증하는 과정을 거쳐야 합니다."라고 하셨는데요.

토글로 숨겨져있는 예시 내부에서 딥링크의 모든것이라는 포스팅에서 더 자세한 정보를 확인하실 수 있습니다.

질문주신 내용에 대해 말씀을 드리자면 우선 URL Scheme만을 이용하는 방식에는 포스팅에 작성한 것 처럼 분명한 한계점이 존재합니다.

  • 중복 스킴 발생 가능성
  • 앱이 설치되어 있지 않은 경우의 링크 미동작

이러한 한계점을 극복하기 위해서, 네이티브 경험과 브라우저 경험을 모두 제공할 수 있는 도메인 주소를 활용하는데 이러한 도메인 주소를 iOS와 Android에 연결하기 위해서는 iOS와 Android에 링크를 걸고 소유자를 인증해주어야 합니다.

iOS에서의 방식을 살펴보자면, 우선 Xcode에서 도메인 연결을 위해 Associated Domain 설정을 합니다.

그리고 이렇게 연결된 도메인 주소가 실제 해당 앱의 소유자가 맞는지를 확인하기 위해 아래에 주소에 앱 아이디가 담긴 applikns를 포함해주어야 합니다.

  • https://example.com/.well-known/apple-app-site-association
{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [
               {
                  "#": "no_universal_links",
                  "exclude": true,
                  "comment": "Matches any URL with a fragment that equals no_universal_links and instructs the system not to open it as a universal link."
               },
               {
                  "/": "/buy/*",
                  "comment": "Matches any URL with a path that starts with /buy/."
               },
               {
                  "/": "/help/website/*",
                  "exclude": true,
                  "comment": "Matches any URL with a path that starts with /help/website/ and instructs the system not to open it as a universal link."
               },
               {
                  "/": "/help/*",
                  "?": { "articleNumber": "????" },
                  "comment": "Matches any URL with a path that starts with /help/ and that has a query item with name 'articleNumber' and a value of exactly four characters."
               }
             ]
           }
       ]
   },
 }

앱과 웹간의 소유자 인증이 완료되면, 링크를 클릭했을 때 앱으로 이동하고 앱이 없는 경우 웹으로 이동하게 됩니다.

Note

실제로 Youtube에서도 아래 링크를 타고 들어가보면 유튜브의 앱 아이디가 담긴 정보를 확인하실 수 있습니다.

@psychology50
Copy link

psychology50 commented Dec 20, 2024

질문에 대한 전반적인 내용을 잘 설명해주셔서 감사드립니다.
몇 가지 생각을 나누고 싶어 추가 답변 남깁니다.

토글로 숨겨져있는 예시 내부에서 딥링크의 모든것이라는 포스팅에서 더 자세한 정보를 확인하실 수 있습니다.

image

가장 처음에 들었던 의문은 "도메인 소유권을 인증해야 한다? Ok..근데 domain의 .well-known위치에 넣으라는 게 무슨 의미지?"였어요.
아마도 iOS와 Android 공식 페이지에서 정의한 양식에 맞게, 서버 측에서 well known url을 통해 파일을 전달하라는 의미인 거 같네요. (찾아봤는데 맞네요)

이 포스팅을 읽는 주 대상자는 앱 개발자일 가능성이 높고, 특히나 학생일 확률이 더더욱 높겠죠.

저는 OAuth OIDC를 할 때, .well-known URL의 의미와 목적에 대해 찾아본 적이 있으니, 해당 부분에 대한 이해가 어렵진 않았습니다만,

그럼 "학생 앱 개발자(혹은 이 포스팅을 참고해야 할 정도로 경험이 부족한 앱 개발자)가 이걸 직관적으로 이해할 수 있을까?"라는 의문이 먼저 들었고, 병준님은 이를 정말 이해하고 작성하신 지 여쭤보고 싶었어요.


추가로 제 질문의 핵심은 인증의 필요성이나 설정 방법이 아니라, 구체적인 플로우가 궁금했던 것이었는데, 질문을 너무 모호하게 드렸네요. 😅

병준님이 어떤 목적과 목표를 가지고 포스팅을 하시는 지 잘 모르지만, 정보 전달 보다는 개인 공부 목적이 더 클 것이라 생각합니다.
그렇다면 혹시 딥 링크에 대해 찾아보시면서, 이런 의문이 드신 적은 없으셨나요?

image

  • 거의 대부분 블로그에서 이 정도 내용은 다 포함하고 있습니다.
  • 그런데 유니버셜 링크를 클릭했을 때, 디바이스는 왜, 그리고 어떻게 웹이 아닌 앱 설치 여부를 먼저 확인할까요?
  • 어떤 원리로 도메인에 해당하는 앱을 탐색할 수 있는 걸까요? 언제 OS에게 이 정보를 알려준 거죠?
  • 도메인 소유권 인증은 유니버셜 링크를 클릭할 때마다 발생하나요?
  • 만약 .well-known 경로를 제공할 서버가 없다면, 유니버셜 링크는 사용할 수 없나요? 다른 대안책은 없을까요?
  • .well-known 정보에 악의적인 공격을 당할 문제점은 없을까요? 예를 들어, 서버에 요청을 보냈는데 중간자 공격으로 변조된 파일을 수신하거나 하는 문제는 없을까요?
  • 유니버셜 딥링크를 클릭했는데, 앱이 설치되어 있지 않다고 합시다.
  • 유니버셜 링크를 눌렀을 때, 웹 페이지가 켜지지 않고 바로 마켓 앱에서 해당 앱을 찾아주도록 하는 건 불가능한가요? 만약 허용해주지 않는다면, 왜 허용해주지 않는 거죠? 이게 더 빠를 텐데?

제가 예전에 딥링크에 찾아보았을 때, 이러한 내용들이 너무도 궁금했고, 또 찾아봤었습니다.
그러나 이런 내용을 다룬 곳은 한 곳도 못 봤던 거 같아요.

개인적으론 이런 내용들을 포함하시면 독자들이 딥링크의 작동 방식을 더 깊이 이해하는 데 도움이 될 것 같습니다.
물론 병준님께서 이미 이런 부분들을 알고 계실 수도 있겠지만, 이러한 기술적 원리들을 포스팅에서 다뤄주시면 더욱 풍성한 내용이 될 것 같네요.

@BangDori
Copy link
Contributor Author

@psychology50

저는 개념 위주의 블로깅을 정말 하기 싫어하는 사람입니다. 왜냐하면 개념 정리를 하다 보면 결국 다른 블로그에서 다루는 내용과 크게 다를 게 없어지게 되더라고요. 특히 공식 문서나 기술 블로그를 참고하다 보면 어느 순간, 내용을 거의 그대로 정리하게 되고 그때마다 "똑같은 내용을 다시 정리하는 블로깅이 의미가 있나?"라는 생각에 마주하게 되더라구요.

그럼에도 불구하고 이번 포스팅에서 딥링크 개념을 정리하게 된 이유는 모바일 개발을 하게 되면 절대적으로 마주칠 수 밖에 없는 딥링크의 개념을� 팀원들과 공유하고 싶었기 �때문이였어요. 다른 블로그를 참고하는 것만으로는 이해가 되지 않아서 개인적인 학습의 목적도 있었구요!

다만 댓글에서 말씀해주신 질문들이 너무 흥미로운 내용이기도 하고, 제가 이번에 작성한 포스팅은 딥링크라는 기술의 동작 원리에 대한 내용은 부족한 것 같아서 다음에는 더 깊이 있는 블로깅을 작성해봐야겠어요 😊

너무 유익한 피드백 감사합니다 ㅎㅎ

@psychology50
Copy link

@BangDori

정보 전달이 주 목적이었다면, 제 리뷰가 오히려 부적절 했던 거 같네요. 허허

@BangDori
Copy link
Contributor Author

BangDori commented Dec 21, 2024

@psychology50

아 아뇨 ㅋㅋㅋ 재서님이 말한 것 처럼 타 블로그의 내용과 별 차이점이 없기도하고, 너무 흥미로운 주제들을 많이 던져주셔서 양질의 피드백에 너무 Thank you 합니다 ㅋㅋㅋ

@youngsu5582
Copy link
Contributor

글 잘보고 갑니당

예상 독자
앱 개발자, 마케터, 모바일 링크가 궁금한 사람

의 관점에서는 전 적합했던거 같아요.
처음 딥링크 라는 개념을 접했는데 매우 흥미로웠습니다.
( 위 더 깊은 내용은 개인적인 학습을 위해선 매우매우 좋을거 같긴 하네용 🙂 )

추가로, 링크가 되게 많다고 느꼈는데 대부분이 사진이나 내용에 나와있는거 같았는데
글 맨 앞에 링크는 참고용이다 라고 알려줘도 좋을거 같습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
검토 중 검토가 진행중인 글 초안 검토를 받기 전 글
Projects
None yet
Development

No branches or pull requests

4 participants