본문으로 건너뛰기
DEVKBS
작업 원장
003Vstro2022보관

OrderNine — 웹뷰 주문 앱

웹을 앱처럼 보이게 만드는 데 필요한 것들

기간
2022
분류
모바일 앱
역할
프론트엔드 · 웹뷰
구성
외주 프로젝트
화면 준비 중데스크톱 1600 × 1000 · 모바일 1080 × 2340

01개요

안드로이드 앱 껍데기 안에 웹 화면을 띄우는 웹뷰 앱이었습니다. 당시 회사의 스택은 ASP.NET Core 기반의 서버 렌더링이었기 때문에, 화면을 이동할 때마다 페이지 전체가 다시 그려졌습니다. 웹에서는 자연스러운 동작이지만 앱 안에서는 화면이 한 번 하얗게 깜빡이는 것으로 보입니다. 사용자는 그것을 '앱이 버벅인다'고 느낍니다.

SPA로 다시 만들 여건은 아니었습니다. 그래서 프레임워크를 바꾸는 대신, 바깥 껍데기는 그대로 두고 안쪽 내용만 갈아 끼우는 구조를 만들었습니다. 헤더와 하단 탭은 절대 다시 그려지지 않고, 본문 영역만 교체됩니다.

그러자 새로운 문제가 생겼습니다. 바깥 껍데기와 안쪽 내용이 서로 다른 문서라서 상태를 공유할 수 없습니다. 장바구니 개수 배지를 갱신하거나, 안쪽에서 로그인이 풀렸을 때 바깥이 알아채야 하는 상황이 계속 나왔습니다.

02기술 결정

문제가 무엇이었고, 무엇을 골랐고, 그래서 어떻게 됐는지.

  1. 결정 01

    SPA로 갈아엎는 대신 껍데기를 고정한다

    문제
    화면 이동마다 전체 페이지가 새로 로드되면서 흰 화면이 스쳤습니다. 앱 안에서는 이 깜빡임이 그대로 품질 문제로 보입니다. 그렇다고 서버 렌더링 구조 전체를 SPA로 바꾸는 것은 일정에 맞지 않았습니다.
    선택
    헤더와 하단 내비게이션을 담은 껍데기 문서를 한 번만 띄우고, 본문만 안쪽에서 교체하도록 구성했습니다. 이동은 안쪽 영역만 바뀌고 바깥은 유지됩니다.
    결과
    화면 전환에서 깜빡임이 사라지고 하단 탭이 계속 붙어 있게 됐습니다. 서버 구조는 그대로 둔 채 체감 품질만 바꾼 결정이었습니다.
  2. 결정 02

    바깥과 안쪽의 통신 규약을 먼저 정한다

    문제
    껍데기와 본문이 서로 다른 문서라 상태를 직접 공유할 수 없었습니다. 장바구니 배지 갱신, 로그인 만료 처리 같은 일이 생길 때마다 임시방편으로 붙이면 금방 얽힙니다.
    선택
    양쪽이 주고받을 메시지의 종류를 미리 정해 두고, 그 통로로만 대화하게 했습니다. 어느 쪽도 상대의 내부 구조를 직접 건드리지 않습니다.
    결과
    새 기능이 붙어도 통신 지점이 한 곳에 모여 있어 추적이 쉬웠습니다. 나중에 앱 껍데기 쪽 코드를 만질 때도 무엇이 깨질지 예측할 수 있었습니다.
  3. 결정 03

    웹뷰에서만 나는 버그를 재현 가능한 상태로 만든다

    문제
    PC 브라우저에서는 멀쩡한데 실제 기기의 웹뷰에서만 어긋나는 문제들이 있었습니다. 매번 앱을 빌드해 확인하면 한 번 확인하는 데 너무 오래 걸립니다.
    선택
    기기를 PC에 연결해 웹뷰 내부를 직접 들여다볼 수 있는 원격 디버깅 환경을 먼저 세팅하고 작업을 시작했습니다.
    결과
    추측으로 고치던 것이 확인하고 고치는 작업으로 바뀌었습니다. 환경 세팅에 쓴 반나절이 프로젝트 내내 회수됐습니다.

03주요 기능

  • 웹뷰 기반 주문 화면

    안드로이드 앱 안에서 도는 주문·결제 흐름 구현.

  • 고정 껍데기 + 본문 교체

    헤더와 하단 탭을 유지한 채 본문만 갈아 끼워 화면 전환의 깜빡임을 없앴습니다.

  • 양방향 메시지 통신

    껍데기와 본문이 정해진 메시지 규약으로만 상태를 주고받습니다.

  • 카카오 API 연동

    지도·공유 등 카카오 서비스를 앱 흐름 안에 통합.

  • QR 코드

    매장·주문 식별을 위한 QR 생성과 인식 처리.

04회고

'제대로 다시 만들기'가 언제나 최선은 아니라는 걸 배운 프로젝트입니다. 구조를 전부 바꾸지 않고도 사용자가 느끼는 문제의 대부분을 없앨 수 있었습니다. 다만 이렇게 얻은 개선은 임시방편이 되기 쉬워서, 통신 규약처럼 나중에 남을 부분만은 제대로 정해 두는 것이 중요했습니다.

웹뷰는 웹도 앱도 아닌 중간 지대라, 어느 쪽 상식도 그대로 통하지 않습니다. 이때 몸으로 익힌 감각은 나중에 Dpectrum에서 웹뷰 앱 여러 개를 맡게 됐을 때 그대로 쓰였습니다.