08
27

'스마트폰에서 가장 발전이 더딘 부분이 어디냐'는 질문을 듣는다면 아마 대부분은 배터리를 많이 뽑으실 것 같습니다.

 

카메라는 100배 줌으로 달을 찍을만큼 눈부시게 발전했는데, 배터리 시간은 이전에 비해 100배 길어지지 않았으니까요.

 

구글과 애플은 하드웨어적인 한계를 극복하기 위해 소프트웨어를 적극적으로 사용합니다.

구글의 카메라 처리 기술은 말 안해도 아실테고, 애플도 램 압축 기술을 통해서 적은 램 용량을 극복하고 있죠.

 

돈 조금만 더 들여서 램을 늘리는 게 훨씬 나을 것 같긴 한데... 삼성도 마찬가지로 S21 램 용량 너프한 걸 보면 램 짜게 주는 게 세계적인 추세인가 싶기도 하고...

 

어쨌든, 배터리의 경우엔 하드웨어적으로 눈에 띄는 발전이 없다보니 소프트웨어를 발전시키는 방법 외엔 딱히 별 다른 묘수가 없습니다.

 

오늘은 안드로이드에서 소프트웨어로 어떻게 배터리를 아끼는가에 대한 주제로 글을 써보려고 합니다.

 

구글과 삼성이 알아서 다 해주니 소비자인 우리가 굳이 알 필요는 없겠지만, 알아두면 유용한 글이 되지 않을까... 하는 망상에 빠져봅니다.

 

내 폰이 어떻게 돌아가는지 알아서 나쁠 건 하나도 없으니까요.

 

 

1. Project Volta

 

7년 전, 안드로이드 5.0이 출시되면서 공개된 개념입니다.

이름 그대로 배터리를 아끼기 위해 구글이 기획한 프로젝트였는데요, 그런데 프로젝트 볼타의 경우 개발자들을 위한 API 공개에 가까워서 일반 사용자들이 체감하기가 상당히 힘들었습니다.

 

유저 입장에서 눈에 띄는 변화는 전혀 없었다고 보시면 됩니다. 구글이 롤리팝부터 배터리에 본격적으로 신경을 쓰기 시작했다 정도로만 알고 넘어가도 괜찮을 것 같습니다.

 

 

2. Doze

 

프로젝트 볼타 공개 1년 뒤, 안드로이드 6.0부터 Doze(잠자기)와 App Standby(앱 대기) 기능이 도입되었습니다.

 

특히 잠자기 모드의 경우 이전보다 30% 정도의 배터리를 아낄만큼의 획기적인 기술이었는데요, 이 잠자기 모드 때문에 사용자는 웃었지만 개발자들은 우는 상황이 많이 벌어졌습니다.

배터리를 크게 아낄 수 있는만큼, 앱 기능에는 제한이 걸리거나 개발자가 의도한 상황에서 벗어날 수 있었기 때문이죠.

 

사용자가 휴대폰을 만지지 않으면 사실 휴대폰도 일을 열심히 할 필요는 없습니다. 어차피 사용을 안하는데, 휴대폰이 열심히 일할 필요는 없죠.

 

잠자기 모드는 이름 그대로 사용자가 휴대폰을 사용하지 않는다면, 휴대폰이 잠을 잘 수 있게 해주는 기능입니다.

 

우리가 잠을 잘 때 일을 하나요? 아니죠. 심장이 뛰고 숨은 쉬는 등의 생명활동에 꼭 필요한 기능만 유지한채 인생의 고뇌를 던지고 휴식을 취합니다.

 

안드로이드의 잠자기 모드도 마찬가지입니다. 휴대폰이 유지되는데 필요한 필수 활동을 제외한 나머지 활동은 하지 않습니다.

 

안드로이드 7.0에서 Doze 모드는 2단계로 세분화 되었습니다.

 

인간에게 깊은 수면과 얕은 수면이 존재하듯이, 안드로이드에도 깊은 잠자기 모드와 얕은 잠자기 모드*가 존재하게 된 것이죠.

 

* 공식적인 명칭은 Doze와 Doze on-the-go입니다. 얕은 잠자기 모드와 깊은 잠자기 모드는 2가지 상태를 구분하기 위해 제가 임의로 붙인 이름입니다.

 

각 모드에 대해 간단하게 설명 드리고 잠자기 모드에 대한 설명은 마치겠습니다.

 

 

<얕은 잠자기 모드(Doze on-the-go)>

디바이스가 충전 중이지 않은 상태이며 화면이 꺼져 있는 채로 일정시간 지나면 얕은 잠자기 모드로 진입하게 됩니다. 이 경우 네트워크에 접근할 수 없으며 동기화나 작업이 미뤄집니다.

 

<깊은 잠자기 모드(Doze)>

디바이스가 충전 중이지 않은 상태이며 화면이 꺼져 있고 + 디바이스가 움직이지 않는 상황에서 일정시간이 지나면 깊은 잠자기 모드로 진입하게 됩니다.

 

 

쉽게 말하면 휴대폰의 화면을 끈 상태로 책상 위에 올려 놓으면 깊은 잠자기 모드가 실행됩니다.

만약 화면을 끈 상태로 들고 다니면 얕은 잠자기 모드가 실행되겠죠?

 

깊은 잠자기 모드에서는 얕은 잠자기 모드의 제한에 더불어 WakeLock, 알람, GPS, 와아파이 스캔(검색) 등의 작업들이 제한됩니다.

 

휴대폰이 잠을 자는 건 좋지만, 말 그대로 자기만 한다면 정상적인 데이터 수신이 불가능하겠죠?

그래서 Doze 모드가 활성화/비활성화를 반복하게 됩니다. 그런데 Doze 모드가 활성화 되는 시간이 점점 길어집니다.

 

상황을 예시로 들자면,

 

5분동안 Doze 모드를 실행하고 잠깐 잠에서 깨어나 미뤘던 동기화나 작업을 한꺼번에 진행합니다.

동기화를 마치면 다시 Doze 모드로 들어갑니다.

이번엔 5분이 아니라 7분 뒤에 깨어나 동기화를 실행합니다.

동기화를 마치면 다시 Doze 모드로 들어갑니다.

이번엔 15분 뒤에 깨어나 동기화를 실행합니다.

.

.

.

위 예시를 보면 Doze 모드가 5분, 7분, 15분 동안 실행되는 것 보이시나요?

이렇게 잠자기 모드는 활성화되는 시간이 점점 길어집니다.

 

 

3. App Standby Buckets

 

App Standby(앱 대기) 기능도 안드로이드 6.0부터 도입되었습니다. 그러다가 안드로이드 9에서 더 발전된 형태인 App Standby Buckets이 등장했습니다.

 

위 움짤에서 보실 수 있듯이, 우리가 흔히 알고 있던 Adaptive Battery가 App Standby Buckets였어요.

 

기존 앱 대기 기능은 앱을 3단계로 나누어서 관리를 하였는데, 앱 대기 버킷은 5단계로 세분화하여 배터리를 관리하는 기능입니다.

마치 사회적 거리두기가 3단계에서 5단계로 세분화된 것처럼요.

 

각 단계별로 간략하게 설명 드리겠습니다.

 

 

Active 버킷

현재 사용 중인 앱은 모두 Active 버킷에 들어가서 배터리가 관리됩니다.

Active 버킷 안에 있는 앱은 그 어떠한 제한도 받지 않고 배터리를 사용할 수 있습니다.

 

Working set 버킷

현재 사용 중이진 않지만, 사용 빈도가 높은 앱들은 Working set 버킷에 들어갑니다.

예를 들면, 자주 사용하는 카카오톡, 인스타그램, 카메라 등 주로 SNS 관련 앱들이 Working set 버킷 안에 있을 확률이 매우 높습니다.

 

Working set 버킷 안의 앱들은 작업(Job)이 2시간까지 미뤄질 수 있고, 알람도 6분까지 미뤄질 수 있습니다.

 

Frequent 버킷

자주 사용하진 않지만, 정기적으로 사용하는 앱인 경우 Frequent 버킷 안에 들어가게 됩니다.

매일 아침 뉴스 앱을 통해 뉴스를 본다면 그 뉴스 앱은 Frequent 버킷 안에 들어가겠죠.

혹은 매일 저녁마다 삼성 헬스 앱을 켜고 운동을 한다면, 삼성 헬스 앱 역시 Frequent 버킷 안에 들어갑니다.

 

Frequent 버킷 안의 앱들은 작업은 최대 8시간, 알람은 30분까지 미뤄질 수 있습니다.

높은 우선순위를 가진 FCM* 작업 역시 하루에 10개 밖에 받지 못합니다.

 

* FCM은 클라우드 메시징 서비스로, 주로 네트워크를 통한 실시간 작업을 할 때 많이 사용합니다.

예를 들면, CheckFirm의 경우 서버 값이 변경되면 알리미 기능을 통해 새로운 펌웨어 알림을 내보내는데, 이 알리미가 FCM을 기반으로 한 기능입니다.

 

Rare 버킷

자주 사용하지 않는 앱은 Rare 버킷 안에 들어갑니다.

지난 1년동안 코로나 때문에 해외여행이 불가능해졌으니 대한항공 앱과 같은 해외여행 관련 앱들이 Rare 버킷 안에 들어가 있겠네요.

 

Rare 버킷 안의 앱들은 작업이 최대 24시간, 알람은 2시간까지 미뤄질 수 있습니다.

높은 우선순위 FCM은 하루에 5개까지로 제한이 되고요.

 

Never 버킷

설치를 했지만 한번도 실행하지 않은 앱은 Never 버킷에 들어갑니다.

슬픈 얘기지만, 빅스비 같은 경우 Never 버킷에 들어가 있을 수도 있습니다. 갤럭시 스마트폰을 사고 빅스비를 한번도 이용하지 않는 사람들도 많거든요.

 

Never 버킷 안의 앱들은 아주 강한 제한을 받는다고 합니다. '아주 강한 제한'이 어느정도의 수위인지는 공식 문서에도 나오지 않네요.

어차피 앱을 실행하지 않았으니 엄청난 제한이 걸려 있어도 사용자 입장에서는 상관이 없겠죠.

 

 

재밌는 건, 우리가 앱 대기 버킷 내부를 들여다볼 수 있습니다.

 

개발자 옵션에서 어떤 앱이 어떤 버킷에 있는지 확인도 가능하고, 직접 설정도 가능합니다.

 

 

4. 절전모드

 

우리에게 가장 익숙한 배터리 관리 프로그램은 절전모드겠죠. 구글에 따르면 절전모드는 안드로이드 9에서 많이 향상되었다고 합니다.

 

정확한 절전모드의 동작은 제조사가 결정하게 됩니다. 순정 안드로이드를 기준으로 말씀드리면 다음과 같이 발전하였습니다.

 

  • 이전보다 훨씬 적극적으로 앱 대기 버킷에 앱을 집어넣습니다.
  • 백그라운드 실행을 모든 앱에 대해 제한합니다.
  • 화면이 꺼지면 위치 서비스를 비활성화 할 수 있습니다.
  • 백그라운드 앱에는 네트워크 엑세스 권한을 주지 않습니다.

 

삼성의 경우 절전모드에서 화면 밝기를 줄인다든지, CPU 성능을 70%로 제한한다든지 등의 추가적인 동작이 들어갈 수도 있는거고, 위에 적힌 4가지를 변형시켜서 적용할 수도 있습니다.

 

절전모드를 어떤식으로 구성하냐는 제조사의 마음입니다.

제조사마다 다른 부분이 많아서 절전모드와 관련된 내용은 이만 마치고 다음으로 넘어가겠습니다.

 

 

5. App Restrictions

 

그 어느 정책보다도 강력한 정책입니다.

이름 그대로 앱을 제한해버리는 기능인데요, 제한되는 앱은 그 어떤 것도 할 수 없습니다.

 

특정 앱이 너무 많은 배터리를 소모하면 OS가 감지하여 자동으로 제한을 걸어버립니다.

혹은 사용자가 제한할 앱을 직접 지정을 할 수도 있고요.

 

App Restrictions의 경우 다른 배터리 정책과는 다르게 충전기가 연결되어도 제한을 걸어버립니다. 바로 이 점 때문에 강력한 정책이라는 별명이 붙습니다.

 

 

6. 배터리 학습

 

원래는 글을 여기서 마치려고 하였으나, S21이 출시된 이후 배터리 학습에 대한 글이 많이 올라오더라고요.

 

지금은 초기 학습 기간이 대부분 지나서 더 이상 올라오지 않고 있지만, 알아둬서 나쁠 것 없다는 마인드로 배터리 학습에 대한 내용도 추가하려고 합니다.

 

배터리 학습에 대해서 몇가지를 멤버스 문의하기 기능으로 여쭈어보았고, 그에 대한 답변들을 공유하는 식으로 진행하겠습니다.

 

* 정식 명칭은 사용 패턴 학습인데, 본 게시글에서는 편의를 위해 배터리 학습이라고 하겠습니다.

 

 

Q. 배터리 학습이란?

A. 배터리의 방전 데이터를 학습하여, 평균 방전 시간을 바탕으로 남은 사용 시간을 학습하는 기능입니다.

 

더 자세히 묻고 싶었는데, 이 이상으로 답변해주시기 어렵다고 합니다. '방전 데이터'가 무엇인지 궁금한데... ㅜㅜ

 

사실 처음에 배터리 학습이라는 단어를 들었을 때

'폰이 배터리 사용량을 학습해서 스스로 사용량을 조절하는 최신 AI 기술인가?!'라는 생각을 했는데,

그냥 남은 시간을 더 잘 계산해주는 역할을 하는 기능이더라고요.

 

다시 말하면, 배터리 학습은 배터리 관리와는 무관한 기능입니다.

배터리 학습 때문에 배터리가 덜 닳는다거나... 뭐 이런 건 아닙니다.

 

 

Q. 배터리 학습한 내용을 초기화 하려면?

A. 현재 공식적인 초기화를 제공하지 않습니다.

 

배터리 학습 내용을 초기화 할 필요가 없으니 초기화 기능을 제공하지 않는 거겠죠?

그래도 굳이 초기화를 하고 싶으시다면 디바이스 케어 앱의 데이터를 삭제해주시면 됩니다. (정보 제공해주신 종원님께 감사드립니다!)

 

 

Q. 배터리 학습은 초기 1회에만 실행하는가?

A. 부팅 이후 계속해서 학습합니다.

 

다시 말하면, 배터리 학습은 휴대폰이 켜져 있는 이상 평생한다는 뜻이겠죠.

배움에는 끝이 없다는 말이 있듯이, 배터리 학습에도 끝이 없습니다.

 

 

Q. 배터리 학습 중에는 배터리가 빨리 닳는 것이 맞느냐?

A. 배터리 학습 자체는 상주 프로세스에서 실행되기 때문에 시스템 부하가 크지 않습니다.

 

저는 이게 제일 궁금했었어요. 배터리 글 댓글들 천천히 읽어보면 배터리 학습 기간 중에는 배터리가 빨리 닳는 게 맞다는 댓글들이 대부분이더라고요.

 

결론부터 말씀 드리면 배터리 학습 중에는 배터리가 빨리 닳긴 합니다.

그런데 배터리 학습 때문에 배터리가 빨리 닳는 게 아니에요.

 

그럼에도 불구하고 우리가 배터리 학습 중에 배터리가 빨리 닳는다고 느끼는 이유는 우연이라고 봐야 할 것 같아요.

배터리 학습 중에 사용자가 휴대폰을 많이 쓰기 때문에 배터리가 빨리 닳는 것이죠.

 

배터리 학습 중 == 휴대폰을 산지 얼마 안됐을 때인데,

휴대폰을 사면 초기에 앱도 깔고 백업했던 것들 불러오고, 깔린 앱들은 동기화를 하고...

이런 무거운 작업들이 많이 실행되다 보니 우연히도 배터리 학습 중에 배터리가 빨리 닳을 수 밖에요.

 

그러면 역의 경우는 어떨까요?

배터리 초기 학습이 끝나면 배터리가 천천히 닳을까요?

 

얘도 마찬가지로 맞긴 맞는데, 우연일 뿐입니다.

 

배터리 초기 학습이 끝났을 때 == 웬만한 세팅이 완료되었을 때라서

무거운 작업은 많이 없기도 하고, 위에서 열심히 설명해드린 안드로이드의 배터리 관리 덕분에 배터리 사용 시간이 늘어나긴 합니다.

 

다시 한번 강조하지만, 배터리 학습은 배터리 소모와는 관계 없다는 것.

배터리 학습 때문에 배터리가 빨리 닳거나 늦게 닳지는 않는다는 것이죠.

 

 

오늘 제가 준비한 내용은 여기까지 입니다.

주제도 재미없고, 글도 길어서 읽으시는데 많은 어려움이 있었을 것으로 예상됩니다.

그럼에도 불구하고 여기까지 읽어주신 모든 분께 감사의 인사를 올립니다.

 

https://r1.community.samsung.com/t5/기타/안드로이드와-배터리/td-p/9103887

COMMENT
 

인기 글


최근 글