본문 바로가기
Journal & Retrospective

7월 회고

by Juhn with h 2025. 8. 9.

드디어 '빨래하는날' 앱을 출시했다!

잠시 숨을 고르며 기존 자료들을 정리하고 깃헙과 링크드인 프로필을 업데이트했다. 

중순부터 다시 앱을 다듬었다. 외부 타이머 앱을 활용하던 타이머 기능을 앱 내에 구현했다. 시간과 알람, 알림, 소리 등 비동기 기능들 투성이라 생각보다 간단하지 않았다. . 이벤트 흐름, 데이터 흐름에 대해 고찰해보는 좋은 계기가 됐다. 흐름을 통제하기 쉬운 구조를 만들어야 하고, Source of Truth를 하나로 유지하기 위해 reactive한 구조가 되어야 한다는 걸 절감했다.

잘 쓸 일 없던 BroadcastReceiver와 Service를 써보는 좋은 계기가 됐다. 어떤 백그라운드 작업을 어느 컴포넌트에서 해야 하는가를 많이 고민했다. 리시버는 사실상 onReceive() 함수 하나이기에 짧은 작업에 적합하고, Service 역시 짧은 작업에 적합하나 (사용자 몰래 백그라운드 작업을 하지 말라는 구글의 기조에 따라) API 레벨에 따라 호출조차 예외가 나는 경우가 있어 쓰기가 까다롭다(더 연구가 필요하다). Service를 쓰려면 사실상 ForegroundSerivce를 써야 하는데 이는 알림이 수반되는지라 알림이 떠도 괜찮은 작업엔 OK, 백그라운드에서 조용히 처리하고자 하는 작업엔 Not OK다. 그럴 땐 WorkManager 같은 라이브러리를 써야 하는데 단 이 라이브러리들은 정시성을 보장할 수 없다. 정시성을 보장하는 건 AlarmManager 뿐인데 AlarmManager도 알람 퍼미션이 없으면 정확한 시간에 울릴 수 없다. 백그라운드 작업은 테스트도 까다롭고(앱이 실제로 백그라운드에 있는지 확신하기 어렵다. adb 명령어가 가장 정확하지만 언제나 써먹기엔 애매하다) API에 따라 요구사항도 자주 바뀌고 대응 방식도 복잡해서 구현이 쉽지 않다. 

알람 앱 쉽게만 봤는데 생각보다 쉽지 않았고 도전적인 과제가 많았다. 앱 내에 구현할 기회가 생겨서 좋았다.

구현에 우선순위가 밀렸던 예외처리와 테스트도 추가했다. 기상청 API가 정말 정말 불안정해서(열에 둘셋은 에러를 돌려주는 어메이징한 API. 예외처리 연습하고 싶은 분들은 기상청 API 강추) 툭하면 튕기고 있었는데 밀린 숙제를 끝냈다. API 응답이 성공/실패일 때 DTO로 잘 변환되는지 체크하는 테스트를 추가했다. 다만 코드가 항상 정적인 결과를 내고 있어서 별로 유용하지 않았다. 의미있는 테스트가 이뤄질 수 있도록 해야 하고 그러려면 본문 코드도 그걸 염두에 두고 짜야 한다. 점진적으로 개선시켜 나가야겠다.

디자인도 이곳저곳 다듬어서 1.1 버전으로 배포했다. 

기록적인 더위로 고생스럽고 너무 실내 생활만 해서 건강하지 못한 한 달이었는데 그래도 앱에 유용한 기능을 추가할 수 있었고 새로이 배운 영역이 많아서 성취감이 있었다. 8월이 된 지도 벌써 아흐레다. 앱 기능은 다소 안정화 됐기에 서버를 만들고 있다. 취준생 때 php로 만들어본 이래로 오랜만에 다시 다뤄본다. 곧 있으면 방통대 학기도 다시 시작된다. 프로젝트에 적용시키고자 머신러닝/딥러닝 과목을 신청해뒀다. 그러려면 또한 서버가 필요하기에 서버 구현에는 적기인 것 같다. 프레임워크는 FastAPI를 사용할 것 같고 개발 환경과 서버 환경, CI/CD를 어떻게 구성할 지를 고민 중이다. 새로운 동네를 거니는 건 즐거운 일. 8월이 가고 나면 다시 한번 돌아보도록 하겠다.