스크립트 실행 권한 누락이 팀 협업과 자동화에 미치는 영향
목차
스크립트에 실행 권한을 추가하는 작은 변경이지만, 생각보다 많은 팀 협업 이슈를 담고 있다. chmod +x scripts/slot-checkup.py라는 한 줄짜리 커밋이 왜 필요했고, 어떤 교훈을 얻을 수 있는지 정리해 본다.
문제: 실행 권한 없이 스크립트를 실행하려 할 때
처음에는 작은 불편함으로 느껴진다. 스크립트를 직접 호출하려다 보면:
$ ./scripts/slot-checkup.py
bash: ./scripts/slot-checkup.py: Permission denied
이 에러가 나면 매번 python scripts/slot-checkup.py 또는 bash scripts/slot-checkup.py처럼 명시적으로 인터프리터를 지정해야 한다. 또는 python -m scripts.slot_checkup 같은 모듈 호출을 해야 하고. 개별적으로는 "어, 권한이 없네" 하고 넘어가지만, 여러 팀원이 작업할 때 누군가는 로컬 개발 환경에서 권한을 직접 설정했을 수 있다. 그러면 깃에는 반영되지 않으니 다른 팀원이 클론해서 받으면 또 권한이 없는 상태다.
CI/CD 파이프라인에서는 더 심하다. 자동화된 테스트나 정산 작업이 이 스크립트를 직접 호출한다면, 권한 없음으로 인한 실패가 발생할 수 있다.
왜 이 변경이 필요했는가
결국 누군가가 "어라, 계속 실행이 안 되네?" 하다가 깨달은 것 같다. 스크립트를 git으로 추적하고 있었지만, 실행 권한은 git에 기록되지 않았다. 스크립트 파일을 생성했을 때 실행 권한이 없었거나, git ignore/attribute 설정이 제대로 되지 않아서 권한이 보존되지 않은 것 같다.
이를 명시적으로 고쳐서 git 커밋으로 남기는 것이 중요하다. 왜냐하면:
- 모든 팀원이 클론받은 시점부터 올바른 권한을 가짐
- CI 환경에서도 권한이 자동으로 적용됨
- 다음 팀원도 "왜 실행이 안 되지?" 하는 혼동을 겪지 않음
Git에서 파일 권한 관리하기
Unix 파일 권한의 일부는 git에서 추적된다. 정확하게는 파일 모드(file mode)의 실행 비트만 추적한다.
| 상황 | 결과 |
|---|---|
로컬 파일에 +x 있음 |
git이 실행 권한 감지, 커밋 시 포함 |
로컬에만 chmod +x 실행 |
git status에 "modified"로 표시 |
git add 후 커밋 |
git 객체에 mode 755 기록 |
클론한 환경에서 git checkout |
파일이 실행 권한과 함께 받아짐 |
깃의 관점에서는 파일의 전체 권한(rw-r--r--)을 다 저장하는 게 아니라, 실행 가능 여부만 저장한다. 즉, 755와 777의 구분은 없다. 단순히 "실행 가능"인가 아닌가만 판단한다.
팀 협업에서 배운 점
1. 작은 변경도 명시적으로 커밋하자
chmod 정도는 "이미 있는 파일 건드린 거니까 따로 커밋할 필요 없지" 하기 쉽다. 하지만 다른 작업과 섞어서 커밋하면 나중에 이 변경의 의도를 파악하기 어렵다. 별도의 chore 커밋으로 분리하면, 리뷰어도 "아, 권한 문제를 고쳤구나" 하고 한눈에 이해한다.
2. 스크립트는 처음부터 실행 권한과 함께
새로운 스크립트를 리포에 추가할 때부터 의식적으로 권한을 챙겨야 한다. 몇 가지 패턴:
# 1. 처음부터 권한과 함께 생성
$ cat > scripts/new-script.py << 'EOF'
#!/usr/bin/env python3
# ... script content
EOF
$ chmod +x scripts/new-script.py
$ git add scripts/new-script.py
# 2. 이미 있는 파일에 권한 추가
$ chmod +x scripts/slot-checkup.py
$ git add scripts/slot-checkup.py
$ git commit -m "chore(common): chmod +x scripts/slot-checkup.py"
3. gitattribute로 자동화 가능
팀에서 "모든 scripts/ 폴더의 파이썬 파일은 자동으로 실행 권한" 같은 정책이 있다면, .gitattribute에서 설정할 수 있다.
scripts/*.py export-ignore
scripts/*.sh export-ignore
하지만 이것도 결국 명시적인 권한 설정이 있어야 한다. git attribute는 보조일 뿐이다.
4. 코드 리뷰에서 놓치기 쉬운 부분
사람들은 코드 변경만 본다. "함수 추가", "로직 수정" 같은 내용은 주목하지만, "파일 권한"은 쉽게 놓친다. 특히 작은 chore 커밋이면 더욱. 하지만 이게 스크립트 실행 자동화를 막는 원인이 될 수 있으니, 리뷰어도 의식적으로 확인해야 한다.
마무리
chmod +x 한 줄이지만, 이 안에는 "Git의 파일 권한 추적", "팀 협업의 일관성", "자동화 환경에서의 예상 가능성"이 담겨 있다. 큰 기능 개발만큼이나 이런 작은 운영 이슈도 중요하다. 특히 CI/CD나 자동 스크립트가 많아질수록 권한 관리는 더욱 신경 써야 할 부분이다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.