1. 형상 관리를 위한 Git
1-1. 소프트웨어의 형상
형상이란 사물의 생긴 모양이나 상태를 일컫는다.
그런데 소프트웨어에도 형상이 있다.
소프트웨어의 형상은 소프트웨어의 모양이나 상태를 의미하며, 크게 세 가지가 있다.
- WireFrame : 화면 설계서로 웹 페이지 및 앱의 윤곽을 보여주는 것이다. 서비스 기획서, 요구사항 명세서를 바탕으로 실제 사용자가 어떻게 우리의 서비스를 이용하게 할 것인지 그리고 그들에게 어떠한 경험을 제공하게 할 것인지 눈에 보이도록 설계하는 과정을 담은 설계서이다.
- Flowchart : 서비스의 흐름을 작성한 순서도이다. 만들고자 하는 화면들이 어떠한 흐름과 로직으로 실행할 것인지 도식화한 문서이다.
- Source Code : 만들고자 하는 서비스가 실제 실행될 수 있는 형태의 앱이 되려면 소스 코드를 통해 컴퓨터가 인지할 수 있도록 프로그래밍하는 과정이 필요하다.
하나의 소프트웨어는 다양한 모습의 형상을 가지고 있다. 이 형상들은 요구사항들이 변경되거나 추가되면서 지속적으로 변한다. 요구사항이 변경되면 디자인 문서에도 업데이트되어야 하고, 이러한 변경점은 소스 코드에도 문제를 미치게 된다. 이러한 과정을 통해 완성된 소프트웨어는 verification과정을 통해 버그가 발견될 수도 있고, 개선이 필요한 또 다른 요구사항이 발생할 수 있다. 이러한 과정이 반복되면서 하나의 프로그램이 완성될 수 있다.
1-2. 형상 관리
즉, 소프트웨어 개발 과정에서 변경점은 일어날 수밖에 없고 이러한 변경점들을 관리하는 것은 매우 중요한 업무이다.
이러한 활동을 형상 관리라고 부르며, 이는 소프트웨어 개발 프로세스 각 단계에서 소프트웨어의 변경점을 체계적으로 추적하고 관리하는 일련의 모든 활동을 뜻한다. 형상 관리를 통해 프로젝트의 리스크를 최소화하고 소프트웨어의 품질을 확보할 수 있다.
1-3. Git
Git은 소스 코드를 효율적으로 관리하기 위한 형상 관리 도구이자, 버전 관리 도구이다. 분산형 버전 관리 시스템의 한 종류이며, 빠른 수행 속도를 목표로 한다.
- 병렬 개발 - 같은 파일을 여러 명이 동시에 작업 가능. (Branch - Merge)
- 중앙 저장소의 데이터 소실 발생 시 원상 복구 가능.
- 체계적인 개발 가능, 배포 과정 간단.
- 빠른 속도, 단순한 구조
2. Git의 기본개념
Git을 더 잘 이해하려면 알아야 할 몇 가지 용어들이 있다.
- 원격 저장소(Remote Repository)
- 로컬 저장소(Local Repository)
- 클론(Clone)
- 작업 디렉토리(Working Directory)
- 스테이징 영역(Staging Area)
- 커밋(Commit)
2-1. 저장소(Repository)
저장소(Git repository)란 말 그대로 파일이나 폴더를 저장해 두는 곳이다. 그런데 Git 저장소가 제공하는 좋은 점 중 하나는 파일이 변경 이력 별로 구분되어 저장된다는 점이다. 비슷한 파일이라도 실제 내용 일부 문구가 서로 다르면 다른 파일로 인식하기 때문에 파일을 변경 사항 별로 구분해 저장할 수 있다.
Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
- 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소이다.
- 로컬 저장소(Local Repository): 각각의 개발자들이 개발하는 PC에 파일이 저장되는 개인 전용 저장소이다.
2-2. Clone
만약에 개발팀에 D라는 개발자가 합류하게 된다면, 가장 먼저 할 일은 원격 저장소에 있는 공동의 소스 코드를 자신의 로컬 저장소에 다운로드를 하여 작업을 시작할 것이다.
이렇게 원격 저장소의 소스코드를 로컬자 종소로 복사하는 과정을 Git에서 Clone이라고 한다. Git을 통해 Clone을 하게 되면, 로컬 저장소에서 발생하는 모든 변경점들이 Git에 의해 추적되고 관리되기 시작한다.
2-3. 로컬 저장소(Local Repository)
Git에 있는 로컬 저장소는 세 개의 논리적인 영역으로 나뉘게 된다.
1) 작업 디렉토리(Working Directory)
- PC에서 현재 작업 중인 디렉토리
- Git에서 관리 하지만, 추적은 하지 않음
- Untracked 상태와 modified/unmodified 상태의 파일들 존재
2) 스테이징 영역(Staging Area)
- 작업한 내용이 올라가는 임시 저장 영역
- Git에 의해 변경점 추적 관리되는 영역
- 커밋을 준비하는 영역
- Tracked 상태와 unmodified 상태의 파일들 존재
3) 로컬 저장소(Local Repository)
- 커밋들이 영구적으로 저장되는 영역
- 원격 저장소로부터 clone한 커밋들이 존재하는 영역
2-4. 커밋(Commit)
- 코드의 의미 있는 변경 작업들을 저장소에 기록하는 동작.
- 변경의 단위는 개발자마다 조직마다 모두 다르다.
- "커밋하다" - 변경점을 로컬 저장소로 저장하는 과정
2-5. Git 기본 플로우
- 원격 저장소의 소스코드를 다운로드(clone)
- 작업 디렉토리에서 작업한 내용을 스테이지 영역에 추가(add)
- 계속 추가하여 로컬 저장소에 저장하고 싶을 때 커밋(commit)
2-6. Pull
- 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정.
- 원격 저장소에 있는 다른 개발자의 커밋들을 받아온다.
2-7. Push
- 로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소로 보내는 과정.
- 반드시 로컬 저장소를 최신 상태로 유지해야 함. (충돌 방지)
3. Git의 기본개념 - 실습
실습에 앞서 PC에 https://git-scm.com/downloads에서 Git을 다운로드하여 default로 설치한다.
3-1. 기본 환경 설정
1) Git Bash 실행
2) 이름, 이메일 설정
- $git config --global user.name "이름"
- $git config --global user.eamil "이메일"
3) 기본 에디터 설정 및 확인
- $git config --global core.editor vim
4) 기본 설정 변경
- $vi ~/.gitconfig
5) 디렉토리 생성
3-2. 원격 저장소 생성
원격 서버를 개인이 직접 구축하여 운영하고 관리하는 것은 쉽지 않다. 따라서 이러한 것들을 대신해주는 웹 기반의 서비스가 이미 존재한다. ex) Github, GitLab, Bitbucket 등.
이 서비스들은 원격 저장소의 소스코드를 관리하는 기능 이외에도 많은 기능을 가지고 있다.
- 원격 저장소 관리
- 코드 공유
- 코드 리뷰
- 이슈 관리
- 팀원 관리
- 커뮤니케이션 협업 도구
- 위키
실제로 프로젝트를 운영하고 관리하는데 필요한 대부분의 기능들을 제공하고 있다. 그렇기 때문에, 대부분의 회사에서 원격 서버를 구축하여 사용하는 경우보다 기존의 플랫폼을 이용하는 경우가 많아지고 있다.
그중에서 Github는 가장 유명한 서비스이다.
- Github를 통해서 오픈소스 프로젝트로 협업하는 경우 무료로 사용이 가능하다.
- Private 저장소로 운영하는 경우 유료로 사용해야 한다.
- 전 세계 개발자들이 하나의 프로젝트 개발하는 것이 가능하다.
Gitlab도 Github만큼 유명한 서비스이다.
- Private 저장소로 운영시 무료(Community 버전)
- 상용화 S/W에 유용
- 주로, 기업에서 인트라넷에 연결해서 사용
기본 사용법은 Gitlab과 Github이 비슷하다. 이 강의에서는 Gitlab을 사용한다.
Github vs GitLab
GitLab에서 프로젝트를 생성하여 원격 저장소를 생성한다.
3-3. 로컬 저장소 생성
- cd ~/gittest
- mkdir my_project
- cd my_project
로컬 저장소로 이동했으면 $git init 명령어를 통해 디렉토리를 초기화를 해야 한다.
- git의 핵심 폴더인 .git 폴더가 생성
- master라는 기본 브랜치가 생성
.git 폴더를 통해 해당 프로젝트에서 변경되는 파일들에 대해 추적/관리를 할 수 있다.
3-4. 원격 저장소와 연결하기
방법 1.
- 로컬 저장소 생성
- 초기화
- $git init - 원격 저장소 연결
- $git remote add [저장소 별칭] [원격 저장소 주소]
원격 저장소를 origin 이름으로 연결
- $git remote add origin 'https://gitlab.com/~~~/codepresso.git'
방법 2.
- 로컬 저장소 폴더 생성
- 원격 저장소를 작업 폴더에 clone
- $git clone [원격 저장소 주소]
- $git clone 'https://gitlab.com/~~~/codepresso.git'
현재 등록된 원격 저장소의 상세 정보 확인
- $git remote -v