brainstorm 실행 스크립트의 심링크가 커밋에 섞이는 문제 수정
목차
brainstorm 모듈의 실행 스크립트에서 node_modules 심링크가 실제 코드 변경과 함께 commit 되는 문제를 발견하고 수정했다. 작아 보이는 이슈지만, 이런 환경 파일들이 코드 변경 커밋에 포함되기 시작하면 리뷰 노이즈도 많아지고 머지 충돌도 잦아진다.
왜 심링크가 문제가 되는가
개발 환경에서 node 의존성을 관리할 때 symlink 를 활용하는 경우가 있다. 특히 monorepo 구조나 로컬 패키지 연결에서 유용하다. 하지만 이런 심링크는 개발 환경의 설정 일 뿐, 실제 코드 로직의 변경 이 아니다.
문제는:
- Symlink 는 OS/머신마다 다르게 해석될 수 있음
- Windows/Mac/Linux 환경에서 경로 표현이 다름
- PR 리뷰어 입장에서는 실제 변경사항 구분이 어려워짐
- 협업하는 팀원이 checkout 했을 때 자신의 환경과 맞지 않을 가능성
특히 code_change 를 추적하는 커밋이라면, 의도는 "내가 실제로 고쳤거나 추가한 로직"을 명확히 하는 것이다. 그런데 심링크까지 섞여 있으면 무엇이 본질적인 변경인지 헷갈린다.
문제의 발원지: brainstorm_exec.py
scripts/brainstorm_exec.py 는 아마도 brainstorm 모듈을 실제로 구동하고 프로세스를 관리하는 스크립트일 것 같다. 실행 중에 의존성을 동적으로 링크하거나, 환경 설정을 초기화하는 과정에서 node_modules 심링크를 만드는 부분이 있었던 것 같다.
문제 패턴:
brainstorm_exec.py 실행
↓
node_modules symlink 생성 (로컬 환경 구성)
↓
git 스테이징 시 실수로 포함
↓
code_change commit에 섞임 (의도하지 않음)
이것은 흔한 패턴이다. 개발자가 스크립트를 돌리고, 로컬 테스트 후 바로 커밋하다 보면, working directory 에 생긴 심링크들이 tracking 되기 시작한다.
수정 방향: git 추적 분리
fix 의 핵심은 brainstorm_exec.py 실행 시 생기는 환경 파일들을 의도적으로 버전 컨트롤에서 제외 하는 것이다. 일반적으로 두 가지 방법이 있다:
| 방식 | 장점 | 단점 |
|---|---|---|
.gitignore 에 패턴 추가 |
간단함, 모든 팀원에게 일괄 적용 | 이미 tracked 라면 제거 필요 |
스크립트에서 생성 후 즉시 .gitignore 에 추가 |
정확함, 생성 로직과 함께 관리 | 스크립트 복잡도 증가 |
스크립트 차원에서 symlink 생성 부분을 review 하면서, 그 심링크들이 불필요하게 git staging area 에 들어가지 않도록 명확히 하는 방식으로 진행했을 것이다.
회고: 환경 추적과 코드 추적의 경계
팀이 커질수록 "어떤 것을 버전 컨트롤에서 추적할 것인가"는 중요한 결정이다:
- 추적해야 할 것: 소스 코드, 설정 파일 (서버 config), 문서, 테스트
- 추적하면 안 될 것: 빌드 산출물, 환경 변수, 로컬 심링크, 임시 파일
이번 fix 를 팀과 함께 리뷰할 때, "왜 이런 일이 반복되는가"를 생각해 볼 필요가 있다:
- 개발 환경 스크립트가 cleanup 을 안 하고 있는가?
- Pre-commit hook 에서 심링크 같은 파일을 감지하고 경고할 수 있는가?
- CI/CD 에서 symlink 처리가 적절한가?
특히 개발자가 로컬에서 자주 돌리는 스크립트 라면, 그 스크립트가 남기는 artifact 를 명확히 문서화하고, 자동으로 무시하도록 설정하는 것이 팀의 인지 부하를 줄인다.
# brainstorm_exec.py 같은 스크립트에서 권장하는 패턴
# 1. 심링크를 만들 때 .gitignore 확인
# 2. 또는 임시 디렉토리 사용 (예: /tmp 또는 .cache/)
# 3. 또는 cleanup 함수 추가 (스크립트 종료 시 자동 제거)
이런 작은 수정들이 쌓이면, commit history 가 깔끔 해지고, PR 리뷰가 빨라 지고, 팀의 협업 friction 이 줄어든다. 코드 퀄리티만큼 commit 위생도 중요한 이유다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.