AS-IS

앱 스킴 방식 (AS-IS)

장점

  • 기존 인프라 그대로 사용
  • 단순한 호출 구조

고려할 점

  • 동시 호출 시 1개 제외 미동작
  • 호출 간 delay 500ms 필수
  • 전역 관리 불가 (vue+jsp 혼용)

JS Interface 방식 (TO-BE)

장점

  • 동시 호출 비동기 처리
  • delay 없이 즉시 호출
  • 플랫폼별 분기 캡슐화

고려할 점

  • 네이티브 팀 협업 필요
  • iOS/Android 각각 구현 필요

기존에는 앱 스킴 호출 방식을 사용하고 있었습니다. 이 방식은 동시에 여러 스킴을 호출하면 1개를 제외한 나머지가 미동작하는 문제가 있었습니다. 2개 이상의 스킴을 호출할 경우 호출 간 500ms delay를 필수적으로 넣어야 했고, vue와 jsp가 같이 구동되는 환경이기 때문에 앱스킴 호출부를 전역적으로 관리할 수 없었습니다.

emart.app.cmd('open_messagebox_webpage', 'name=window.getMessageBox');

메인 마수동 팝업

약 2.5초 소요

알림함

약 1.4초 소요

TO-BE

JavascriptInterface 호출 방식으로 전환했습니다. 이 방식은 동시 호출 시에도 미동작 없이 비동기적으로 구동됩니다.

// 선언부
export const useEapp = (scheme: string, callback: string) => {
    const { state } = useStore();
    const { isApp, isIOS, isAndroid } = state.appInfo;

    if (!isApp) {
        return;
    }

    const eventHandler = () => {
        if (isAndroid) {
            emartApp[scheme](callback);
        } else if (isIOS) {
            const message = {
                scheme,
                callback,
            };
            webkit.messageHandlers.emartApp.postMessage(message);
        }
        document.removeEventListener('DOMContentLoaded', eventHandler);
    };
    document.addEventListener('DOMContentLoaded', eventHandler);
};

// 호출부
useEapp('getPushList', 'window.getMessageBox');

메인 마수동 팝업

약 0.8초로 단축되어 기존 대비 1.7초가 감소했습니다.

알림함

약 0.5초로 단축되어 기존 대비 0.9초가 감소했습니다.

응답 시간 비교 (초)
항목비교값 (초)
메인 마수동 팝업 (AS-IS)2.52.5 초
메인 마수동 팝업 (TO-BE)0.80.8 초
알림함 (AS-IS)1.41.4 초
알림함 (TO-BE)0.50.5 초
🚀

메인 마수동 팝업

2.5초 → 0.8초 (68% 단축)

🔔

알림함

1.4초 → 0.5초 (64% 단축)