당근마켓 파일 기반 웹뷰 소개

2022.05.30 | 조회 1.77K |
0
|
푸른청년의 뉴스레터의 프로필 이미지

푸른청년의 뉴스레터

제가 읽었을 때 좋았거나 유용하다고 생각되는 기사나 책을 요약 정리해서 소개합니다. 간혹 제가 쓴 글도 있습니다.

웹뷰 속도 문제를 이렇게 풀 수도 있군요.

- 당근마켓의 주요화면은 네이티브 UI로 개발되었고 예전엔 극히 일부인 웹 화면을 위해 전용 인프라를 유지하기 보단 API를 담당하는 레일즈 서버에서 함께 처리하고 있었어요.

- 레일즈 서버에 부하가 커져서 서버가 느려질 때 화면 로딩이 함께 느려졌어요

- 이런 문제점들을 개선해보기 위해 그 당시 조심스럽게 SPA(Single Page Application) 방식을 검토했었고, 중고거래 서비스의 “신고하기” 기능을 Vue 기반 SPA로 분리한 것이 당근마켓 웹 프론트엔드의 첫 시작이였어요.

웹뷰 기반 화면은 네이티브 화면과 다르게 추가적인 다운로드가 필요해요. SPA 방식은 화면을 그리는 코드를 한 번에 다운로드 받기 때문에 네비게이션 할 때 마다 다운로드를 추가로 기다릴 필요가 없지만 모든 화면 코드를 한 번에 받는 만큼 첫 로딩 시간이 길어질 수 밖에 없어요.

앱을 실행했을 때 백그라운드에서 미리 웹 파일들을 다운로드 받고, 진입할 때는 네트워크가 아니라 파일로(file://) 웹뷰를 실행하면 추가 로딩 없이 화면 전환을 할 수 있어요.

- 이 때 새버전이 배포되었는지 여부를 먼저 확인해서, 항상 파일을 다운로드 받지 않아도, 이전에 받아 둔 파일을 캐싱해뒀다가 사용할 수 있어요.

첨부 이미지

필요한 파일들만 한 번에 로딩하기 위해서, 컨텐츠를 ZIP 파일로 묶어서 배포하고 클라이언트에서 푸는 방식을 선택했어요. 이렇게 하면 배포의 원자성(Atomicity)을 쉽게 보장할 수 있어요.

- 당근마켓 프론트엔드 챕터에선 이 방식을 로컬 웹뷰라고 부르고 있어요.

- (단점은) 웹 플랫폼 API들은 모두 “출처”(Origin) 기반 보안 모델을 따르고 있어요. 출처가 없는 파일 프토토콜(file://) 기반 브라우징 컨텍스트에서는 일부 API에 접근할 수 없는 문제가 있었어요. (예시: WebWorker 사용 불가)

# 요약글입니다. 원문은 아래 링크에서 확인하세요

혹시라도 내용이 괜찮으셨다면 구독 및 추천 부탁드립니다.

감사합니다. 제 브런치 주소는 https://brunch.co.kr/@kawn 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

✉️

이번 뉴스레터 어떠셨나요?

푸른청년의 뉴스레터 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !
© 2025 푸른청년의 뉴스레터

제가 읽었을 때 좋았거나 유용하다고 생각되는 기사나 책을 요약 정리해서 소개합니다. 간혹 제가 쓴 글도 있습니다.

뉴스레터 문의imblue9118@gmail.com

메일리 로고

도움말 자주 묻는 질문 오류 및 기능 관련 제보 뉴스레터 광고 문의

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관 | 라이선스