카테고리 없음

[트러블슈팅] Log로는 파악할 수 없었던 Timer 관련 버그

끄공 2023. 8. 11. 18:43

음악 어플처럼 백그라운드에서 작업을 계속해서 돌릴 경우 조치를 취해주어야 한다는 것은 알고 있었다. 그런데 Runnect 서비스에서 처음 Timer 기능을 구현할 때 다른 앱으로 전환해도 log가 잘 찍히길래 알아서 잘 되는 줄 알고 별다른 작업을 해주지 않았다. 앱을 일정 시간 동안 백그라운드(다른 앱, 화면 잠금)에 켜놔도 앱이 안 죽기도 했다.

 

그런데 앱이 죽지는 않는데 가끔씩 앱에 재접속 했을 때 돌려놨던 Timer가 초기화 된다거나 1시간을 돌렸는데 40분으로 반영이 되어있다는 등 비정상적인 동작이 있다는 보고를 받았다. 

 

백그라운드 관련 조치를 취해주지 않았던 것이 원인임을 짐작하는 게 어렵지 않았다. 그래서 Timer를 생성하고 돌리는 logic을 Service를 생성해서 분리시켜주었다. 이때 백그라운드에서 계속 도는만큼 자칫하면 큰 리소스 낭비가 생길 수 있겠다는 생각에 생명주기를 신경 쓰면서 작업했다. 또 혹시 모를 누수를 파악하기 위해 log도 필수로 작성해주었다. 

 

Service를 활용하니 Timer를 백그라운드에서 장시간 돌려도 이전과 같은 문제점이 발견되지 않았다. 

 

앱이 죽는다면 수집된 log로 원인을 파악해볼 수 있었겠지만 이번 건은 앱이 죽지 않고 처음에 log도 잘 찍혔던 만큼 사용자로부터 feedback을 받지 않았다면 파악을 못했을 이슈였다. 소통의 창구를 열어놓고 꾸준히 모니터링하는 것의 중요성을 느꼈다. 또한 백그라운드에서 장시간 처리해야 하는 작업이 있을 경우 반드시 조치를 취해주어야 한다는 점도 느낄 수 있었다.