개발 5개발 기록 2개발 노트 1서버 1
개발 기록

목록만 긁는 크롤러로는 '신상'을 판정할 수 없었다

상품 목록 페이지만 수집하던 구조를 상세 스펙(실측·소재·세탁) 직접 추출로 바꾸고, 신상 판정 기준을 다시 세운 기록. 요청 수가 곱절로 늘어나는 걸 감수한 이유.

푸시 알림은 보내는 기능이 아니라 관측하는 기능이었다

푸시 리텐션 개편 이후 발송 멈춤, 통계 불일치, 중복 발송, 딥링크 오작동을 차례로 잡으면서 알게 된 것들. 1인 개발자가 푸시를 붙일 때 미리 만들어둬야 할 최소한의 계기판 정리.

레슨 신청만 누르면 로그아웃되던 버그 — 범인은 411이었다

토큰 만료로 보였던 강제 로그아웃의 실제 원인은 Content-Length가 빠진 요청이 만든 411 응답이었다. 원인 규명 과정과 수정 방식을 정리했다.

12일 동안 멈춰 있던 크론을 발견한 날

개인 서버의 파일 동기화가 이상해 점검했더니 정기 작업이 12일째 돌지 않고 있었다. 원인과 재발 방지.

새 기능 하나 없이 일주일을 유지보수에 썼다

혼자 앱을 만들면서 한 주 내내 신규 기능 없이 크롤러와 푸시 수정만 했다. 조용히 실패하는 기능을 먼저 잡은 이유와, 뭘 먼저 고칠지 정할 때 쓴 세 가지 질문을 정리했다.

앱오픈 광고가 운영에서만 안 나오던 이유

코드는 들어가 있는데 실제 노출이 0이었다. 테스트 유닛과 실 유닛의 차이, 그리고 배포 전에 확인했어야 할 것들.

증분 크롤이 첫 카테고리만 보고 멈춘 이유

신상 피드가 비던 문제를 추적해보니 종료 판정 범위가 잘못돼 있었다. 카테고리 단위와 전체 순회 단위의 차이.

푸시가 두 번 가던 이유 — 더블클릭과 크론이 만든 경합

같은 대상에게 푸시가 중복 발송되던 문제를 재현하고 두 경로를 차단한 기록. 레이스 컨디션과 재시도 로직을 어떻게 정리했는지.

Play Billing 8 마감일에 맞춰 결제 모듈을 올린 기록

쓰던 라이브러리가 Billing 8을 지원하지 않는 상황에서 마감일까지 결제 모듈을 올린 과정. 버전 매트릭스 확인부터 검증까지.

peppercode 개발 노트