1 of 25

웹뷰와 네이티브를�제대로 이어붙이기

Webview Request Protocol 🌯

2 of 25

발표자 소개

  • 2014 ~ 2016�사이냅소프트에서�네이버오피스 (주로 Word) 개발�
  • 2016 ~ 2018�스포카에서 도도포인트, 도도매니저 개발�
  • 2018 ~ 2020�데브시스터즈에서 웹서비스 이것저것 많이 개발�
  • 2020 ~ 현재�뤼이드에서 오늘 발표하는 것 같은 무언가를 이것저것 많이 개발

Twitter, GitHub - @disjukr

3 of 25

웹뷰가 얼마나 많이�사용되고 있을까요

(빌드 번호 연타하여 개발자 옵션 활성화 후)

개발자 옵션 > 레이아웃 범위 표시

4 of 25

5 of 25

대체로 메인화면에서 한 두번의 터치로 도달할 수 있는 곳에 웹뷰가 사용되고 있음

6 of 25

중복 개발 X

스토어 심사 X

7 of 25

웹뷰 통신을 위해 제공되는 네이티브 API가 불편함

웹페이지와 모바일 앱의 생명 주기가 다름

웹페이지와 모바일 앱의 버전이 서로 다름

8 of 25

웹뷰 통신을 위해 제공되는 네이티브 API가 불편함

9 of 25

웹뷰 통신을 위해 제공되는 네이티브 API가 불편함

10 of 25

웹뷰 통신을 위해 제공되는 네이티브 API가 불편함

웹페이지와 모바일 앱의 생명 주기가 다름

웹페이지와 모바일 앱의 버전이 서로 다름

11 of 25

웹페이지와 모바일 앱의 생명 주기가 다름

12 of 25

웹뷰 통신을 위해 제공되는 네이티브 API가 불편함

웹페이지와 모바일 앱의 생명 주기가 다름

웹페이지와 모바일 앱의 버전이 서로 다름

13 of 25

웹페이지와 모바일 앱의 버전이 서로 다름

심사 없음

스토어 심사 대기 필요

거절될 수도 있음

14 of 25

웹페이지와 모바일 앱의 버전이 서로 다름

새로고침 하면

나도 모르는 새에 최신버전

죽어도 업데이트 안 함

사용자 버전 파편화

15 of 25

해결책 - Webview Request Protocol (WRP)

  • 앞서 언급한 문제들을 해결해주는 레이어
  • 모바일 앱을 웹뷰를 위한 API 서버라고 생각하자
    • Protobuf 기술을 모바일 앱과 웹뷰 통신에 활용하자
    • Protobuf 코드 생성기가 gRPC 통신 코드를 생성하는 대신 WRP 통신 코드를 생성하게 만들자

16 of 25

17 of 25

18 of 25

WrpGuest

WrpHost

WrpChannel

Glue (per Platform)

WrpSocket

Protobuf

Client

Protobuf

Server

19 of 25

( Protobuf Server )

useWrpServer(...)

( Protobuf Client )

client.getTextValue()

( WrpChannel )

20 of 25

05 00 00 00 0A 66 …

0A 00 00 00 32 37 0A 01 31 12 …

07 00 00 00 3A …

05 00 00 00 42 …

( WrpChannel )

( WrpSocket )

21 of 25

이 구조에서 앞서 말한 문제들은 어떻게 해결되는 건가요

  • 웹뷰 통신을 위해 제공되는 네이티브 API가 불편함
    • Protobuf 스키마 컴파일러로 사용하기 편한 라이브러리 코드를 생성해서 해결�
  • 웹페이지와 모바일 앱의 생명 주기가 다름
    • 각 플랫폼 별 WRP Glue 코드에서 신경써서 잘 추상화
    • 생성된 Protobuf 라이브러리 위에서 서버/클라이언트 코드를 작성하면�소켓 연결 등 나머지 처리는 WRP 런타임이 담당�
  • 웹페이지와 모바일 앱의 버전이 서로 다름
    • WrpHost가 보내는 HostInitialize 메시지를 통해 현재 사용 가능한 메서드 목록 전달
    • Protobuf 메시지는 키 이름 변경 등 소스코드 수준 하위호환이 깨져도�직렬화된 메시지 수준 하위호환은 유지되는 성질이 있음

22 of 25

관련 링크

  • pbkit: https://pbkit.dev/
    • WRP 코드 생성을 지원하는 Protobuf 스키마 컴파일러
  • pbkit discord: https://discord.gg/PHmV3nhvQq
    • wrp, pbkit관련 질문은 여기서 해주세요�
  • wrp: https://wrp.pbkit.dev/
    • WRP 홈페이지
  • wrp-ts: https://github.com/pbkit/wrp-ts
    • 타입스크립트, React, Jotai 라이브러리
  • wrp-kt: https://github.com/pbkit/wrp-kt
    • 안드로이드 웹뷰, Jetpack Compose 라이브러리, 사용 예제
  • wrp-swift: https://github.com/pbkit/wrp-swift
    • iOS 웹뷰, Swift UI 라이브러리, 사용 예제
  • wrp-demo: https://github.com/pbkit/wrp-demo
    • wrp-ts 사용 예제

( 디스코드 서버 QR 코드 )

23 of 25

시연

24 of 25

도와준 사람들

  • WRP의 전신인 앱브릿지 개발을 도와주셨던�옛 산타토익팀, 산타공인중개사팀, CMS팀�
  • Protobuf.js를 걷어내고 Pbkit 적용 작업을 진행해준 뉴토익팀�(토익 앱브릿지도 WRP으로 교체합시다)
  • 프로덕션에 WRP 적용 작업을 진행해준 에어매스팀�
  • wrp-kt 개발을 도와주신 안드로이드팀�
  • wrp-swift 개발을 도와주신 iOS팀�
  • 같이 WRP을 개발한 용욱님 (이따 Deno 발표를 하시는 분입니다)

25 of 25