이번 JSP 프로젝트를 할 때 팀원들 사이에서 나온 말 중 하나는 Git을 써보고 싶다는 이야기였다. 이전에 JDBC 프로젝트를 할 때는 팀원들이 각자 만든 파일을 직접 취합하는 조가 많았는데, 취합을 하는 과정에서 시간도 오래 걸리고 무엇보다 팀원들이 어떤 부분을 수정했는 지 알아내기가 거의 불가능하다는 말이 많았었다.
나는 이전 프로젝트였던 JDBC 프로젝트를 할 때 조장으로써 Git을 쓰는 것이 병합하는 시간을 줄일 수 있을 것 같아 팀원들에게 Git을 써보자고 이야기했었고, Git 사용방법을 팀원들에게 알려주면서 사용했던 기억이 있어서 Git 사용에 꽤나 익숙했었다. 무엇보다 혼자 공부한 내용을 GitHub에 push만 했었지, pull request나 branch를 생성하는 부분은 하나도 몰랐었는데 팀 프로젝트를 하면서 Git을 협업툴로써 어떻게 사용해야되는지 전체적인 흐름을 알 수 있어서 좋은 경험을 한 기억이 있었다.
JDBC 프로젝트에서 Git을 사용하면서 겪었던 여러가지 애로사항들을 GitHub에 정리했었다. Git을 사용하면서 어떤 문제가 발생했었고, 문제를 해결하기위해서 어떻게 처리했는지에 대한 내용들 위주로 정리했었던 기억이 난다.
아무튼 나는 Git을 사용하는 것에 있어서 긍정적이었고, 이번 JSP 프로젝트에서도 팀원들한테 화면부분 구현을 완료하고 1차적인 취합이 끝나면 Git을 사용해보자고 이야기하였다.
이번 글을 쓰게 된 이유는 JDBC에서 Git을 사용할 때 아쉬웠던 부분들이 많아서이다.
팀원들마다 컴퓨터경로가 달라 매 번 병합을 할 때마다 라이브러리 경로를 수정하고, 팀원들이 작성한 절대경로를 매 번 바꿔주어야하고, 이런 부분에 있어서 불편한 점들이 많았다.
이 부분을 해결하기위해 구글링을 열심히 해봤는데, gitIgnore를 이용해서 커밋할 때 파일을 제외할 수 있는 기능이 있었다. 이 기능을 알았을 때는 JDBC 프로젝트가 막바지여서 사용할 기회가 없어서 아쉬웠던 기억이 있었다. 그래서 JSP 프로젝트에는 gitIgnore를 사용해서 병합을 좀 더 효율적으로 사용해보고싶어 미리 공부해보자는 마인드로 정리글을 쓴다.
1. gitIgnore 파일 생성하기
gitIgnore의 존재는 알았는데, 도대체 어떻게 사용하는지를 몰라서 여러가지를 살펴보던 와중에 gitIgnore.io 라는 사이트를 발견했다. 사용중인 운영체제, 언어, IDE 키워드를 입력하면 이에 맞게 gitIgnore에 넣어야하는 텍스트를 자동으로 생성시켜준다. 여기에서 내가 원하는대로 텍스트를 수정하여 사용하면 기본적인 부분들은 ignore 처리가 되는 것 같다.
일단 가장 먼저 제외해야겠다고 생각했던 부분은 .project, .classpath이다. 해당 파일들은 이클립스에 종속되는 파일들인데, 팀원들의 컴퓨터환경이 다 다르기 때문에 컴퓨터마다 다르게 메타정보가 입력되어져 있다. 만약 이 파일들을 그대로 GitHub에 업로드하고 팀원들이 clone하게 된다면 메타정보가 일치하지 않기 때문에 정상적으로 실행되지 않을 것이다.
gitIgnore를 추가했는데도 classpath, project 파일이 계속 스테이지에 올라오길래 뭘 잘못했나 싶었다. 나중에 보니 gitIgnore.io에서 기본적으로 classpath와 project가 추가되어있지 않아서 내가 직접 추가했다.
1-1. Git cache 지우기
gitIgnore만 추가했다고해서 문제가 바로 해결되는 것은 아니였다. 파일을 추가해도 계속 classpath, project 파일이 스테이지에 올라오길래 무슨 문제인가 싶어서 구글링을 해봤더니 gitIgnore를 추가하기 전에 커밋을 했거나, git 폴더에 파일들이 올라와있으면 git 캐시에 해당 파일들을 추적하는 데이터가 남아있기 때문에 이를 없애주어야한다.
없애는 방법은 git 콘솔창을 띄운다음에
git rm -r --cached .
git add .
git commit -m "cache clear"
해당 문장을 실행해주어야한다. 콤마(.)의 위치를 유의해서 사용하도록 하자.
여기까지 했다면 gitIgnore 세팅은 완료된 상태이다. GitHub에 push할 경우 메타정보파일들은 빠지고 소스파일들만 GitHub에 올라가게 될 것이다.
2. 이클립스로 clone은 어떻게?
gitIgnore로 메타정보파일들을 제외하여 파일 업로드를 완료했다. 하지만 소스파일 그대로를 clone하면 정상적으로 작동하지 않을 것이다. 기본적인 프로젝트 정보가 세팅이 안되있기 때문에 이클립스에서는 단순한 폴더로만 인식하게 될 것이다. 이 부분을 해결해보자.
0. git에 올린 소스파일을 clone해서 git 폴더를 생성하고,
[New] - [Dynamic Web Project] 로 새로운 프로젝트폴더 생성하기
1. 생성한 프로젝트 폴더 클릭 후, 상단 바 [New] - [Import] 클릭
2. [General] - [File System] 클릭
3. From Directory에 clone한 소스파일이 저장되어있는 폴더를 경로로 설정하고,
아래와 같이 Advanced 옵션을 체크해준다.
- 정리하자면 clone한 소스파일을 새로 생성한 프로젝트 폴더에 Link 시키는 것이다. git에 push할 때는 소스파일들만 업로드되게 된다.
20211112 수정 : Create virtual folders는 체크하면 안된다. 가상폴더로 만들어서 읽기전용으로 파일을 링크하는건데, 이럴 경우 새로운 파일추가나 수정이 불가능해진다.
이 상태로 css 작업을 좀 진행하고 branch를 새로 생성해서 push해봤는데, 일단은 문제없이 진행이 되는 것 같다. 내일 팀원들한테 세팅방법, git의 기본적인 흐름과 기능들을 알려줄 생각인데 문제없이 작동되었으면 좋겠다는 생각이 든다. 아마 새로운 문제가 발견되면 이 게시글에 추가해서 쓰게 될 듯 하다.
나는 소스파일들만 추적하도록 했지만 이 외에도 여러가지 추적환경을 다루는 행동들을 형상관리(구성관리)라고 하는 것 같다. 소프트웨어 소스 코드 뿐 아니라 개발 환경, 빌드 구조 등 전반적인 환경 전반적인 내역에 대한 관리 체계를 뜻하는 것으로 보인다. 나중에 Spring 프로젝트를 할 때는 Maven이나 Gradle로 여러 라이브러리를 사용하면서 보다 복잡한 세팅이 되게 될 텐데, 미리 알아두는 것도 좋을 것 같다.
'기술지식' 카테고리의 다른 글
[Mybatis] Spring에서 Mybatis 세팅방법, 사이클 정리 (0) | 2021.12.21 |
---|---|
[React] JSX, State 간단 정리 (0) | 2021.12.17 |
[React] 초기 세팅방법 정리 (0) | 2021.12.17 |
[해싱, 암호화] 데이터를 암호화하는 방법 (0) | 2021.12.01 |
[Java] hashCode()와 equals() (0) | 2021.11.10 |
댓글