[개발 일기] 2025.06.30 - 딥링크는 전역 위치에서 사용하세요

2025. 6. 30. 22:01·개발 일기

💡 개요

 

서비스 단에서는 딥링크를 직접 감지하지 말고, 앱 전역에서 감지 후 service로 위임하세요.

 

 

Flutter에서 딥링크를 사용할 때, 왜 서비스 클래스(NaverLoginService 등)에서 직접 콜백을 받는 방식이 권장되지 않을까?

 

 

 

🛠️ 딥링크

 

Flutter에서 딥링크를 사용하는 이유는 외부 앱이나 브라우저에서 특정 화면이나 기능으로 직접 이동시키기 위함이다.

 

 

그리고 현재 글에서 언급한 것 처럼 이런 고민을 하는 이유는 main.dart와 같은 클래스에서 콜백 응답 데이터를 받는 것 보단, NaverLoginService.dart와 같이 목적에 더 적합한? 클래스에서 받고싶기 때문이다.

 

 

아마 자바를 기준으로 말하자면 응집도를 높이기 위함이 아닐까 싶다.

 

 

 

🤔 왜 서비스 단에서 딥링크를 직접 감지하면 안 될까?

 

딥링크는 앱이 실행 중이든 꺼져 있든 앱 전체 생명주기와 관련된 동작을 트리거한다.

 

 

따라서 MaterialApp이 생성되고 초기화되기도 전에 서비스에서 딥링크를 감지하려고 하면 서비스 객체가 아직 생성되지 않았을 수도 있다.

 

 

이는 Spring Framework처럼 모든 Bean(객체)이 애플리케이션 실행과 동시에 초기화되는 구조와는 다르다.

 

 

Flutter에서는 객체가 명시적으로 생성되거나 특정 위젯 트리 내에서 빌드될 때 초기화되기 때문에, 앱 시작 시점에 모든 서비스가 자동으로 초기화되는 구조가 아니다.

 

 

 

✅ 올바른 설계 방식: 전역 감지 → 서비스 위임

 

  1. 앱 시작점(main.dart)에서 딥링크를 전역으로 감지

  2. 딥링크 경로와 쿼리 파라미터를 파싱

  3. 기능에 따라 해당 서비스에 위임

 

class _AppState extends State<App> {
  late final AppLinks _appLinks;

  @override
  void initState() {
    super.initState();
    _appLinks = AppLinks();
    _listenDeepLinks();
  }
  
  // 딥링크를 사용해 전달받은 authCode을 NaverLoginService에게 전달
  void _listenDeepLinks() {
    _appLinks.uriLinkStream.listen((Uri uri) {
      final authCode = uri.queryParameters['code'];
      NaverLoginService.getMemberInfo(authCode);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: HomeScreen());
  }
}

 

class NaverLoginService {
  static const _baseUrl = '요청을 전달할 백엔드 URL';

  ...

  static Future<NaverLoginResponse> getMemberInfo(String? authCode) async {
    final url = Uri.parse('$_baseUrl?code=$authCode');
    final response = await http.get(url);
    if (response.statusCode == 200) {
      final json = jsonDecode(response.body);

      return NaverLoginResponse.fromJson(json);
    }
    throw Error();
  }
}

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.07.02 - SSL 암호화하면 헤더도 암호화되나요?  (1) 2025.07.02
[개발 일기] 2025.07.01 - boolean 타입을 리턴할 때 is 조심! (Feat: @Getter)  (1) 2025.07.01
[개발 일기] 2025.06.29 - GitHub Action?  (0) 2025.06.29
[개발 일기] 2025.06.28 - 조금 이따가 해드릴께요~  (1) 2025.06.28
[개발 일기] 2025.06.27 - Stateful과 Stateless의 차이  (0) 2025.06.27
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.07.02 - SSL 암호화하면 헤더도 암호화되나요?
  • [개발 일기] 2025.07.01 - boolean 타입을 리턴할 때 is 조심! (Feat: @Getter)
  • [개발 일기] 2025.06.29 - GitHub Action?
  • [개발 일기] 2025.06.28 - 조금 이따가 해드릴께요~
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.06.30 - 딥링크는 전역 위치에서 사용하세요
상단으로

티스토리툴바