자동화 파이프라인6 분 읽기

폴더를 정리했는데, 내 봇들은 옛 주소를 들고 있었다

웹앱과 인스타그램 봇을 각자 폴더로 옮겼습니다. 폴더 정리는 코드 변경처럼 보이지 않지만, 스크립트 세 개가 경로를 직접 적어 두고 있었습니다. 고친 줄은 다섯 줄이었고, 문제는 그 다섯 줄을 찾아내는 일이었습니다.

#file-paths#automation#python#folder-structure#instagram
왼쪽에는 정리된 폴더 트리, 오른쪽에는 옛 경로를 가리키는 스크립트 세 개를 대비한 이미지
폴더는 옮겨졌지만, 경로 문자열은 스스로 따라오지 않았습니다.

정리했다고 생각한 순간

2026년 8월 1일, 흩어져 있던 프로젝트 폴더를 정리했습니다. 규칙은 단순했습니다. 웹앱은 ~/Documents/webApps 아래에, 인스타그램 게시 봇은 ~/Documents/publishBots/instagram 아래에 둡니다. 운세 웹앱도 ~/Documents/webApps/unse로 옮겼습니다.

폴더 이동은 코드를 고치는 작업처럼 느껴지지 않습니다. 파일 내용은 한 글자도 안 바뀌고, 에디터에서 열어 봐도 전부 그대로입니다. 그래서 정리가 끝났다고 여기기 쉽습니다.

그런데 게시 봇은 운세 웹앱과 떨어져 있는 프로그램이 아니었습니다. 봇 스크립트 세 개가 운세 웹앱 폴더를 경로로 직접 참조하고 있었습니다.

당신의 자동화 스크립트 중에서, 다른 프로젝트의 폴더 위치를 문자열로 박아 두고 있는 것은 몇 개입니까?

경로를 들고 있던 곳

커밋에 남은 변경은 이렇습니다.

  • generate.py의 FORTUNE 경로를 ~/Documents/webApps/unse로 수정
  • insta_crosspost.py의 UNSE_PUBLIC 경로를 같은 위치로 수정
  • post_daily.py의 UNSE_PUBLIC 경로를 같은 위치로 수정

diff로 보면 generate.py 2줄, insta_crosspost.py 4줄, post_daily.py 4줄이 바뀌었고 삭제된 줄은 모두 합쳐 5줄입니다. 같은 커밋에 assets/card_unse.html(45줄)과 assets/reel_unse.html(43줄) 템플릿도 새로 들어갔습니다.

변수 이름을 보면 의존 관계가 드러납니다. FORTUNE은 콘텐츠를 만드는 쪽이 운세 데이터를 가져오는 경로이고, UNSE_PUBLIC은 게시하는 쪽이 웹앱의 공개 폴더를 참조하는 경로입니다. 봇이 따로 설치된 앱처럼 보여도, 실제로는 다른 프로젝트의 디렉터리 구조에 기대고 있었습니다.

왜 이게 함정인가

이런 경로는 import 문과 달리 import 에러를 내지 않습니다. 문자열일 뿐이라서, 폴더를 옮기는 순간에는 아무 일도 일어나지 않습니다. 스크립트를 실제로 돌려서 그 경로를 읽는 순간에야 문제가 드러납니다.

정기 실행되는 봇이라면 그 순간은 폴더를 옮긴 순간이 아니라 다음 스케줄입니다. 정리 작업과 깨지는 시점이 떨어져 있으니, 원인을 이어 붙이기 어렵습니다.

당신이라면?

폴더를 옮긴 직후라면 한 번 멈춰서 생각해 볼 만합니다. 옮긴 폴더 이름으로 다른 프로젝트 전체를 검색하겠습니까, 아니면 다음 실행이 알려 줄 때까지 기다리겠습니까?

이번에 한 일

경로 참조를 새 위치로 바꾸는 것으로 끝냈습니다. 경로를 설정 파일이나 환경변수로 빼는 식의 구조 변경은 이 커밋에 없습니다. 바뀐 건 세 파일의 경로 문자열이 전부입니다.

값싼 수정은 맞습니다. 다만 진짜 비용은 수정이 아니라 '어디를 고쳐야 하는지 아는 것'에 있었습니다. 폴더를 옮긴 쪽(웹앱)과 고쳐야 하는 쪽(봇)이 서로 다른 프로젝트였기 때문입니다.

자가진단 체크리스트

  • 폴더를 옮기기 전에, 그 폴더 이름으로 다른 프로젝트 전체를 검색해 보았습니까?
  • 자동화 스크립트 안에 ~/Documents/... 같은 절대 경로 상수가 몇 개 있는지 알고 있습니까?
  • 경로를 참조하는 스크립트를 폴더 이동 직후에 한 번 직접 실행해 확인합니까?

솔직한 부분

이 커밋에는 경로를 고치기 전에 실제로 무엇이 깨졌는지가 적혀 있지 않습니다. 봇이 실패했는지, 실행되기 전에 제가 먼저 발견했는지 기록만으로는 알 수 없습니다. 이전 경로가 정확히 어디였는지도 커밋 메시지에는 없습니다. 같은 커밋에 들어간 HTML 템플릿 두 개가 경로 수정과 어떤 관계인지도 기록이 설명하지 않습니다. 그리고 경로는 여전히 코드 안에 직접 적혀 있어서, 다음에 폴더를 옮기면 같은 작업을 다시 해야 합니다.

관련 글