예약해 둔 AI 작업이 끝나기 직전에 멈췄더니, 결과가 통째로 사라졌다

과외 준비를 하다 보면 매일 반복하는 잡무가 꼭 생겨요. 저는 그런 걸 AI에게 예약 작업으로 맡겨두는 재미에 빠졌습니다. 정해진 시각에 알아서 데이터를 모으고 요약해서 저한테 보내주게요. 그런데 어느 날, 그 예약 작업이 데이터를 거의 다 모아놓고 마지막 조립 단계에서 멈췄어요. 그리고 저에게 도착한 결과물은… 아무것도 없었습니다. 절반이라도 남을 줄 알았는데 0이었어요. 이 오답노트는 “왜 부분 … 더 읽기

AI 토큰이 아침부터 98% 사라졌다 — 범인은 내가 의심한 게 아니었다

저는 수학 과외를 하면서 잡무를 AI로 자동화해보고 있어요. 그러다 보니 AI 사용량 한도(하루에 쓸 수 있는 토큰의 상한 — 토큰은 AI가 읽고 쓰는 글자 수의 단위예요)를 늘 신경 쓰게 됐죠. 그런데 어느 날 아침, 컴퓨터를 켜자마자 오늘치 토큰의 98%가 이미 사라져 있었어요. 저는 아직 아무 작업도 안 했는데 말이죠. 이 오답노트는 그 범인을 엉뚱한 데서 … 더 읽기

사이트 점검기가 멀쩡한 블로그를 ‘전체 다운’이라 외친 이유 (자기 글에 속은 오탐)

swp 저는 수학 과외를 하다가, 학생들 오답을 정리하던 습관 그대로 제 코딩 오답을 모으는 블로그를 만들고 있어요. 그래서 이 블로그엔 “사이트가 다운됐다”, “치명적인 오류가 났다” 같은 실패담이 잔뜩 쌓입니다. 그런데 어느 날, 그 실패담을 지키려고 만든 자동 점검 코드가 정작 멀쩡한 블로그를 ‘전체 다운’이라고 외치는 황당한 일이 벌어졌어요. 범인은 놀랍게도 저 자신이었습니다. 새 글을 올리고 … 더 읽기

매일 자동으로 도는 줄 알았던 작업이, 사실 한 번도 안 돌고 있었다

저는 수학쌤이 코딩에 도전하는 이야기를 블로그에 올리는데, 그 발행 과정을 조금씩 자동화해 두고 있어요. 그중 하나가 “매일 밤 우리 콘텐츠 상태를 한 파일로 정리해두는 작업”이었습니다. 어떤 글이 발행됐고, 예약은 어떻게 걸렸고, 소재는 뭐가 남았는지를 매일 밤 갱신해두는 거죠. 저는 이게 매일 알아서 도는 줄 알고 몇 주를 지냈어요. 그런데 어느 날 이상한 걸 발견했습니다. 분명 … 더 읽기

결제하자마자 앱이 죽으면 엉뚱한 이름으로 돈이 나갔다 — 버그를 ‘고치지 않기로’ 한 이유

제가 만든 안드로이드 앱은 유료 결제 한 번으로 이름 후보를 만들어줍니다. 사용자는 성씨·성별·생일을 입력하고 결제한 뒤 결과를 받죠. 그런데 아주 드문 순간에 등골 서늘한 사고가 났어요. 결제를 막 끝낸 직후 앱이 한 번 죽으면, 사용자가 입력하지도 않은 엉뚱한 정보로 돈이 소비되고 있었습니다. (같은 앱에서 결제 로직 때문에 진땀 뺀 이야기는 결제 한 번에 유료가 무한으로 … 더 읽기

아이콘이 이름마다 다르게 잘렸다 — 범인은 Compose Row의 weight 한 줄

버그 중에 제일 사람 헷갈리게 하는 게 “어떤 건 되고 어떤 건 안 되는” 종류예요. 전부 안 되면 차라리 원인 찾기가 쉬운데, 들쭉날쭉하면 “내가 뭘 잘못 봤나” 싶어지죠. 제 안드로이드 앱의 이름 추천 카드가 딱 그랬습니다. 카드 오른쪽에 공유·저장 아이콘을 뒀는데, 어떤 이름엔 둘 다 보이고, 어떤 이름엔 공유만, 어떤 이름엔 아주 작게, 어떤 이름엔 … 더 읽기

결제하자마자 빨간 timeout이 떴다 — 한 번에 다 만들려다 생긴 일

앱에서 제일 터지면 안 되는 순간이 언제일까요? 저는 사용자가 막 결제를 끝낸 직후라고 생각해요. 돈을 냈는데 결과물이 안 나오면, 그건 단순한 버그가 아니라 신뢰가 깨지는 사고니까요. 그런데 제 안드로이드 앱이 딱 거기서 터졌습니다. 프리미엄 결제 직후 이름 10개 생성을 눌렀더니, 잠시 뒤 폼에 빨간 글씨로 timeout이 떴어요. 등골이 서늘했죠. 더 얄궂었던 건, 무료 기능은 멀쩡했다는 … 더 읽기

앱을 지웠다 재설치했는데 첫 무료부터 페이월이 떴다 — 범인은 안드로이드 Auto Backup

제 안드로이드 앱은 평생 딱 1회 무료 작명을 줍니다. 그 한 번을 쓰고 나면 유료고요. 그래서 “앱을 지웠다 다시 깔면 무료 1회가 리셋된다”가 제가 정한 설계 규칙이었어요. 그런데 실기기에서 앱을 삭제하고 새로 설치한 직후, 첫 무료 작명을 눌렀더니 대뜸 페이월(유료 안내창)이 떴습니다. “무료 미리보기를 모두 사용했어요.” 방금 깐 앱인데요. 등골이 서늘했죠. 이게 저를 한참 헤매게 … 더 읽기

릴리스 앱 logcat에 내 API 키가 그대로 찍혔다 — 디버그 로깅을 안 끄면 생기는 일

API 키는 비밀번호나 마찬가지예요. 그 키로 남이 내 API를 마음대로 쓰면 요금이 저한테 청구되니까요. 그런데 배포용으로 빌드한 제 앱을 실기기에서 테스트하다가, logcat에 제 API 키가 평문 그대로 찍혀 있는 걸 봤습니다. ?key=AIza… 이렇게요. 등골이 서늘했죠. 원인은 제가 개발 편의로 켜둔 로그 하나를 배포 빌드에서 끄지 않은 것이었어요. 초보가 정말 자주 하는 실수라 정리합니다. 코드 한 … 더 읽기

인앱결제 한 번에 유료 기능이 무한으로 풀렸다 — ‘소비 실패’를 뭉뚱그린 대가

결제 기능은 만들 때 제일 조마조마해요. 돈이 오가니까요. 제가 만드는 안드로이드 앱에 유료 프리미엄 기능을 인앱결제(앱 안에서 구글 결제로 유료 기능을 파는 것)로 붙였는데, 실기기 테스트에서 등골이 서늘한 걸 봤습니다. 결제 한 번으로 프리미엄이 결제 없이 무한 생성되고 있었어요. 흔히 말하는 ‘money leak'(돈이 새는 버그)이죠. 이 앱의 프리미엄은 “결제 1건당 프리미엄 1회”인 1회권이에요. 그러니 한 … 더 읽기