프로젝트의 시작은 .gitignore부터..
github로 작업을 할 때 주의할 점은 필요 없거나 보안측면에서 민감한 파일이 github에 올라가지 못하게 하는 것이다. 예를 들어서 팀프로젝트를 하던 중에 팀원이 이메일 인증 구현 과정에서 네이버나 구글 아이디, 비밀번호를 적어 놓은 .properties 파일을 github에 올린 경우가 있었다. 팀원은 별로 중요한 계정이 아니라고는 하지만 이것이 누군가에 의해 탈취가 되어 악용이 되는 사례가 있을 수 있다는 것을 잊어서는 안된다. 또한 누군가가 aws의 key값을 실수로 github에다가 업로드하여 그것이 탈취되어 과금폭탄을 받은 사례들이 있다. 이러한 것들을 조심해야 한다. 이런 비밀번호나 api키 값들이 main branch에 올라오게 되면 github 이메일 계정으로 이메일이 날라오는데 git gardian인가 하는데서 날라오는 것인데 이것에 대한 처리는 아직 해본적이 없긴하다.
그래서 초기에 팀원들끼리 말을 맞춰서 노출되어서 안되는 정보를 담은 config 파일들을 따로 관리를 하도록 해야 한다. 팀원들 끼리만 접근할 수 있는 구글 클라우드에 따로 저장을 해서 관리를 하던가해서 각자 작업환경에만 저장해두고 원격에는 올리면 안되는 것이다. 그리고 gitignore 셋팅은 프로젝트 초기에 바로 하는 것이 좋다. 이걸 프로젝트 진행 중간에 해버리면 이미 tracked된 파일들에 대해선 ignore 처리가 안되게 된다. 팀원들 마다의 커밋 상태가 다르기에 누군가가 중간에 ignore에 추가하더라도 merge 과정 중간에서 갑자기 노출되어서는 안되는 파일이 등장해버린다.
이러한 gitignore 파일은 이클립스로 git 작업을 하면 자동으로 만들어주는 경우가 있긴한데 그렇다하더라도 gitignore 파일 작성법은 알아야 한다. 내 config 파일이 어디에 저장할지 알고, 그리고 어떤 파일명으로 하고 어떤것을 gitignore에 추가할 줄 알고 자동화된 gitignore만 믿을 것인가? 내가 생각하는 gitignore 파일 작성 절차를 얘기해보려 한다.
.gitignore 작성절차
- 키워드만 입력하면 gitignore 내용을 자동으로 생성해주는 사이트를 1차적으로 이용한다.
- https://www.toptal.com/developers/gitignore
- 원하는 키워드를 입력하고 생성하면 자동으로 내용이 만들어진다.
- 이후에 gitignore 작성법에 따라 노출되어서는 안되는 파일을 gitignore 파일에 추가한다.
.gitignore 작성법
- #은 주석을 작성할 때 쓴다.
- / 로 끝나는 것은 폴더로 인식한다.
- /를 앞에다가 붙일 수 있고 끝에다가 붙일 수 있는데 이 차이를 알아야 한다.
- 앞에다가 붙이면 .gitignore가 있는 위치 기준으로 현재 위치에서만 찾는다.
- 뒤에다가 붙이면 하위 폴더에서도 해당 폴더를 찾아서 ignore 한다.
- 폴더를 ignore하기 때문에 폴더 안에 있는 파일도 모조리 ignore한다.
- *.exe 와 같이 와일드 카드 옵션을 붙여서 exe라고 하는 확장자의 파일을 무시할 수 있다.
- !를 붙이면 무시되지 않는 파일을 지정할 수 있다.
- *의 사용
- doc/*.txt
- 의미설명 : 해당 폴더 바로 밑에 있는 txt 확장자 파일을 ignore
- doc/**/*.txt
- 의미설명 : 해당 폴더 사이에 어떤 폴더가 있더라도 txt 확장자 파일을 ignore (없어도 된다.)
- doc/*.txt
ignore된 파일을 확인하는 명령어
- git status --ignored
예제로 알아보기
- 디렉토리 내의 파일구성은 다음과 같다.
.gitignore
ABC
┕ aa.txt
┕ Hello
┕ aaa.txt
┕ lib.jar
Hello
┕ a.txt
doc
┕ report
┕ paper2.pdf
┕ test2.txt
┕ paper1.pdf
┕ test1.txt
- 편의를 위해서 vscode로 진행한다.
- / 를 앞에다 붙이는 경우
- 앞에다가 작성하는 경우에는 현재 디렉토리에서 해당 파일을 찾게 된다.
- 따라서 하위 폴더에 있는 Hello는 ignore하지 못하여 .gitignore 파일이 있는 위치의 Hello만 ignore한다.
- / 를 뒤에다가 붙이는 경우
- 해당 폴더를 하위 디렉토리까지 찾아서 ignore 해준다.
- 아래 그림에서는 현제 디렉토리에 있는 Hello폴더 ABC 폴더에 있는 Hello 폴더 등 모조리 찾는다.
- 특정 확장자 파일을 ignore 하고 싶다면?
- *.txt > 이런식으로 작성한다.
- 와일드 카드 표시는 하위 디렉토리에 있는 파일도 모조리 포함시킨다.
- 이 상황에서 특정 파일만 ignore에서 제외를 시키고 싶다면?
- ! 라는 키워드를 쓴다.
- 분명히 * 로 다 ignore 했는데 특정 파일만 !로 가르키므로써 ignore에서 제외된다.
- 단, ! 키워드는 폴더 채로 ignore 하고 그 안에 내용물에 대해서 ! 키워드를 작성하는 경우엔 동작하지 않는다.
- 특정 폴더 안에 특정 확장자 파일을 ignore
- 폴더에서 depth라는 것을 고려해야 한다. 바로 밑에 있는 파일은 ignore 되지만 더 아래에 있는 doc/report/paper2.pdf는 ignore가 되지 않았다.
- 특정 폴더 안에 또 폴더가 있고 특정확장자 파일을 ignore
- doc/**/*.pdf 와 같이 작성하면 된다. *를 두번 적으면 중간 디렉토리에 대해서 와일드 카드를 걸고 폴더가 있든 없든간에 다 잡아준다.
어떠한 파일을 ignore 하는 것이 좋을까?
일반적으로는 빌드되어 생성되는 target폴더나 IDE마다 프로젝트 내에서 생성되는 .setting폴더, .idea 폴더, .metadata 등의 폴더등을 ignore한다. 그리고 jar 파일도 ignore해서 작업시에 팀원들끼리 따로 공유하는 것이 좋다. 웹프로그래밍시에는 Nodejs 코드 작성시엔 env 파일을, Spring 코드 작성시에는 .properites 등의 파일을 ignore하여 관리하는 것이 좋다.