예약 작업이 지금 ‘어느 브랜치’ 코드를 돌리는지 확인해본 적 있나요?

과외 자료를 자동으로 정리하는 스크립트를 만들다 보니, 저는 그걸 매일 정해진 시각에 스스로 돌게 예약 작업으로 걸어뒀어요. 그런데 문득 이런 질문이 떠올랐습니다. “이 예약 작업은 지금 내 코드의 어느 버전을 돌리고 있는 거지?” 답을 바로 못 하겠더라고요. 이건 사고가 나서 쓴 글이 아니라, 사고가 나기 전에 막은 이야기입니다. 그런데 왜 미리 막아야 했는지, 구조를 보면 … 더 읽기

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

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

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

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

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

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

같은 글을 두 곳에서 따로 렌더하고 있었다 — 렌더를 한 곳으로 모은 이야기

저는 수학쌤이 코딩 배우는 이야기를 블로그에 올리는데, 글을 쓰는 것과 발행하는 것 사이에 자동화 파이프라인을 하나 두고 있어요. 제가 마크다운으로 초안(blog.md)을 쓰면, 그걸 발행용 HTML로 바꿔주는 과정이죠. 그런데 이 파이프라인을 정비하다, 마크다운을 HTML로 바꾸는 렌더 작업이 두 군데서 따로 돌고 있는 걸 발견했습니다. 오늘은 왜 그게(당장 멀쩡해 보여도) 문제인지, 그리고 그 두 경로를 어떻게 하나로 … 더 읽기

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

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

AI 코딩 도구가 명령마다 ‘진행할까요?’ 묻는 걸 없앤 이야기 — 끊김 없는 자율 루프 만들기

저는 수학 학습 도구를 만들면서 Claude Code라는 AI 코딩 도구에게 일을 많이 맡깁니다(터미널에서 명령을 대신 실행하고 코드를 고쳐주는 CLI예요). 그런데 이 도구를 “알아서 쭉 진행해줘”로 굴리려니 걸리는 게 하나 있었어요. 명령을 실행할 때마다 “이거 진행할까요?”라고 물어보며 멈추는 거였죠. 빌드 한 번, 테스트 한 번, 타입 검사 한 번… 매번 제가 엔터를 쳐줘야 다음으로 넘어갔습니다. 자동으로 … 더 읽기

복잡하게 얽힌 화면을 ‘카드’ 단위로 푼 이야기 — 나중의 나를 위한 모듈화

저는 수학 과외를 하면서, 짬짬이 제 투자 판단을 도와주는 개인 도구도 만들고 있어요. 여러 지표를 한 화면에 모아 “이 종목을 어떻게 볼까”를 정리해주는 분석 페이지가 핵심인데, 기능을 붙이다 보니 이 화면이 점점 손대기 무서운 덩어리가 됐습니다. 오늘은 그 얽힌 화면을 어떻게 풀어냈는지, 그리고 당장 기능을 추가하지도 않으면서 왜 굳이 구조부터 바꿨는지를 정리할게요. 문제 — 데이터와 … 더 읽기

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

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

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

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