SW/DevOps

DevOps : 소스 코드 관리 : 기본 개념

얇은생각 2019. 11. 17. 07:30
반응형

소스 코드 관리 기본 구조

 

소스코드를 개발할 때는 공동의 작업뿐 아니라 개발자 개인의 작업에서도 버전 관리가 필수적입니다. Git의 저장소는 원격 저장소와 로컬 저장소, 두 가지가 있습니다. 원격 저장소는 다수의 인원이 소스코드를 공유하기 위한 공간입니다. 로컬 저장소는 개발자 개인을 위한 저장 공간입니다. 일반적으로 로컬 저장소에서 개발자들이 작업을 하고 공유를 위해서 원격 저장소로 내용을 업로드합니다. 업로드된 내용은 다른 개발자들이 사용하기 위하여 각자의 로컬 저장소로 복제할 수 있습니다.

먼저 Gitup에 로그인합니다. 화면에서 뉴 레파지토리 버튼을 클릭하고 레파지토리 이름에 ‘First¬Repository’를 넣습니다. 리드미 파일을 초기화하도록 체크하고 Create합니다. 레파지토리가 생성되었고, README.md 내용이 표시됩니다.

다음은 생성한 원격 저장소를 로컬 저장소로 복제해보겠습니다. 클론은 GitHub이 아니라 로컬에서 실행해야 합니다. 원격 저장소 정보는 통합 자원 식별자 URI로 표현합니다. URI는 www.gitup.com 다음에 사용자 계정, 그다음에 레파지토리가 위치하는 형태입니다.

먼저 GitHub에 접속해서 클론 원격 저장소 정보를 가져오도록 하겠습니다. GitHub에 로그인한 상태에서 레파지토리를 선택하면 이전에 생성했던 레파지토리가 표시됩니다. 우측에 Clone or Download 버튼을 클릭해서 레파지토리 정보를 클립보드로 복사해야 합니다. 이 URI 정보를 사용해서 로컬 PC로 저장소를 복제할 수 있습니다. 

 

Spring Tool Suite

Spring Tool Suite를 실행해서 앞서 설정한 대로 실행을 하고, 상단에 표시되는 메뉴 중에 윈도우 밑에 Preference를 선택하게 되면, 팀 아래에서 Git과 관련된 설정 정보들을 확인할 수 있습니다. 로컬 레파지토리 위치가 표시되고 있습니다. 여기에 로컬 레파지토리 저장소가 다운될 것입니다. Git GUI를 사용하기 위해서 레파지토리 뷰를 추가하게 되면, STS GUI에서 레파지토리 뷰를 사용할 수 있습니다.

클론 링크를 사용해도 되고 위 아이콘을 선택해서 클론할 수 있습니다. 아까 복사한 URI를 붙여놓고 자동으로 호스트와 레파지토리 패스는 들어가게 됩니다. 유저 정보와 패스워드를 입력한 다음에 Next를 선택하고 Finish하게 되면 GitHub의 Git 저장소가 로컬로 복제가 됩니다.

 

Commit

신규 파일을 등록하여 로컬 저장소에 반영시키는 것을 Commit이라고 합니다. Commit을 하면 변경 내역이 기록되며, 시간순으로 이력을 관리할 수 있습니다. Commit을 하면 40짜리 고유의 문자열이 생성되는데, 이를 통해서 각각을 식별할 수 있으며, 메시지를 통해서 내용을 구분할 수 있습니다. 따라서 Commit 메시지는 필수적으로 의미 있게 작성해야 합니다.

또한 소스코드 관리를 위해서는 Commit 작업의 단위를 버그 수정, 기능 추가 등 의미 있는 단위로 구분하는 것이 좋습니다. Commit 절차는 Git 관리를 위한 파일 등록부터 시작합니다. 개발자가 작업은 하지만 Git으로 관리하지 않는 공간을 워킹 트리 작업 공간이라고 합니다.

이 작업 공간의 내용 중 Git으로 관리하기를 원하는 내용만 Commit할 수 있는데, 이를 위한 곳이 인덱스입니다. 워킹 트리의 내용을 저장소에 Commit하기 위해서는 그 사이에 위치한 인덱스에 먼저 등록해야 합니다. 이것을 스테이징이라고 표현하기도 합니다.

스테이징을 활용하면 모든 변경사항을 한 번에 반영하는 것이 아니라 원하는 부분만 선별적으로 Commit할 수 있습니다.
그럼 STS에서 인덱스 등록 및 Commit을 진행해보겠습니다. 로컬 작업 전에 먼저 사용자 정보 이메일과 Name을 설정하겠습니다.

팀의 Git 설정으로 이동해서 Configuration 탭에서 엔트리를 등록합니다. User.email에 Gitup의 이메일 주소를 입력합니다. 그리고 User.name 항목을 또 추가합니다. User.name에 Name을 작성합니다. 

파일 앞에 물음표 모양은 아직 Git으로 관리되지 않는 것을 의미합니다. 팀 메뉴에서 Add Index를 통해서 인덱스에 등록하였습니다. 다시 Remove 인덱스를 통해서 제외시킬 수가 있고, 인덱스를 다시 등록하겠습니다. 등록된 파일을 Commit 해보겠습니다. 현재 Staged된 내용으로 내용이 나오게 되고, 마이너스를 하게 되면 다시 Unstaged로 넘어갑니다.

 

Push

Commit된 로컬 저장소의 변경 내용을 원격 저장소로 Push해서 다른 사람들과 공유하는 방법을 설명 드리겠습니다. 로컬 저장소에 변경된 내용을 원격 저장소로 업로드하는 것을 Push라고 합니다. 로컬 저장소와 원격 저장소의 싱크를 맞추면서 다른 사람들과 공동작업을 해나갈 수 있습니다.

STS에서 직접 Push를 실행해보겠습니다. Push할 프로젝트를 선택하고 팀 메뉴에서 Push Branch Master를 실행합니다. Push를 하게 되면 Push 결과가 표시되고 성공했습니다. GitHub에서 Push가 성공한 것을 확인할 수 있습니다. 업로드된 파일이 존재하는 것을 알 수 있습니다. 다른 사람이 원격 저장소에서 Push해서 내용이 변경되었다면, 그 변경 내용을 나의 로컬 저장소에도 반영할 필요가 있습니다.

 

Pull

원격 저장소에서 로컬 저장소로 내용을 당겨오는 것을 Pull이라고 합니다. Pull을 실행하면 원격 저장소에서 최신 변경된 내용을 다운로드하여 내 로컬 저장소에 적용하게 됩니다. Pull 테스트를 위해서 원격 저장소의 내용을 직접 수정하도록 하겠습니다.

GitHub을 통해서 바로 내용을 수정하고, STS에서 팀 메뉴에서 Pull을 실행해서 변경된 내용을 적용했습니다. 로컬 저장소의 상태가 최신 버전이 아닌 상태에서 이미 변경된 내용을 수정하는 경우에는, 즉 다른 사람이 원격 저장소에 업데이트한 최신 파일과 로컬 저장소의 파일 내용이 충돌하는 경우에 Push 명령은 이제 큐를 넣게 됩니다.

 

Merge

업데이트 내용을 확인하여 Merge 작업을 직접 수행해야 합니다. Merge를 제대로 하지 않게 된다면 다른 사람의 내용이 날아갈 수가 있습니다. 서버에서 내용을 수정하고 개인 로컬 레파지토리의 내용을 수정했을 때 Push를 했을 때 실패하는 것을 확인할 수 있습니다. 충돌 상황에 대해서는 직접 확인을 해서 Merge를 작업해줘야 합니다.

반응형