보안을 위해서는 gitignore에 파일들을 추가하라는 말을 듣고는 한다. 개발을 하면서 어렴풋이 들은 이야기들은 있으나 이 gitignore라는 것이 무엇이길래 보안을 위해서 사용이 되는 것이고 어떻게 작동을 하는 것일까?
가끔 git을 사용하다보면 올라가면 안되는 보안상 민감한 정보를 담은 파일들이 있게 된다. 그럴 때 git에 올리는 것이 아닌 gitignore라는 파일에서 따로 관리를 하게 된다.
Git 버전 관리에서 제외할 파일 목록을 지정하는 파일
프로젝트를 관리하다보면 Git에 올라가면 안되거나 올라가지 않아도 되는 불필요한 파일들이 존재한다. 이러한 파일들이 올라가지 않도록 명령어를 통해서 조심스럽게 올려야 하는데, 그렇게 된다면 너무 귀찮고 피곤한 일이 될 것이다. 때문에 .gitignore라는 파일을 만들어서 Git의 추적을 받지 않는 파일들을 따로 관리해주는 것이다.
자 그렇다면 Git에 올라가면 안되거나 올라가지 않아도 되는 불필요한 파일들에는 뭐가 있을까?
우선 보안상으로 위험성이 있는 파일이 있을 것이다. 예를 들어 AWS의 S3를 사용한다고 했을 때 필요한 키들이 있는데 이는 공개가 되어선 안되는 키들이기에 올라가게 된다면 보안상의 위험이 존재한다.
또한 프로젝트와 관련이 없는 파일들이 있다. 예를 들어 빌드 과정에서 생성이 되는 임시 파일이나 log 파일들이 있다. 이는 프로젝트와 연관이 없기 때문에 Git에 올리기 불필요한 파일들이다.
그리고 용량이 커서 제외해야하는 파일이 있다. Node.js를 사용하게 된다면 npm module이라는 것을 사용하게 된다. npm module은 Node.js를 사용하기 위해서 필요한 module인데 이 module은 용량이 너무 크기도 하고 프로젝트를 clone 받은 뒤에 직접 install 해주는 것이 더 효율적이기 때문에 올리지 않는다.
이렇게 .gitignore 파일을 사용하여 다양한 파일들을 Git의 추적을 받지 않게 할 수 있다. 그렇다면 이렇게 해서 얻을 수 있는 장점은 무엇이 있을까?
위에서도 얘기했지만 우선 보안에서 이점을 갖는다. .gitignore 파일을 사용하여 Secret Key나 Token과 같은 개발자만 알고 있어야하는 민감한 정보들이 Git에 올라가는 것을 방지할 수 있다.
또한 저장소의 공간은 한정되어 있고 큰 프로젝트일수록 많은 저장소의 용량을 필요로 한다. 이때 불필요한 파일을 제외하게 되면서 저장소의 용량과 clone의 속도를 최적화할 수 있다.
그리고 어떠한 파일들은 환경에 따라서 설정이 달라질 수 있다. 예를 들어 파이썬의 경우 자신의 가상환경을 만들어서 사용할 수 있는데 이는 다른 개발자와 다를 수 있기에 이를 사전에 방지함으로써 공유시 충돌 문제를 예방할 수 있다.
.gitignore를 왜 사용해야하는지 알아봤으니 이젠 어떻게 사용을 하면 되는지에 대해서 알아보자.
사실 생성방법이라고 할 것도 없다. 위치만 잘 맞춰서 .gitignore 파일을 만들어주면 된다.

위 사진은 나의 프로젝트 파일이다. 이처럼 git clone을 하거나 git init을 했을 때 .git이 생긴 폴더에 .gitignore라는 파일을 만들어주면 생성이 완료된다!
만약 터미널로 만들겠다고 한다면
touch .gitignore
라는 명령어를 사용해서 .gitignore 파일을 생성할 수 있다.
위의 파일 안에 제외할 파일이나 폴더를 한줄씩 작성하면 되는데 이때 작성할 때 사용하는 패턴이 있다.
💡 Glob Pattern
리눅스 운영체제에서 한 번에 여러 개의 파일을 찾을 때 사용해온 패턴 매칭 기법
ex) ab/*.c // ab 폴더 아래 c 확장자로 된 모든 파일을 지칭
간단한 예시로는
<# 이 라인은 주석 처리된 라인입니다.
# file.txt는 무시한다.
file.txt
# 현재 경로의 file.txt만 무시한다.
./file.txt
# 확장자가 txt인 모든 파일을 무시한다.
*.txt
# 해당 폴더의 모든 파일을 무시한다.
folder/
# 해당 폴더의 확장자가 txt인 모든 파일을 무시한다.
folder/*.txt
# file1.txt 파일은 무시하지 않는다.
!file1.txt
이때 경로를 지정할 때에는 상대 경로와 절대 경로가 존재한다.
절대 경로란 root 파일부터 해당 파일까지 전체 경로를 작성한 것을 의미한다.
C:\Program Files\Docker
위와 같이 처음부터 모든 경로를 다 작성해주는 것이다.
상대 경로란 현재 파일의 위치를 기준으로 경로를 작성하는 것을 의미한다.
./Docker
절대 경로에서 작성된 경로와 위에 작성된 경로는 결국 같은 곳을 가리키게 되는 것이다.
상대 경로에서는
| 기호 | 의미 |
|---|---|
| / | root |
| ./ | 현재 위치 |
| ../ | 상위 경로 |
가 주로 사용이 된다. 상위 경로는 ../ 로 현재 파일이 속한 폴더를 뜻하며 위의 예시로 생각하면 Program Files가 된다.
.gitignore 파일에 넣었다고 무조건 Git의 버전관리에서 제외가 되느냐? 그것은 아니다. 이미 버전 관리에 포함이 되어있는 파일들은 .gitignore 파일에 기록을 한다고 해서 버전 관리에서 제외하지 않는다. 따라서 더이상 추적을 받고 싶지 않다면 파일을 삭제하고 파일들을 버전 관리에서 제외시켜주어야한다.
이때 수동으로 제외할 수 있는 명령어는
git rm -r --cached . # 현재 레포지토리의 캐시를 모두 삭제
git add .
git status
git coomit -m "커밋 메시지"
이다.
순서대로 진행을 하게 된다면 레포지토리에서 파일이 삭제가 되고 버전 관리에서 제외가 되는 것을 확인할 수 있을 것이다!
갑자기 알아두면 좋은 사이트라고 하니 당황스러웠을 것이다. 이 사이트는 사실 나도 이번에 조사를 하면서 처음 알게된 사이트이다.
gitignore.io 라는 사이트인데 자신의 프로젝트 환경을 입력하면 그에 맞는 .gitignore 파일을 만들어준다고 한다. 처음.gitignore 파일을 사용해서 어떠한 것들을 넣어야할지 모르는 사람들은 이용해보면 좋을 것 같다!
.gitignore 파일은 Git의 버전 관리에서 제외할 파일 목록을 지정하는 파일이다!
이 .gitignore를 사용하여 보안성을 높이고 저장소의 용량을 줄이는 등 이점을 가질 수 있다!