배포 스크립트 실행 권한 불일치가 새벽 배포를 막는다
목차
배포 스크립트 파일 권한 하나를 맞추는 작업을 했다.
작은 변경이다. chmod +x publish.sh 한 줄로 끝나는 일이고, diff도 코드 한 줄 안 바뀐다. 그런데 이게 왜 생겼냐를 짚어보면 꽤 익숙한 패턴이 나온다.
왜 이런 게 생기나
로컬에서 스크립트 파일을 새로 만들거나 복사해서 커밋할 때, 실행 권한이 빠진 채로 올라가는 경우가 있다. 특히 macOS나 Windows 로컬 환경에서 파일을 다루다가 git에 올리면 100644 (일반 파일) 로 올라가는 경우가 잦다. 서버 쪽은 원래 100755 (실행 가능)로 기대하고 있는데, git이 이 불일치를 추적하지 않으면 CI/CD 파이프라인이나 직접 실행 시 Permission denied를 뱉는다.
# 서버 기대값
-rwxr-xr-x publish.sh (100755)
# 로컬 커밋 상태
-rw-r--r-- publish.sh (100644)
이 차이를 git 레벨에서 바로잡는 방법은:
git update-index --chmod=+x publish.sh
또는 로컬에서 실제로 권한을 바꾼 뒤 커밋하는 방식이다. chmod +x publish.sh 후 git add 하면 git이 파일 모드 변경을 감지해 같이 반영한다.
파일 권한과 배포 신뢰도
| 상태 | git 모드 | 실행 가능 여부 |
|---|---|---|
| 로컬에서 새로 추가 | 100644 |
❌ |
| 서버 원본 기준 | 100755 |
✅ |
| 이번 커밋 후 | 100755 |
✅ |
배포 스크립트 권한 불일치는 작아 보이지만, 실제로는 꽤 찝찝한 사고의 씨앗이다. 특히 자동화 파이프라인에서 publish.sh를 직접 호출하는 구성이면, 권한 없이 실행 시도하는 순간 배포가 멈춘다. CI 로그 뒤져보면 bash: ./publish.sh: Permission denied 한 줄이 전부라 원인 파악도 잠깐 헷갈린다.
팀원한테 "이 스크립트 실행해봐" 했을 때 돌아오는 게 Permission denied면 — 내가 설명을 못 한 건지, 환경 문제인지, 스크립트 자체 버그인지 먼저 삽질하게 된다. 이런 사소한 불일치가 신뢰 비용을 만든다.
작은 수정이라도 맥락을 남기는 이유
커밋 메시지에 matches server 100755 를 명시한 건 의도적이다. 단순히 "실행 권한 추가"라고만 쓰면, 나중에 이 커밋을 보는 사람은 "왜 이게 빠져있었지?", "서버 상태랑 맞춰야 하는 건 어디서 나온 얘기야?" 라는 의문이 생긴다. 기준이 어디 있는지를 커밋 메시지에 박아두면 질문 자체가 줄어든다.
코드 리뷰에서도 이런 식의 컨텍스트를 PR description에 넣도록 팀 내에서 권장한다. 변경 자체보다 왜 이 값이 정답인지를 적는 것. 변경 stat이 거의 없는 커밋일수록 이유 설명이 더 중요하다. 코드가 없으니 설명이 전부다.
- 실행 권한 관련 실수는 새 스크립트 추가 시 자주 발생
git config core.fileMode true설정 확인도 환경 점검 시 챙길 포인트- 팀 레포라면 onboarding 문서에 "스크립트 추가 시 권한 확인" 한 줄 넣는 게 낫다
별거 아닌 것 같지만, 배포 스크립트 권한 하나 안 맞아서 새벽 배포가 막히는 경험 한 번 하면 이런 커밋이 왜 필요한지 바로 이해가 된다. 끝.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.