본문 바로가기
안드로이드/기타

안드로이드 앱 실행 시간(cold, hot, warm start)

by 나이아카 2021. 10. 20.

 안드로이드 애플리케이션은 결국, 사용자에게 빠르고 편리한 시스템을 제공하는데 목적을 둡니다. 편리한 시스템은 기획에서부터 UI/UX에 대한 고찰을 통해 이루어집니다. 물론 개발 단계에서도 추가적으로 지속적인 수정이 이루어져야 하지만요.

 사실 이때까지 만들어온 애플리케이션은 볼륨이 크지 않아 충분히 실행 속도를 신경써야 할 정도로 느리지 않았습니다. 그저 스플래시 화면에서 대기하고 넘어가는 시간보다 훨씬 더 적은 시간동안 애플리케이션 로딩을 끝마쳤습니다.

 그래서 오늘의 주제는 어떻게 더 효율적으로 애플리케이션의 속도를 올려서 쓸모 있는 애플리케이션을 만들까가 아니라 어느 정도의 속도를 보장해주어야 하는지, 그리고 cold start, hot start, warm start에 대한 정의 정도가 되겠습니다. 결국 유저 친화적인 앱 개발을 위해 이러한 개념과 안드로이드의 권장 속도를 파악하고 그에 대한 고민을 해보는 것을 목표로 하고 있습니다.

https://developer.android.com/topic/performance/vitals/launch-time?hl=ko 

 

앱 시작 시간  |  Android 개발자  |  Android Developers

앱 시작 시간 사용자는 앱이 응답하고 빠르게 로드되기를 기대합니다. 시작 시간이 느린 앱은 이 기대를 충족하지 못하며 사용자에게 실망스러울 수 있습니다. 이러한 종류의 좋지 못한 경험으

developer.android.com


Cold Start

콜드 스타트는 앱이 처음부터 시작하는 것을 말합니다. 콜드 스타트 이전에는 시스템의 프로세스에서 앱의 프로세스를 만들지 않습니다. 기기가 부팅되거나 시스템에서 앱이 종료되고 나서 처음으로 시작되는 경우 등에서 콜드 스타트가 발생합니다. 이 같은 시작 유형에서는 시스템과 앱이 다른 시작 상태보다 더 많은 작업을 실행해야 하므로 시작 시간을 최소화하는 데 큰 어려움이 있습니다.

 cold start는 앱을 최초 실행하는 경우 실행 시간을 의미합니다. 컴퓨터를 기준으로 본다면 컴퓨터를 껐다가 다시 켤 때 OS가 램에 올라가는 그 과정을 의미한다고 볼 수 있습니다. 현재 실행하는 앱이 안드로이드 디바이스 내에 프로세스로 존재하고 있지 않다는 것이죠.

 공식 문서에 의하면 cold start 시점에서는 총 3가지 과정이 일어난다고 합니다.

  1. 앱 로드 및 시작
  2. 시작 직후 앱의 빈 시작 창 표시
  3.  프로세스 만들기.

 각각의 과정은 또 상세한 내용이 있습니다만, 이 글에서는 각 과정에서 어떠한 일들이 일어나는지 다루는 것은 목적이 아니므로 생략하겠습니다.

 

Warm Start

웜 스타트는 콜드 스타트 시 발생하는 작업의 일부 하위 집합을 포함하며 동시에 핫 스타트보다 더 많은 오버헤드를 나타냅니다. 웜 스타트로 간주될 수 있는 상태로는 여러 가지가 있습니다.

  • 사용자가 앱을 종료한 다음 다시 시작합니다.
  • 스템이 메모리에서 앱을 제거한 다음 사용자가 앱을 다시 시작합니다.

 warm start의 예로 설명된 부분입니다. 현재 애플리케이션의 프로세스가 메모리 상에 아직 남아있는지가 cold start와 중요한 차이점이라고 볼 수 있습니다. 애플리케이션을 실행하고 난 후, 장시간 사용되지 않아 프로세스를 안드로이드가 후순위로 밀어낸 후에(그러나 아직 프로세스가 kill 되지 않은 순간) 다시 애플리케이션을 실행할 때 warm start로 인식됩니다.

 

Hot Start

애플리케이션의 핫 스타트는 콜드 스타트보다 훨씬 더 간단하고 오버헤드가 낮습니다. 핫 스타트에서는 시스템이 활동을 포그라운드로 가져오기만 하면 됩니다. 애플리케이션의 모든 활동이 아직 메모리에 있으면 앱에서 객체 초기화, 레이아웃 확장, 렌더링을 반복하지 않아도 됩니다.

 hot start는 warm start보다 더 짧게 애플리케이션을 다시 실행하는 환경을 의미합니다. 잠깐 홈 버튼을 통해 다른 어플에 다녀오거나 잠깐 휴대폰이 꺼진 상황에서 다시 애플리케이션으로 돌아오는 정도의 수준을 의미합니다.

 

 각 start에서 문제라고 여기는 시간은 아래와 같습니다.

  • cold start : 5초 이상
  • warm start : 2초 이상
  • hot start : 1.5초 이상

 앱의 최초 실행시 5초 이상 걸리는 어플은 문제가 있다고 판단하며, 이후에도 2초 이상 걸려 애플리케이션으로 돌아오는 경우와 잠깐 애플리케이션을 벗어났다가 돌아오는 과정이 1.5초 이상 걸리는 경우까지 모두 잘못된 방식으로 판단합니다. 스플래시 화면에서 메인 화면 및 로그인 화면으로 넘어가는 시간이 5초 이상 걸리는 애플리케이션은 사실 사용자들도 문제가 있다고 판단해서 잘 사용하지 않겠지만, 서버와의 통신 문제 때문에 대기하는 시간이 존재해서 생기는 특수한 경우를 제외하고는 항상 제작중인 애플리케이션의 로딩 속도가 느리지 않은지 파악하는 것이 중요합니다.


 굉장히 짧은 게시글입니다. 사실 디바이스 별로 성능이 다르니 같은 뷰를 그리는데도 디바이스별로 시간이 다르게 걸립니다. 이는 결국 성능이 적당히 좋지 않은 스마트폰을 기준으로 start 타임을 판단하며 5초와 2초, 그리고 1.5초가 아니라 사용자의 입장에서 충분히 기다려줄 만한 시간인지에 대한 이슈가 더 크다고 생각합니다. 로딩하는데 4.5초가 걸리는 애플리케이션은 되도록 사람들이 안쓰려고 할 테니까요.

 결국 적당한 사양에서는 cold start 마저도 스스로가 인지할 때 느리지 않은 속도라고 판단할 수 있을 정도로 로딩 시간을 단축시켜야 할 것 같습니다!(다행인지 저는 제가 만든 애플리케이션들의 로딩 속도를 제어해야 할 정도로 볼륨이 큰 앱은 만지지 못했던 것 같습니다. 혹은 그정도로 느리지 않거나.)

댓글