모바일 앱에서 사전 로딩과 캐싱 기회 평가하기

읽는 시간: 6 분
...

📝 원문 정보

  • Title: Empirically Assessing Opportunities for Prefetching and Caching in Mobile Apps
  • ArXiv ID: 1810.08861
  • 발행일: 2018-10-23
  • 저자: Yixue Zhao, Paul Wat, Marcelo Schmitt Laser, Nenad Medvidovic

📝 초록 (Abstract)

모바일 소프트웨어의 네트워크 지연은 사용자 경험에 큰 영향을 미치며, 심각한 경제적 결과를 초래할 수 있습니다. 브라우저 기반 시스템에서 프리페칭과 캐싱이 지연 시간을 줄이는 데 효과적이지만, 모바일 앱 도메인에서는 네트워크 상호작용의 차이로 인해 이러한 기술들이 직접 적용되지 않습니다. 또한, 모바일 앱에 적합한 프리페칭과 캐싱 기법을 연구한 자료가 부족하며, 그러한 기법들이 효과적이거나 심지어 가능할 수 있는지 확실하지 않습니다. 본 논문은 이러한 문제들에 대해 첫 걸음을 내딛는 데 초점을 두고, 1000개 이상의 인기 있는 안드로이드 앱에서 HTTP 요청의 특성을 이해하기 위한 포괄적인 연구를 수행했습니다. 우리의 작업은 정적 프로그램 분석 기법을 사용하여 요청의 프리페칭 가능성과 결과 응답의 캐싱 가능성을 중심으로 합니다. 우리의 관찰은 개발자가 앱 개발에 프리페칭 및 캐싱 방법을 활용할 수 있는 지침을 제공하며, 이는 향후 연구를 동기 부여합니다.

💡 논문 핵심 해설 (Deep Analysis)

This paper presents the results of an extensive empirical study aimed at understanding the characteristics of HTTP requests and responses in mobile apps. The goal is to bridge the gap between the well-studied browser domain and the less-explored mobile app domain, motivating future research. Network latency significantly impacts user experience in mobile software, potentially causing severe economic consequences. While prefetching and caching are effective techniques for reducing latencies in browser-based systems, they cannot be directly applied to mobile apps due to differences in network interactions.

The study focuses on over 1000 popular Android apps, using static program analysis techniques to assess the prefetchability of HTTP requests and cacheability of responses. Key findings indicate that GET requests are prevalent across app categories, making them good candidates for prefetching. However, there is a significant issue with the reliability of Expires and Cache-Control headers, which can make caching unreliable if developers rely solely on these headers.

The research provides valuable insights into how to optimize mobile apps by leveraging prefetching and caching techniques effectively. This could lead to improved user experience through reduced network latency and enhanced app performance.

📄 논문 본문 발췌 (Translation)

**소개**

네트워크 지연은 모바일 소프트웨어의 사용자 경험에 큰 영향을 미치며, 경제적으로 심각한 결과를 초래할 수 있습니다. 브라우저 기반 시스템에서 프리페칭과 캐싱이 효과적이지만, 이러한 기술들은 모바일 앱 도메인에서는 직접 적용되지 않습니다.

본 논문은 1000개 이상의 인기 있는 안드로이드 앱에서 HTTP 요청과 응답의 특성을 이해하기 위한 포괄적인 연구를 수행했습니다. 정적 프로그램 분석 기법을 사용하여 요청의 프리페칭 가능성을 평가하고, 결과 응답의 캐싱 가능성도 살펴보았습니다.

방법론

이 섹션에서는 HTTP 프로토콜과 모바일 앱에서 네트워크 작업 수행 방법에 대한 개요를 제공합니다. 특히 안드로이드 환경을 중점적으로 다룹니다.

HTTP 프로토콜

이전 연구들은 모바일 앱이 인터넷에서 데이터를 가져오는 데 총 34%에서 85%까지의 시간을 소비한다고 보고했습니다. 대부분의 앱은 HTTP를 통해 작동하며, 클라이언트가 요청을 보내고 서버가 응답을 반환합니다.

HTTP 요청

HTTP 요청에는 HTTP 메소드, 자원을 가져올 대상 URL, 선택적인 요청 헤더 및 본문이 포함됩니다. 개발자는 GET, POST, DELETE 등과 같은 HTTP 메소드를 지정해야 합니다. 선택적 요청 헤더는 클라이언트가 서버에 추가 정보를 전달할 수 있게 합니다. 예를 들어, Accept-Language: en-US와 같이 사용될 수 있습니다.

HTTP 1.1은 총 8개의 메소드를 정의합니다. 일부 메소드, 특히 DELETE는 서버 상태를 변경할 수 있어 프리페칭에 적합하지 않습니다. GETHEAD 메소드만이 “안전"하다고 간주되며, 데이터를 검색하고 서버 상태에 영향을 미치지 않습니다.

HTTP 응답

HTTP 응답은 상태 코드와 상태 메시지, 선택적인 응답 헤더 및 본문으로 구성됩니다. 상태 코드와 상태 메시지는 요청이 성공했는지 여부를 나타냅니다. 응답 본문에는 서버에서 가져온 자원이 포함되며, 응답 헤더에는 캐싱 전략을 결정하는 데 사용되는 추가 정보가 포함될 수 있습니다.

모바일 앱에서 HTTP 라이브러리의 사용

안드로이드 앱에서는 개발자가 서버와 상호 작용하기 위해 오프 더 쉬플 HTTP 라이브러리를 사용합니다. URLConnectionOkHttp는 가장 인기 있는 두 가지 HTTP 라이브러리입니다.

JAVA
URL url = new URL("http://www.ase.com/post");
URLConnection conn = url.openConnection();
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Accept-Language", "en-US");
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
wr.write("post_data_to_send"); 
wr.flush(); 
InputStream responseStream = conn.getInputStream();
Map headerMap = conn.getHeaderFields();
클릭하여 더 보기
JAVA
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
                       .url("http://www.ase.com/post")
                       .addHeader("Accept-Language", "en-US")
                       .post("post_data_to_send")
                       .build();
Response response = client.newCall(request).execute();
Headers headers = response.headers();
클릭하여 더 보기

결과 및 논의

이 섹션에서는 분석 결과를 설명하며, 이를 통해 9개의 연구 질문에 대해 배운 점을 논의합니다. 테이블은 각 범주별로 분석한 최종 집합인 451개 앱에 대한 정보를 요약합니다.

HTTP 요청의 프리페칭 가능성

우리는 HTTP 요청의 프리페칭 가능성을 평가하기 위해 세 가지 연구 질문을 제시했습니다. 특히 GET 요청은 주요 프리페칭 후보입니다.

  • RQ$_1$ – 앱 당 GET 요청의 수는 얼마인가?

  • RQ$_2$ – 모바일 앱에서 모든 HTTP 요청 중 GET 요청의 백분율은 얼마인가?

  • RQ$_3$GET 요청이 다양한 앱 범주에서 얼마나 흔한가?

우리는 주어진 앱을 인스트루멘테이션하고 테스팅하여 이러한 질문에 답했습니다. 각 앱에서 실행 중에 트리거된 모든 HTTP 요청 중 GET 요청의 총 수와 백분율을 계산했습니다.

HTTP 응답의 캐싱 가능성

우리는 HTTP 응답의 캐싱 가능성을 평가하기 위해 추가로 네 가지 연구 질문을 제시했습니다. 특히, ExpiresCache-Control 헤더의 존재와 그 신뢰성에 초점을 맞추었습니다.

  • RQ$_4$Expires 헤더는 얼마나 흔한가?

  • RQ$_5$Expires 헤더는 신뢰할 수 있는가?

  • RQ$_6$Cache-Control 헤더는 얼마나 흔한가?

  • RQ$_7$Cache-Control 헤더는 신뢰할 수 있는가?

우리는 주어진 앱을 인스트루멘테이션하여 응답 헤더를 캡처하고, 이러한 두 가지 관련 헤더의 발생 횟수를 계산했습니다.

33개 앱 범주에 걸쳐서 앱 당 `GET` 요청의 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 HTTP 요청 중 `GET` 요청의 백분율을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더의 수를 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더의 백분율을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더의 신뢰성 백분율을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Cache-Control` 헤더의 수를 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Cache-Control` 헤더의 백분율을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Cache-Control` 헤더의 신뢰성 백분율을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더의 신뢰성과 `Cache-Control` 헤더의 신뢰성을 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더와 `Cache-Control` 헤더의 존재를 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
33개 앱 범주에 걸쳐서 `Expires` 헤더와 `Cache-Control` 헤더의 신뢰성과 존재를 나타내는 최소값 (아래 가장자리), 최대값 (위쪽 가장자리) 및 평균값 (가운데 점선).
데이터 수집 워크플로. App Profiling, App Instrumentation, App Testing, 그리고 Send GET Requests 구성 요소는 자동화된 작업을 수행합니다.

Reference

이 글은 ArXiv의 공개 자료를 바탕으로 AI가 자동 번역 및 요약한 내용입니다. 저작권은 원저자에게 있으며, 인류 지식 발전에 기여한 연구자분들께 감사드립니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키