팀원들과 협업을 하면서 가끔 console.log()를 제거하지 못한 채 commit을 한적이 있었다.
이는 별거 아닌거 같아보여도 운영서버 AWS에 올라갔을때 악영향을 끼친다.
코드에 민감한정보(암호, Api키, 사용자 데이터)를 기록하면 서버로그에 엑세스할 수 있는 모든 사람에게 노출이 될 수 있고,
시스템 리소스를 소비하고 처리시간을 차지하여 애플리케이션 전체 성능에 영향을 끼칠수 있고,
로그가 빠르게 복잡해 져서 관련 정보를 수정 삭제하기 어려워져서 디버깅이 어려워지고,
제일 중요한, AWS는 저장 및 처리된 데이터 양에 대해 요금을 부과하므로 비용이 증가할 수 있다.
이제 console.log() 제거에 필요성을 느낄 것이다.
eslint로 단순하게 "no-console" 에서 에러 처리를 해버릴수도 있지만 이럴 경우 코드 개발할때 너무나 불편하다.
따라서 commit 할때만 제거를 해주는게 편리하다.
예전부터 관리를 하려고 Babel이나 다른 웹팩을 사용해서 시도해봤으나
나는 지금 커밋할때 브런치 관리를 "Fork"라는 Git 클라이언트를 사용하는데 여기서 적용이 잘 되지 않았다.
우여곡절 끝에 git husky 도구의 "hooks"로 커밋전에 console.log()을 삭제 및 에러처리를 할 수 있었다.
방법은 생각 보다 간단하다.
우선 console.log() 커밋 시 에러를 뜨게 해보자.
npm install husky --save-dev
해당 프로젝트에 터미널에서 Husky를 설치를 해준다
"husky": {
"hooks": {
"pre-commit": "sh .git/hooks/pre-commit"
}
}
package.json 파일에 해당 코드를 추가해준다.
이 코드는 사전 커밋 후크가 트리거될 때 .git/hooks 디렉토리에서 pre-commit 후크 스크립트를 실행하도록 Husky에 지시해준다.
그 다음 cd .git/hooks 명령으로 .git/hooks 디렉토리로 이동한다.
nano pre-commit
해당 명령어로 pre-commit 파일을 생성한다.
#!/bin/sh
# Check for console.log statements
if git diff --cached --name-only | xargs grep -n "console.log" ; then
echo "Error: console.log statements found. Please remove them before committing."
exit 1
fi
해당 내용을 그대로 복사해서 붙혀 넣어준다.
'Ctrl + X'를 눌러 텍스트 편집기를 종료한다.
파일에 대한 변경 사항을 저장하라는 메시지가 표시될텐데 'Y'를 입력하여 변경 사항 저장한다.
Enter를 눌러 같은 이름으로 파일을 저장하고 텍스트 편집기를 종료한다.
chmod +x pre-commit
터미널에 해당 코드를 입력해주면 파일 실행권한이 부여되어 Git 후크로 실행할 수 있게 되었다.
이제 한번 console.log()를 치고 commit을 해보자.
이렇게 console.log()가 있으면 commit Error가 나오는게 보일것 이다...!
다음은 Error처리말고 그냥 자동으로 console.log() 코드를 지우려면 조금만 수정하면 된다.
#!/bin/bash
# Define a regex pattern to match console.log statements
PATTERN='console\.log'
# Use git diff to get a list of files being committed
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.js$')
# Loop through each file and remove any console.log statements
for FILE in $FILES; do
# Use sed to remove lines containing the pattern
sed -i "/$PATTERN/d" "$FILE"
done
해당코드를 아까 pre-commit 파일에 넣어주면 끝이다.
'Programming > 협업' 카테고리의 다른 글
[Typescript] Eslint로 저장 시 사용하지 않는 import 제거 (0) | 2023.05.09 |
---|---|
[Programming] Naming Rull (0) | 2022.12.11 |
[Programming] ESLint와 Prettier (0) | 2022.09.17 |