일기 slecs

스크립트 실행권한 누락으로 팀 전체가 막혔던 이야기

목차

스크립트 파일들에 실행권한이 없어서 ./scripts/api_gen_chunk.py 직접 실행이 안 됐다. 팀원한테 "왜 안 돼요?" 슬랙 DM이 왔을 때서야 알아챘음.

왜 이게 빠져 있었나

파일을 새로 만들 때 기본 umask 설정이 보통 644664다. 즉 rw-r--r-- 상태. Python 파일은 텍스트 파일이기도 하니까 그냥 python scripts/api_gen_chunk.py 형식으로 실행하면 돌아가긴 한다. 그래서 처음 만든 사람(나)은 "잘 되는데?" 하고 넘어가게 된다.

문제는 ./scripts/api_gen_chunk.py 방식으로 직접 실행하거나, 쉘 스크립트에서 ./ prefix로 호출할 때다. 이 경우 OS가 해당 파일에 실행 비트(x)가 있는지 먼저 확인한다. 없으면 Permission denied. 그리고 shebang(#!/usr/bin/env python3)이 파일 첫 줄에 있어도 실행 권한이 없으면 무용지물이다.

이번에 대상이 된 파일들을 보면:

파일 역할
api_gen_chunk.py API 결과를 청크 단위로 생성하는 스크립트
cleanup_titles_categories.py 제목/카테고리 정리 후처리
mask_all_posts.py 전체 포스트 마스킹 1차
mask_round2.py 마스킹 2라운드
mask_round3.py 마스킹 3라운드
mask_round4.py 마스킹 4라운드

마스킹 스크립트가 round2~round4까지 있다는 게 포인트인데, 이건 한 번에 처리 못 하고 단계별로 쪼갠 작업이라는 의미다. 이런 식으로 스크립트가 여러 개 분리돼 있으면 각각을 직접 실행해야 하는 상황이 생기고, 그럴수록 실행권한 문제가 잦아진다.

실행권한 일괄 부여, 언제 해야 하나

솔직히 말하면 이건 "스크립트 처음 만들 때 같이 했어야 했던 것"이다. chmod +x 한 줄짜리 작업이지만 이게 빠지면 다른 사람이 클론하거나 CI에서 실행할 때 말없이 터진다. 특히 CI 파이프라인에서 스크립트를 직접 호출하는 경우엔 에러 메시지도 직관적이지 않아서 원인 찾는 데 시간이 걸린다.

일반적인 처리 방식은 대략 세 가지:

  • chmod +x 를 파일 생성 직후에 같이 커밋 — 제일 깔끔함
  • Makefilepython scripts/xxx.py 형태로 래핑해서 직접 실행 경로를 없애버림
  • CI 스텝 초반에 find scripts/ -name "*.py" | xargs chmod +x 한 줄 박아두기

이번에는 이미 만들어진 스크립트들이 여러 개 있었고, 팀원들이 각자 클론해서 쓰는 상황이었으니 일괄 +x 처리가 제일 빠른 해결이었다.

작은 chore지만 영향은 넓다

chore 레이블 커밋이라 가볍게 보일 수 있는데, 실제로 이게 빠져 있으면 스크립트 6개가 전부 "실행 불가" 상태인 거다. 특히 mask_all_posts.py처럼 전체 데이터를 건드리는 스크립트는 실행 전에 항상 "이거 맞게 실행되는 거 맞지?" 확인을 한 번 더 하게 된다. 실행권한 문제로 에러가 나면 그 확인 자체가 막히니까 불필요한 맥락 전환이 생긴다.

팀 리딩 관점에서 이런 류의 작은 환경 세팅 누락이 쌓이면 팀원들이 "이 레포는 세팅이 좀 불안하다"는 인식을 갖게 된다. 기능 코드만큼이나 실행 환경 정합성도 신경 써야 하는 이유다.

앞으로 scripts/ 디렉터리에 새 파이썬 스크립트 추가할 때는 chmod +x 를 커밋에 포함하는 걸 팀 내 관례로 굳혀두려고 한다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.