도구를 고르는 법 — 두 번 실패하며 배운 것
데이터에 맞는 타입을 고르면 충분할까? 위경도로 거리를 직접 계산한 실패로 '먼저 찾아보는 습관'을 얻었지만, 다음 프로젝트에서 그래프 DB를 고르며 그것만으로는 부족하다는 걸 알았다.
데이터에 맞는 타입을 고르면 충분할까? 위경도로 거리를 직접 계산한 실패로 '먼저 찾아보는 습관'을 얻었지만, 다음 프로젝트에서 그래프 DB를 고르며 그것만으로는 부족하다는 걸 알았다.
락 없이 동시 요청을 흘렸더니 100장짜리 쿠폰이 999장 나갔다. synchronized, DB 행 락, Redis 분산 락까지 다섯 단계를 직접 짜고 측정한 뒤, 가장 단순한 곳으로 한 칸 내려온 기록.
심사 리젝 두 번을 넘어 드디어 출시. 백그라운드 오디오 옵션, iPad 스크린샷 불일치 등 Apple이 알려준 '사용자 중심' 시각을 정리한 기록.
남은 버그와 Warning을 정리하고 Crashlytics·VoiceOver를 붙여 v1.0.0을 마무리했다. 앱스토어 메타데이터를 준비해 드디어 심사를 제출한 주.
버그 하나를 고치자 영속성·UI·정렬·모델 구조까지 연쇄로 흔들렸다. 마틴 파울러의 Parallel Change로 모델 속성을 안전하게 바꾼 과정.
단위 테스트는 통과했지만 실기기에선 안 울리는 알림. 실기기에서 직접 가설을 세워 검증하며 '제목·본문 중 하나는 필수' 같은 정책을 확정하고 알람 기능을 마무리한 주.
앱의 핵심인 알람 기능에 도전했다 삽질의 연속. 실기기에서 소리가 안 난 원인은 애플워치와 iOS Suspended 상태였다. '완벽 대신 완성'을 모토로 로컬 알림 MVP를 택한 기록.
정책이 바뀔 때마다 코드를 고치는 게 잦아져 구조를 리팩토링했다. View 로직을 ViewModel로, 완료 처리를 Handler로 분리하며 SRP의 필요성을 몸으로 익힌 한 주.
AI가 짜주는 대로 따라가다 보니 세부 설계가 비었다. 소리·진동 on/off 설정 책임을 UserSettings에서 TimerData로 옮기며, 설계 주도권은 개발자에게 있다는 걸 체감한 한 주의 기록.
스프링 컨테이너가 빈을 생성한 뒤 빈 후처리기가 포인트컷에 해당하는 빈을 프록시로 바꿔치기하고, 메서드 호출을 가로채 횡단 관심사를 적용하는 런타임 위빙 과정.