2026-11-03 (화) 개발일지
오늘은 두 프로젝트에서 같은 권한 오류를 두 번 만났다. 처음엔 저장소가 깨진 줄 알았는데, 로그를 보니 코드가 아니라 macOS의 폴더 보호가 원인이었다. 같은 오류를 두 번 겪고 나서야 근본 원인을 제대로 봤다.
하네스 — git push와 파일 읽기가 동시에 막히다: 원인은 저장소가 아니라 폴더 권한
git push origin main을 실행했더니 fatal: Unable to read current working directory: Operation not permitted가 떴다. 이어서 ls evals/hidden-reqs를 쳤는데 ls: evals/hidden-reqs: Operation not permitted. push와 채점기 원인 확인, 두 작업이 동시에 막혔다.
처음엔 git 저장소 상태가 꼬였나 싶었다. 커밋이 안 올라가니까. 그런데 ls도 실패하는 걸 보고 git 문제가 아니라고 판단했다. ls는 git과 무관하니까. 파일 읽기 도구까지 같은 오류를 내는 걸 보니, 명령 실행 환경이 아니라 그 아래 파일시스템 접근 자체가 막힌 것이었다.
도구 문제가 아니라 그 아래 계층이 막힌 것이다.
원인은 macOS가 ~/Downloads 폴더 접근을 막고 있었던 것이다. 앱 업데이트나 재시작 뒤 권한이 초기화될 때 이런 일이 생긴다. 프로젝트 폴더가 ~/Downloads 아래에 있었던 게 문제였다.
해법은 시스템 설정 → 개인정보 보호 및 보안 → 파일 및 폴더에서 터미널 앱의 다운로드 폴더 접근을 켜는 것이었다. 목록에 없으면 같은 화면의 전체 디스크 접근 권한에 추가하는 쪽이 확실하다. 검증은 git log --oneline -1로 하기로 했다. 커밋 목록이 보이면 정상이다. 다만 이건 사용자가 권한을 열어줘야 확인할 수 있어서, 아직 실행 전이다.
게임 — 같은 오류가 다시 났다: 반복된다는 게 이번엔 단서였다
게임 프로젝트에서 sdd-workspace 스크립트를 돌렸더니 fatal: Unable to read current working directory: Operation not permitted로 Exit code 128이 났다. 이어서 계획 문서 docs/superpowers/plans/2026-10-29-editor-choice-completion-slice.md를 읽으려 하니 EPERM: operation not permitted. Task 1을 시작하려던 참이었다.
이때 “지난번과 같은 증상”이라는 걸 바로 알아챘다. 하네스에서 겪은 것과 오류 패턴이 완전히 같았다. ls, git, 파일 읽기가 전부 막히는 것도 같았다. 하루 사이에 두 번이나 같은 일이 생겼다는 건, 권한을 한 번 주는 걸로는 부족하다는 뜻이었다.
해법은 같은 방법을 안내하면서, 이번엔 전체 디스크 접근 권한을 추가하는 쪽을 더 권했다. 다운로드 폴더만 켜는 것보다 확실하기 때문이다. 그리고 코드나 커밋은 전혀 건드리지 않았다. 권한 문제로 작업이 막힌 거라 코드를 수정할 이유가 없었다. 검증은 아직. 권한을 열고 알려주면 Task 1부터 진행하기로 했다.
Downloads 밖으로 — 권한을 다시 주는 대신 작업 위치를 바꾸기로
같은 문제가 두 번 나니, 매번 권한을 다시 주는 건 임시방편이라는 생각이 들었다. 저장소가 ~/Downloads 아래에 있는 한 이 문제는 계속 반복될 수 있다.
검토한 선택지는 세 가지였다.
- 매번 권한 다시 주기 — 간단하지만 반복된다
- 전체 디스크 접근 권한 주기 — 확실하지만 과한 권한이다
- 저장소를
~/Downloads밖으로 옮기기 — 근본적
결정은 3번이었다. ~/dev/ 같은 곳으로 옮기면 이 권한 문제가 반복되지 않는다. 다만 이건 아직 실행하지 않았고, 다음에 옮기는 방법을 안내하기로 했다.
새로 알게 된 건 macOS의 TCC가 앱 업데이트나 재시작 뒤 초기화될 수 있다는 점이다. 그래서 ~/Downloads 같은 보호 폴더에 개발 저장소를 두면, 권한이 풀릴 때마다 작업이 막힌다. 코드 문제가 아니라 환경 문제라서, 코드를 아무리 고쳐도 해결되지 않는다.
검증은 아직 안 옮겼다. 옮기고 나면 git status와 파일 읽기가 정상인지 확인해야 한다. 남은 과제는 두 프로젝트 저장소를 ~/Downloads 밖으로 옮기고, 옮긴 뒤 빌드 스크립트나 경로 참조가 깨지지 않는지 확인하는 것이다.
오늘의 한줄
권한 오류는 코드가 아니라 환경에서 온다. 같은 오류가 두 번 나면 코드를 고칠 게 아니라 작업 위치를 바꿔야 한다.