0. 사건의 발단: 나는 가짜 서버를 활용한다

나는 나의 자체 백엔드 서버를 만들어 업무에 활용한다. 물론 진짜로 DB에 연결된 서버가 아닌 api 주소에 하드코딩된 JSON을 반환해주는 가짜 서버이다.

가짜 서버는 정말 유용하다. 프런트 개발을 하면서 특정 Response에 따라 예외 처리 또는 Form component들이 어떠한 반응을 해야할 때가 많다.

가짜서버가 없다면, Test Case를 일일이 만들어야한다. 예를 들어, 하나씩 HTTP통신을 하면서 DB의 레코드를 바꿔줘야한다. 너무 힘들다.

하지만, 가짜 서버가 있다면 이런 삽질을 하지 않아도 된다. 내 가짜서버로 들어가 하드코딩된 JSON을 내가 원하는 상황에 맞춰 바꿔주기만 하면 된다.

1. 사건의 시작: 너 왜 자꾸 환경 변수를 바꾸니?

나는 이 가짜 서버를 활용하기 위해서 src/environment.ts에 API 주소를 매번 바꾼다. 그런데, 나도 모르게 실수로 그대로 commit하여 remote branch에 올릴 때가 있다. 이럴 때마다 내 프런트엔드 선임이 짜증을 낸다.

짜증이 날 수 밖에 없다. 선임 입장에서는 왜 갑자기 로컬에서 API 통신이 자꾸 실패하지? 이러면서 디버깅하는 데 시간을 날리는 것이다.

나는 이번 실수를 한두번 하는 것이 아니다. 그리고 욕을 매번 먹을 수 없기에 특단의 조치를 취했다.

2. 해결의 시작

처음에는 .gitignore 를 쓰고자 했다. 그런데, .gitignore 는 이미 git에서 tracking하고 있는 파일은 무시하지 못한다.

그래서 .gitignore 는 활용하지 못했다.

결국, 나는 githook을 사용하기로 했다.

여기에 내 코드를 공유하겠다.

소스 디렉토리에 .git/hooks/pre-commit 파일을 만들어준다.

#!/bin/bash
# 특정 파일 목록의 변경사항이 있는지 확인
declare -a blocked_files=(“src/environments/environment.ts” “.vscode/settings.json”)
# 커밋할 수 없는 파일 목록을 저장할 변수
blocked_files_output=“”
# 각 파일에 대해 변경사항 확인
for file in “${blocked_files[@]}“; do
    # 변경된 파일 목록에서 해당 파일이 있는지 확인
    if git diff --cached --name-only | grep “$file” >/dev/null; then
        blocked_files_output=“$blocked_files_output$file, ”
    fi
done
# 만약 커밋할 수 없는 파일이 있으면 메시지를 출력하고 스크립트를 종료
if [ -n “$blocked_files_output” ]; then
    # 출력에서 마지막 쉼표와 공백 제거
    blocked_files_output=“${blocked_files_output%, }”
    echo “파일 ‘$blocked_files_output’은(는) 커밋할 수 없습니다.”
    exit 1
fi

이렇게 하면 당신이 커밋을 할 때 git staging에 있는 파일들을 git hook이 검사할 것이다.

3. 결론

git hook 짱짱짱

git hook 좋은 것은 알고 있었지만, 진정 필요성을 느낄 때 배우게 되는 구나!

Categorized in:

Technology,