개발자가 배워가는 모든 기술은
1. 소프트웨어 개발을 조금이라도 편리하게 하기 위해, 기존의 불편한 점을 개선시킨 것입니다.
2. 평범한 사람들의 일상에서 사용하던 것들을 추상화하여 컴퓨터에 적용하고 개선한 것입니다.
깃도 마찬가지입니다.

 

 

1. 깃의 등장 배경

 

 

1.1 소스코드는 문서파일이다


일반적으로 프로젝트 소스코드는 형상관리시스템(VCS, Version Control System)을 사용한다.

형상관리시스템이란는 어려운 용어보다, 우선적으로 소스코드가 문서와 같다는 점부터 이해하자.

 

소스코드는 명령어를 프로그래밍 문법 규칙에 맞추어 적어놓은 문서일 뿐이다.

소스코드는 기본적으로 메모장 프로그램에 입력하는 작업과 완벽하게 동일하다.

 

소스코드 파일 .py .c .cpp .java 를 메모장으로 열어보고,

소스코드는 문서와 완벽히 동일한다는 것을 최우선으로 이해해야 한다.

 

 

1.2 문서 저장의 문제점

 

["게임과 문서의 저장"과 불러오기 비교]

 

게임은, 특정 시점을 save point로 저장하고 불러올 수 있습니다.

문서는, 하나의 파일을 수정하면 이전 시점으로 되돌릴 수 없습니다.

 

문서는 한 번 저장되면, 특정 과거 시점으로 되돌릴 수 없습니다.

해결법은 문서를 여러번 계속해서 저장하고, 필요하면 과거에 저장했던 문서를 불러와 다시 작성해야 합니다.

물론, 계속해서 문서 작업물이 쌓입니다.

 

소스코드는 문서와 동일합니다.

그렇기에 실제로 과거에는 소스코드를 일반 문서처럼 저장해 관리했습니다.

불편했어도 개발 볼륨이 크지 않았으며, 실력있는 개발자만 개발을 했기에 문제가 적어,

단순히 수정된 코드만 비교하여 반영하는 방법만으로 충분했습니다.

하지만 시간이 지날수록 개발 범위가 다양하고 복잡해졌고, 실력이 다양한 개발자가 투입되며 문제가 커져왔습니다.

 

*1)문서 저장과 게임 저장의 차이점과, 2)문서 저장의 단점을 명확히 이해해야 합니다. 

 

 

 

 

2. 소프트웨어 개발은 한 번에 가능한가?

 

소프트웨어 개발 프로세스

 

일반적인 회의록, 기획서, 회의 개요 문서만 작성해도, 한번에 가능한 문서는 없습니다.

소프트웨어 개발도 마찬가지입니다.

단순히 한두번의 분석, 설계, 구현 작업으로 프로그램을 만든다는 것은 불가능합니다.

프로젝트가 완성된 이후에도 고도화와 끊임없는 추가 요구사항을 반영해 수정해야 합니다.  

 

 

 

 

3. 프로젝트 소스코드 파일 단위 관리 예시 

VCS 가 없는 상태에서, 파일 단위로 프로젝트를 관리한다고 가정해 봅시다.

 

 

3.1 미니 프로젝트 예시

전제, 일정표, 파일 관리

 

 

3.2 프로젝트의 소스코드를 파일로 저장

수십 단계를 저장하여 관리해야 한다면, 과연 관리가 가능할까?

 

 

3.3 프로젝트의 소스코드 파일 수정

 

- 과거의 어느 시점의 문제만 수정하고 싶다면?

- 일부만 수정하고 싶다면?

- 기존 프로젝트에서 새로운 기능을 테스트 하고 싶다면?

 

 

3.4 프로젝트의 소스코드 파일 협업

통합 문제

 

소소코드를 문서처럼 파일 단위로 관리하기 힘든, 가장 중요한 이유

변경된 소스코드를 하나하나를 확인해서 변경된 부분을 수작업으로 확인 후 수정해야 하는 문제

e.g. 같은 함수를 여러명이 수정한 경우

 

 

 

 

 

 

참고) 47. GIT | 만화로 나누는 자유/오픈소스 소프트웨어 이야기 (joone.net)

 

47. GIT

리누스 토발즈는 리눅스 커널 개발을 시작하고 거의 10년 동안 CVS나 서브버전(SVN)과 같은 소스 관리 소프트웨어를 사용하지 않았다. 여러가지 불편함에도 불구하고 수많은 컨트리뷰터가 오픈소

joone.net