콘텐츠로 건너뛰기

안드로이드 포그라운드 서비스를 활용한 메모리부족으로 앱 종료되는 현상 개선

안드로이드 포그라운드 서비스를 활용한 메모리부족으로 앱 종료되는 상황 개선

엣지는 이제 MS의 기본 브라우저로 많이 사용하고 있습니다. 하지만 신경 써서 보지 않으면 놓치는 게 하나 있습니다. 바로 엣지를 종료해도 백그라운드에서 실행되고 있다는 것입니다. 사용 시 정상 종료를 해도 작업관리자에서 확인하시면 백그라운드에서 실행되고 있으면서 PC자원을 사용하고 있는 것을 확인할 수 있습니다. 지금은 PC성능이 좋아 크게 못 느끼지만 조금이라도 자원을 아끼기 위해서는 백그라운드에서 실행 중인 엣지를 종료해야 합니다.

이번에는 엣지 백그라운드 실행 예방 하는 방법에 대하여 공유드립니다.


메모리 최적화
메모리 최적화

메모리 최적화

개발자로서 메모리 사용량 최적화는 필요한 작업입니다. 하지만 하드웨어 스펙과 플랫폼의 개선으로 인해 이런 노력을 예전만큼하지 않고 점점 잊혀져 간 것 같다. 저거부 디바이스에서 앱이 백그라운드에서 종료되는 현상이 확인된 후 잊고 있었던 메모리 최적화의 중요성을 다시 느끼게 되었습니다. Flutter 환경에서의 메모리 사용량을 줄이기 위해, 메모리 캐시 제거, 백그라운드 화면 제거, 프리로딩된 캐시 제거 등 여러가지 처리를 수행하였습니다.

하지만 현상은 동일하게 발생하였습니다. 나름 최적화 처리를 통해 메모리 사용량은 줄였지만, 백그라운드에 함께 존재하는 앱들중 다른 앱이 더 적은 메모리를 사용하고 있거나, 새롭게 실행되는 앱이 너무 많은 메모리를 필요하게 될 경우, 여전히 체계는 메모리 확보를 위해 비교적 사크기가 높은 우리앱을 종료시킨으로 보입니다.

실행 앱 강제 종료
실행 앱 강제 종료

실행 앱 강제 종료

일반적으로 운영체제에서 종료 명령은 종료 시 할당된 리소스를 순차적으로 해제하는 처리를 거치며 안전하게 종료합니다. 반면 강제종료는 정상적인 방법으로 프로세스가 종료되지 않는 경우 즉시 프로세스를 종료시켜 버리는 것을 의미합니다. 만약 앱이 무한로딩에 걸렸거나, 그냥 종료하면 꺼지지 않는 경우엔 강제 종료를 진행합니다. option command esc 단축키를 누르시면 응용 프로그램 강제 종료 창이 나타납니다.

여기에서 강제 종료를 희망하는 앱을 선택하고 오른쪽 하단의 강제 종료 버튼을 누르시면 됩니다. 만약 무한로딩 중인 프로그램이면 응답없음이라는 메시지가 표시될 겁니다. 맥에서는 활성 상태 보기라는 앱으로 실행 중인 프로세스의 CPU, 메모리 등의 리소스 상황을 보여줍니다.

효과 및 확대

포그라운드 서비스를 이용한 최적화모드는 우리동네GS 앱에 기본기능으로 탑재되었고, 특히 안드로이드9 이하 버전인 경우 디폴드로 활성화하여 앱종료되는 현상을 미연에 방지하고 있습니다. 우리동네GS 앱 오픈이후 2022년말부터 2023년초 까지 지속적으로 인입된 이슈들은 더이상 리포트되지 않고 있습니다. 이 기능은 앞으로 더 많은 서비스에 증가 적용할 예정입니다.

박성화 | 디지털서비스본부 > 모바일FO팀우리동네GS / GS 프레시몰 앱 개발을 담당프론트엔드 새로운 기술에 대한 관심이 많습니다.

AppDelegate

앱의 가장 필요한 데이터 구조를 초기화하는 것 앱의 scene을 환경설정Configuration하는 것 앱 밖에서 발생한 알림배터리 부족, 다운로드 완료 등에 다루는 것 명백한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 다루는 것. 애플 푸쉬 공지 서비스와 같이 실행 시 필요한 모든 서비스를 등록하는 것. process변화에 호출되고 SceneDelegate는 UI적인 요소를 담당합니다.

포그라운드 서비스 셋팅

포그라운드 서비스를 실행시켜도 실제 서비스에서 별도 작업은 하지 않고, 실행만 시켜놓을꺼라 적용이 쉽고 단순한 라이브러리로 선택하였습니다. 라이브러리 AndroidManifest.xml 포그라운드 서비스 초기화 코드 서비스 실행종료 코드 안드로이드 9 버전에서만 보이는 설정 메뉴 추가 우리동네GS 최적화 모드 실행된 모습 포그라운드 서비스 실행후 앱 종료되는 현상은 더 이상 발생하지 않았습니다. 역시 예상한 것과 같이 활성화된 앱과 동일하게 취급되어 효과가 있었던 것으로 보입니다.

그래서 좀 더 열악한 환경에서 테스트 해보기로 하였고, 내가 생각해도 이건 심합니다. 싶을 정도의 테스트 생태계를 조성하여 테스트를 진행하였습니다. 역시 100% 막지는 못하는것 같다.

SceneDelegate

자주 묻는 질문

메모리 최적화

개발자로서 메모리 사용량 최적화는 필요한 작업입니다. 궁금한 사항은 본문을 참고하시기 바랍니다.

실행 앱 강제 종료

일반적으로 운영체제에서 종료 명령은 종료 시 할당된 리소스를 순차적으로 해제하는 처리를 거치며 안전하게 종료합니다. 궁금한 내용은 본문을 참고하시기 바랍니다.

효과 및 확대

포그라운드 서비스를 이용한 최적화모드는 우리동네GS 앱에 기본기능으로 탑재되었고, 특히 안드로이드9 이하 버전인 경우 디폴드로 활성화하여 앱종료되는 현상을 미연에 방지하고 있습니다. 자세한 내용은 본문을 참고하세요.