lifecarelog
개발일지

launchd로 돌린 업로더가 이미지 0장을 올린 이유

예약 실행된 wrangler가 설정 파일을 못 찾아 이미지 없이 글이 나간 사고를 작업 디렉터리 고정으로 고친 1인 개발 빌드로그예요.

5분 읽기

블로그 글을 자동으로 올리는 파이프라인을 혼자 돌리다 보면, 코드보다 실행 환경에서 더 자주 넘어져요. 2026-10-11에 겪은 일이 딱 그랬어요. 글은 멀쩡히 게시됐는데 이미지가 0장이었거든요.

증상: 글은 나갔는데 그림이 없다

파이프라인은 단순해요. 본문용 카드 이미지를 만들고, 그걸 이미지 저장소에 올린 뒤, 주소를 본문에 끼워 넣어 게시해요. 업로드는 wrangler CLI가 맡고, 전체 작업은 macOS의 launchd가 아침마다 깨워요.

터미널에서 손으로 돌려 보면 매번 잘 됐어요. 그런데 예약 실행으로 나간 글에는 이미지가 하나도 안 붙었어요. 글 자체는 정상이라 알림도 성공으로 찍혔고요. 이런 게 제일 골치 아픈 종류예요. 실패가 아니라 "반쯤 성공"이라 눈에 안 띄거든요.

원인: 작업 디렉터리가 달랐다

직접 재현해 보니 범인은 현재 디렉터리였어요. launchd가 띄운 프로세스는 작업 디렉터리가 루트(/)에서 시작해요. 반면 wrangler는 현재 디렉터리에서 설정 파일을 찾아요. 터미널에서는 늘 레포 안에서 명령을 치니 문제가 없었고, 예약 실행에서는 설정을 못 찾아 업로드가 조용히 빠진 거예요.

launchd 기동(CWD=/)wrangler 설정 탐색 실패업로드 0건이미지 없는 글 게시

수정: 세 곳을 한 번에

고치는 건 3단계였어요.

  1. 업로드 셸 스크립트가 시작할 때 레포 루트로 이동하도록 고정
  2. 그 스크립트를 부르는 게시 준비 코드에서도 같은 전제를 맞춤
  3. 테스트 파일에 실행 위치 관련 케이스를 보강

이 커밋에서 변경한 파일은 3개예요. 적용해 봤더니 다음 예약 실행부터는 업로더가 설정을 제대로 읽었어요.

여기서 끝내지 않고 같은 날 한 가지를 더 만들었어요. 이미 이미지 없이 나간 글을 지우고 다시 올리는 대신, 같은 글에 도표와 커버를 뒤늦게 반영하는 수정 경로예요. 돌려 보니 이 경로가 있으니 사고가 나도 글 주소가 바뀌지 않아서 마음이 편해요.

  • CWD를 코드가 직접 고정
  • 손 실행과 예약 실행을 같은 조건으로
  • 반쯤 성공은 실패로 취급

배운 것

최근 7일 동안 46건을 커밋했는데, 이 건이 가장 기억에 남아요. 테스트해 보면 "내 터미널에서 되는 것"과 "스케줄러가 돌리는 것"은 다른 환경이라는 걸 매번 새로 배워요. 환경 변수, 현재 디렉터리, 셸 프로필 중 하나는 꼭 달라요.

플랜비 같은 제품을 혼자 만들 때도 마찬가지예요. 회비 미납 알림처럼 정해진 시간에 나가는 기능은, 기능 자체보다 "실제로 도착했는지"를 확인하는 장치를 먼저 두게 돼요. 성공 로그보다 결과물을 직접 보는 습관이 1인 개발에서는 제일 싼 보험이에요.

#launchd#wrangler#자동화#빌드로그

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.