0. 학습 관점

더보기

우리가 배우는 모든 프로그래밍 기술은, 

  1. 폰 노이만 구조 이래 기본 원리와 기술 뿌리가 변하지 않았습니다.
  2. 소프트웨어 개발 과정에서 발생한 문제점을 개선시킨 것입니다.

Git 도 이러한 관점에서 소프트웨어 개발 문제를 개선시킨 하나의 프로그래밍 기술입니다.

 

 

Git 을 학습하는 방향은

소프트웨어 개발 과정에 어떤 문제가 있었는지 파악하고,

Git으로 어떻게 해결하는지 이해합니다.

 

이러한 문제와 원인 파악과 개선 방법의 이해는 모든 소프트웨어 개발 기술 학습에서 동일하게 적용할 수 있습니다.

 

 

 

 

 

1. 문서 관리의 문제점

더보기

1.1 목표

 

Git으로 해결해야 할 소프트웨어 개발 프로세스 문제를 파악하기에 앞서

문서라는 익숙한 작업에서 발생하는 문제를 먼저 파악합니다.

 

 

 

 

1.2 "게임 저장"과 "문서 저장"을  비교하여, 문제점 파악

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

문서는, 하나의 파일이 저장되면 과거의 특정 작업 시점으로 되돌릴 수 없습니다.

 

 

 

 

1.3 해결법

문서 내용 일부가 다른 경우 & 문서 파일 자체가 다른 경우

작업중인 문서를 저장할 때마다 새로운 파일을 생성해 별도로 저장합니다.

그리고, 필요시 이전에 저장한 문서를 불러와 작업합니다.

 

 

 

 

1.4 또 다른 문제

 

1. 계속해서 문서 파일이 쌓입니다.

2. 과거 문서는 재작성되어야 합니다.  

 

*

1) 문서 저장과 게임 저장의 차이점과,

2) 문서 저장의 단점을 명확히 파악하고 다음 단계로 진행합니다.

 

 

 

 

 

2. 문서 관리의 문제점과 소스코드 관리의 문제점 비교

더보기

2.1 문서와 소스코드

 

과거 소스코드를 문서처럼 관리하던 시절이 있었습니다.

문서 작업처럼 소스코드가 관리되면 어떤 문제가 발생되는지 알아봅니다.

 

 

 

 

2.2

소스코드는 명령어 문장을 프로그래밍 문법에 맞게 작성한 문서입니다.

소스코드는 메모장 프로그램에 한글, 영어 문장을 입력하는 작업과 완벽하게 동일합니다.

 

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

소스코드는 문서와 완벽히 동일한다는 것을 확인합니다.

 

소스코드는 문서와 완벽히 동일하다면,

소스코드를 문서처럼 관리할 때, 발생하는 문제도 동일합니다.


[문제]

1. 계속해서 소스코드 파일이 쌓입니다.

2. 과거 소스코드는 재작성되어야 합니다.  

 

 

 

 

3. 소스코드 관리 문제와 소프트웨어 개발

더보기

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

소프트웨어 개발 프로세스

 

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

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

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

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

 

 

 

 

3.2 저장 문제

 

미니 프로젝트 예시 - 전제, 일정표파일 관리

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

소스코드를 문서처럼 백업 파일로 프로젝트를 관리한다면, 개발자가 버전마다 일일이 프로그램을 압축해서 백업 파일로 저장하고, 문제가 생긴 지점을 찾아 수정해야 합니다. 이 방식은 모든 버전을 개발자가 백업해야 하므로 매우 비효율적입니다. 프로젝트가 진행될수록 백업 파일의 용량도 증가할 것입니다.

 

 

 

 

3.3 수정 문제

그리고 과거 특정 시점의 문제만 수정하여야 한다면, 모든 버전의 수정사항을 전부 확인해야 할 수도 있습니다.

기존 프로젝트에서 새로운 기능을 테스트하고 싶다면, 새로운 복사본을 만들어 새로운 백업 파일로 관리해야 합니다.

 

 

 

 

3.4 협업과 통합 문제

통합 문제

 

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

 

Main: "ABC" 상태

Test: "ABC" + "1" 추가 작업 

NewIdea: ABC" + "2" 추가 작업

Dev1: "ABC" + "D" 추가 작업

 

정상 협엽 결과:  "ABC12D"


 

 

 

4. 형상관리시스템과 Git

더보기

4.1 문서 관리의 한계점과 해결책

 

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

 

프로그래밍의 볼륨이 크지 않았고

실력 있는 개발자만 개발에 투입되었기에 문제가 상대적으로 적었습니다.

그렇기에 불편하다는 인식이 크지 않았습니다.

 

하지만 컴퓨터가 발전할수록 프로그램은 복잡해졌고, 그만큼 개발 범위가 다양하고 장기적으로 변해갔습니다.

실력이 다양한 개발자가 투입되며 관리 문제가 심각해지기 시작했습니다.

 

그래서 소프트웨어 개발 효율을 높이기 위해, 좀 더 효율적인 특별한 방법으로 소스코드를 관리해야 했습니다.


이러한 특별한 소스코드 관리 기술을 형상관리시스템(VCS, Version Control System)이라고 합니다.

Git 은 이러한 형상관리시스템의 한 종류입니다.

 

형상관리시스템 이란는 어려운 용어보다, 소스코드가 문서와 같아서 발생하는 개발 문제점을 먼저 이해하고

깃은 이 문제를 어떻게 해결하는지 파악하며, 해결 방법을 배워나가는 것이 Git 학습법이자 사용법입니다.

 



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

 

47. GIT

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

joone.net

 

 

 

 

4.2 버전

Git 은, VCS(Version Control System, 버전 관리 시스템)의 한 종류입니다.

버전은 프로그램의 일부 내용이 변경되거나 새로운 기능이 추가되는 등 어떤 유의미한 변화가 결과물로 나오는 것을 말합니다.

 

버전이라는 단어가 낯설겠지만, 사실 우리는 컴퓨터를 사용하면서 이미 버전 관리를 해본 경험이 있습니다.

 

  • 문서를 작성할 때를 떠올려 보세요. 문서 작업하는 도중에 다른 일을 처리하기 위해 문서를 저장하고 다른 작업을 할 수 있습니다. 그리고 다시 저장된 문서를 불러와서 작업을 진행 할 수 있습니다.
  • 게임도 마찬가지입니다. 게임이 진행된 상태를 저장하고, 저장된 게임을 불러와 이어서 진행 할 수 있습니다.
  • 그림판이나 포토샵으로 이미지를 작업할 때 ctrl+z 단축키를 누르면 한 단계씩 뒤로 갈 수 있게 해 주는 것도 하나의 버전 관리 입니다.

 

Git 은, 소프트웨어 개발에서 프로젝트 단위의 소스코드를 <저장>하고, <이름>으로 식별하고, <불러오기> 하는 편리한 기술일 뿐입니다.

 

ctrl+z 단축키를 눌러 한 단계씩 되돌리는 것처럼, 내가 원하는 시점마다 소스코드를 저장하고 되돌리는 것을 가능하게 해주는 소스 코드 버전 관리 시스템이 git 입니다.

 

 

 

 

 

5. 협업과 공유를 위한 GitHub

더보기

Git 으로 관리하는 프로젝트를, 클라우드로 공유한다면

팀 단위로 여러명과 동시에 프로젝트를 진행 할 수 있습니다.

 

Git 으로 관리하는 프로젝트를 드롭박스, 구글 드라이브처럼 클라우딩 서비스 하는 Git 호스팅 사이트 중 하나가 GitHub 입니다.