본문 바로가기
EXTERNAL ACTIVITY/Code Presso -웹개발 트랙 체험단-

<코드 프레소 웹 개발 트랙 > Git 입문

by jaeaemin 2022. 1. 13.

코드 프레소 웹 개발 트랙의 "실무자가 알려주는 Git 입문" 내용입니다.

 

 

 형상

   - 사물이 생긴 모양이나 상태를 의미함

   - 소프트웨어에서의 형상  

       하나의 소프트웨어는 다양한 형태의 형상을 갖고 요구사항이 변할 때마다 형상 또한 게속하여 변하게 된다.

           (1) 와이어 프레임 :  화면 설계서로, 실제 사용자가 어떤 서비스를 제공 받을지 Ui/ UX 표현 등

           (2) Flow chart :  프로그램이 어떠한 흐름으로 진행되는지 도식화한 것 

           (3) 소스 코드 

 

 

형상관리 (SCM) 

소프트웨어 개발 프로세스 각 단계의 소프트웨어 변경점을 체계적으로 추적&관리하는 일련의 모든 활동을 의미함

형상관리는 변경점을 관리한다는 의미로 복잡한 로직과 코드에서 누군가에 의해 변경되는 부분등을 놓치지 않고 관리 추적하여 제품의 무결성을 향상시킬 수 있고 이를 통해서 프로젝트의 리스크를 최소화하고 품질을 보장할 수 있다.

 

형상관리의 대상

  - 소프트웨어 개발 모든 단계에서 발생하는 산출물들이 형상관리의 대상이 될 수 있다.

       [ 요구 사항 도출 단계 ] : 서비스 정의서 , 요구사항 명세서 

       [ 디자인 단계 ]             : 스토리보드 , 와이어프레임 , 프로토 타입 , SW 아키텍쳐 문서 

       [ 구현 단계 ]                : 소스코드 문서

       - 그 외로 API 문서 , 개발자 가이드 문서 등 

 

 

GIT 

GIT은 형상관리의 대상 중 구현 단계의 소스코드 문서의 형상관리를 도와주는 도구로 '버전 관리 도구'라고도 불린다.

리눅스의 개발자가 BitKeeper를 베이스 모델로하여 Git이라는 도구를 개발하게 됨

 

 GIT의 목표 

                    1. 빠른 속도

                    2. 단순한 구조

                    3. 비선형적인 개발 ( 수천 개 동시 다발적인 병렬 개발과 공유 )

                    4. 완벽한 분산 ( 분산 집중형 버전 관리 )

                    5. 리눅스 커널과 같은 대규모 프로젝트에 용이

 


중앙 집중형 버전 관리 CVCS / CVS, SVN

분산 집중형 버전 관리 DVCS / Git, Mercurial
원격 서버에 모든 자료들을 저장하고 개별 사용자들은 원하는 문서 파일을 불러들어서 각 작업을 진행한다.
작업을 완료하면 다시 원격 서버로 완료한 작업물을 송출한다.



 - 중앙 서버와 네트워크 연결이 되지 않는 경우 파일을 가져올 수 없음


 - 중앙 서버의 코드가 손실이 된다면 복구하기 힘들다



원격 서버에 공동으로 저장되는 문서들이 full set으로 위치함
동시에 각 개발자들의 로컬 저장소에도 동일한 full set의 소스코드가 존재함.


-동일한 파일에 대해서 각 개발자들이 수정하고 빌드 & 확인 가능하다.

-네트워크가 연결되지 않아도 로컬 저장소에서 작업이 가능하다.

-네트워크 연결이 성공하면 원격 서버에 나의 full set을 업로드 한다.

- 중앙 서버의 저장소의 손실이 일어나도 다른 local의 저장소를 그대로복원하기 때문에 risk를 줄일 수 있다. 

 

 

 

GIT의 저장소

 > 원격 저장소 ( Remote Repository)  =>  원격 서버의 저장 공간

 > 로컬 저장소 ( Local Repository )  => 각 개발자의 데스크 탑에 위치하고 있는 저장 공간 

 

Clone 

원격 저장소의 소스코드를 로컬저장소로 복사하는 과정으로 그 이후 로컬 저장소에서 생성되는 변경점들이 Git에 의해 추적되고 관리된다.

 (ex) 개발팀에 새로 들어온 신입의 PC에 Clone을 통해 원격 저장소에 저장된 문서들을 복사하여 위치 시킨다. 

 

 

 

로컬 저장소의 분류


 

작업 디렉토리 (Working Directory)

  • PC 에서 현재 작업중에 있는 디렉토리 
  • Git에서 관리는 하나 추적은 하지 않음

 

스테이징 영역 ( Staging Area )

  • 작업한 내용이 올라가는 임시 저장 영역
  • Git에 의해 변경졈 추적 관리되는 영역이다
  • 커밋을 준비하는 영역 

 

로컬 저장소 ( Local Repository )

  • 커밋들이 영구적으로 저장되는 영역
  • 원격 저장소로 부터 clone 한 커밋들이 존재하는 영역 ( 완성된 commit들이 위치함 ). 

 

Commit 

 - git에서 가장 의미있는 변경 단위로 개발자나 조직마다 단위의 크기는 달라짐 

 - "커밋하다" : 변경점들을 로컬 저장소에 영구적으로 저장하는 과정을 뜻한다.

 - 커밋의 내용의 예시로는 커밋ID, 개발자 정보, 날짜 정보, 커밋 메시지(커밋이 왜 필요한지에 대해), Fix넘버 테스트 방법 ...

 - 커밋의 단위와 커밋 메세지의 양식은 개발자 or 조직의 정책마다 달라질 수 있다. 

 

 

Git의 기본 플로우 

  1. 원격저장소에서 필요로 하는 소스코드를 다운로드 한다  (clone)
  2. 작업 디렉토리에서 변경하고자 하는 내용에 대해 소스코드를 수정한다.
  3. 스테이지 영역에 변경한 내용을 추가한다 (add)
  4. 의미 있는 변경점들이 쌓이길 대기 한다.
  5. 최종적으로 로컬 저장소에 저장할 커밋을 만든다. (commit)
  6. 로컬 저장소에 영구적으로 저장한다. 

 

Pull

원격 저장소에 있는 다른 개발자의 커밋들을 받아옴

( 커밋을 가져온다, 커밋을 땡겨온다 , 커밋을 풀한다 )

 

Push

로컬 저장소에서 만든 커밋을 원격저장소로 업로드 함

( 커밋을 업로드한다, 커밋을 푸쉬한다. ) 

push 전에 현재 다른 커밋들을 반영하기 위해 Pull을 진행한 후 push 한다. 

 

 


Git 플로우의 예시 

 새로운 프로젝트에 참여한 A의 PC에 Clone을 통해서 자신의 로컬 저장소에 원격 저장소에 저장된 형상을 가져온다.
 가져온 형상에서 수정이 필요한 소스코드들을 Working Directory 내에서 수정하여 Staging area로 ADD 한다.
 새로운 수정본들이 add를 통해 쌓이고 의미있는 변경점들이 구축된다면 Local Repostory에 commit 한다.
 그 후 로컬 저장소는 원격 저장소에서 이때까지 수정된 내용을 위해 git pull을 하여 새로운 변경점들을 추가한다.
 별다른 문제가 없다면 이때까지 수정된 변경점들을 로컬 저장소에서 원격 저장소로 git push 한다.

 

 

 

 

GitBash 설치

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

아래 링크를 통해 알맞은 버전과 OS 에 맞춰서 설치를 진행하면 된다. 

기존 맥의 터미널을 사용하던 나는 코드 프레소 강의를 진행하면서 다른 윈도우 PC를 통해서 설치를 새로하여서 진행했다.

다양한 OS를 통해 Git을 경험할 수 있는 계기가 될 수 있을 것 같다. 

 

 

Git이 설치 되었다면 먼저 Git의 저장소들과 연결할 때 내가 누군지 알리기 위해 이름, 이메일을 설정해야 한다.

설정하는 방법은 gitbash나 terminal을 통해서 다음의 명령어를 입력할 수 있다. 

 

GIT의 이름과 주소 설정 

$ git config --global user.name " 설정할 이름 "
$ git config --global user.email " 이메일 주소 "

 

기본 에디터를 vim으로 설정

$ git config --global core.editor vim

 

이때까지 설정한 정보를 확인 하는 방법 

$ git config --global --list

 

이때까지 설정한 정보는 global 변수로 git을 사용하면서 게속해서 사용하게 된다.

이러한 기본 환경 설정은 파일 형식으로 저정되는데 이를 파일 형식으로 열고 변경하는 것도 가능하다.

$ vi ~/.gitconfig

블로그를 작성하는 맥 OS의 PC에서는 위와 같이 설정된 변수들을 확인 할 수 있다.

앞으로 진행될 강의에서는 ~/gittest라는 폴더를 로컬저장소의 기본 폴더로 사용한다 ( ~ : root ) 

 

원격 저장소 

앞으로 학습할 GitHub와 GitLab은 git 프로젝트 원격저장소로 효율적인 관리를 지원하는 웹 기반의 플랫폼 서비스이다.

 

GitHub  

오픈 소스 프로젝트로 협업하는 경우 무료 , Private 저장소는 유료로 책정 

전세계 개발자들이 하나의 프로젝트 개발하는 것이 가능하도, 오픈소스 프로젝트 생태계 확장에 기여

 

GitLab

Private 저장소로 운영해도 무료이다 (community 버전)

상용화 SW에 유용하고 주로, 기업에서 인트라넷에 연결하여 사용한다. 

- 코드프래소의 강의에서는 GitLab을 사용하여 실습을 진행한다.

GitLab의 원격 저장소를 위한 Private한 프로젝트(원격 저장소)를 생성하고 Clone을 통해서 원격 저장소의 주소를 HTTPS 형식의 주소로  가져와서 로컬 저장소와 원격 저장소를 연결하게 된다.

 

 

 

 

로컬 저장소 생성 

$ cd ~/gittest
$ mkdir my_project
$ cd my_project 
	// gittest 디렉터리로 이동한 후 새로운 my_project 디렉터리를 생성
  
$ git init 
	// git을 현재 폴더에 생성 (.git폴더) 
	// 이와 함께 master라는 기본 브랜치가 생성된다.

이로써 현재 내 PC에 로컬저장소를 생성완료 하였고, 이제 이 저장소를 원격저장소와 연결한다.

 

 

원격 저장소와 로컬 저장소 연결 

GitLab에 나의 원격 저장소에 대한 웹 주소를 알아내기 위해 Clone을 누른다.

HTTPS 형식으로 가리키고 있는 나의 원격 저장소 주소를 복사한다. 

 

원격저장소를 쉽게 다루기 위해 길고 긴 https 주소형식이 아닌 이름으로 변경하자 

$ git remote add orgin ' 나의 저장소 https 주소 '
$ git remote -v

remote add를 통해 원격 저장소 주소를 이름으로 변경하고 remote -v를 통해 원격 저장소의 정보를 확인할 수 있다.

 

 

 

 


코드 프레소에서 제공받은 첫 강의는 git에 대한 내용이었다.

이전에도 학습한 부분이지만 다시 한번 새로 짚고 넘어가면서 잊었던 개념들을 새로 확립할 수 있었던 계기가 되었던 것 같다.

-코드프레소 Java 웹 개발 체험단 활동 중

-코드프레소 웹 개발 트랙의 GIT 형상관리 내용입니다.

반응형