Git 개념 잡기 (Git 영역 살펴보기)
개발자로서 길을 걸어가면서 제일 중요하게 생각되었던 것이 있습니다.
무엇이든 개념을 잘 알고 있어야 한다는 것입니다.
개발자로 처음 회사에 입사해서 업무를 한다고 하면,
누군가 잘 만들어 둔 시스템 위에서 프로그래밍만 하는 경우는
유지보수할 경우나 주니어, 시니어 정도의 경력일 때나 할 수 있었던 것 같습니다.
물론 매니저급이 되어도 코딩만 하는 분들도 있습니다.
하지만 프로젝트에서 PM으로 성장하기 위해서는 전체적인 흐름을 잘 파악해야 합니다.
심지어 네트워크 구성까지도 고려를 해야 합니다.
그러기 위해서는 무엇이든 개념을 잘 갖추는 것이 매우 중요하다는 생각을 많이 하게 됩니다.
Git도 마찬가지입니다.
Git을 사용하는데 있어서도 실제 사용하는 회사에 입사한다고 했을 경우,
자신이 직접 저장소를 생성하는 일은 드문 일입니다.
이미 프로젝트는 다양하게 만들어져 있고,
클론(clone) 받고 브랜치(branch) 하거나
커밋(commit)하고 푸시(push)/풀(pull)하는 정도만 다룰 줄 아는 경우가 대부분입니다.
충돌이 발생했거나 자신의 작업 PC의 로컬저장소에 문제가 생겨서 복구를 한다거나 등의
어떤 이슈가 발생했을 때 개념을 잘 알고 있는 사람과 그렇지 못한 사람의 문제 해결 능력은 차이가 큽니다.
이제 그러한 점을 고려해 Git의 기초가 되는 Git의 개념을 알아보고자 합니다.
저도 오랫동안 SVN(Subversion)을 이용하다
Git을 사용하면서 처음 적응하는데 시간이 필요했습니다.
기본 동작 방식이 SVN을 비롯한 여타 다른 중앙집중형 VCS와는 달랐는데,
그래서인지 Git을 배우려면 다른 VCS(Version Control System)를
사용하던 경험을 버려야 한다는 얘기도 나오는 것 같습니다.
Git은 SVN과 같은 VCS와 가장 큰 차이점은 데이터를 다루는 방법입니다.
SVN과 같은 VCS은 변경된 정보만 시간 순으로 기록합니다. 이를 델타(Delta-차이점)기반 VCS라 합니다.
반면에 Git은 전체를 시간 순으로 기록합니다. 이를 스냅샷(Snapshot)기반 VCS라 합니다.
Git의 동작을 이해하기 위해서는 기록(저장)되는 영역에서 3가지와 파일의 상태에 대해서 이해해야 합니다.
기록(저장)되는 영역에 있어서는 Working Directory(워킹 디렉토리), Stage(스테이지), Repository(저장소)입니다.
물리적으로 실제 기록되는 영역은 워킹 디렉토리와 저장소이며 스테이지는 임시 저장 공간입니다.
앞서 Git을 설치 후 우리는 처음으로 저장소를 만들어 봤습니다.
firstrepo 디렉토리를 만들고, $ git init 를 실행해 Git 초기화를 진행한 것이 그것입니다.
내 작업 PC에서 firstrepo 디렉터리를 만들었던 순간까지는
다음과 같이 그냥 디렉토리에 지나지 않았습니다.
꼭 무슨 내가 너의 이름을 불러주기 전에는 폴더에 지나지 않았다.. 같은.. ㅎㅎ (미안합니다.)
여기서 $ git init 를 실행하면
Git이 firstrepo 디렉터리를 Git 영역으로 인식하기 시작하고,
워킹 디렉토리, 스테이지, 저장소라는 3개의 영역으로 구분하고,
master라는 기본이 되는 브랜치 하나를 만들게 됩니다.
그러한 모습을 그림으로 나타내 보면 다음과 같다고 할 수 있겠습니다.
Git이 버전관리를 하는 입장에서는 이 3가지 영역으로 나눠서 동작하게 됩니다.
- 워킹 디렉토리(Working Directory) : 실제 작업하는 영역
- 스테이지(Stage) : 저장소에 저장할 내용을 임시로 보관하고 있는 영역
- 저장소(Repository) : 스테이지의 내용을 스냅샷으로 최종 저장해 놓는 영역
master 브랜치는 Git영역에서 하나의 작업자(개발자)라고 생각해 봅시다.
master가 코딩을 하게 되면 파일을 생성하거나 수정하게 되는데 이러한 작업이 워킹 디렉터리라는 공간에서 이뤄지게 됩니다.
작업이 완료되면 master는 저장소에 저장할 내용을 임시로 스테이지에 담아두게 됩니다.
스테이지에 저장할 내용이 모두 정리가 되면 master는 스테이지에 구성한 내용을 저장소에 최종 저장하게 됩니다.
Git영역에서 지켜야 할 대표적인 규칙이 있습니다.
작업은 워킹 디렉토리에서 하고,
저장소에 기록하기 위해서는 반드시 스테이지 영역에 임시로 정리를 해야 한다는 것입니다.
Git의 논리 구조를 보면,
실무에서 실제 이뤄지는 개발 과정이
Git영역이라는 가상의 공간에 녹아져 있다는 생각을 하게 됩니다.
보통 웹사이트를 운영한다고 했을 때,
개발 서버와 테스트 서버 그리고 운영 서버로 구성합니다.
개발자는 개발 서버에서 개발을 진행합니다.
작업을 하면서 필요한 단위 테스트까지 하게 되는데
모든 개발이 완료되면 테스트 서버라는 곳에 올려서 최종 QA를 진행하게 됩니다.
이 테스트 서버를 스테이지 서버라고도 하며
스테이지 서버는 실서비스에 준하는 환경입니다.
이렇게 모든 확인이 완료되면 실제 서비스가 되고 있는 운영 서버에 배포하여 적용을 마치게 됩니다.
Git에서 master와 같은 브랜치가 개발자가 되고,
워킹 디렉토리가 그 개발자가 실제 작업을 하는 공간인 개발서버라 볼 수 있으며,
실제 적용을 위해 스테이지 서버에 올리는 과정을
워킹 디렉토리에서 스테이지 영역으로 올리는 것과 비슷합니다.
스테이지에 올린 내용을 최종 실제 서비스에 배포해 적용하는 것이
스테이지 영역에서 저장소로 기록하는 것과 같다고 볼 수 있습니다.
Git에서 워킹 디렉터리에서 스테이지 영역으로 등록하는 명령어는 add이며,
스테이지에서 저장소로 기록(저장)하는 명령어가 commit 입니다.
실세계와 Git세계로 표현해 보면 다음과 같습니다.
'코딩해보니 > Git' 카테고리의 다른 글
[Git_13] Git 개념 잡기 - Git에서 파일 상태 이해 하기 (0) | 2022.11.18 |
---|---|
[Git_12] Git 개념 잡기 - 워킹 디렉토리, 스테이지, 저장소 (0) | 2022.11.17 |
[Git_10] GitHub(깃허브) 사용하기 - 서버(원격) 저장소 만들기 (0) | 2022.11.13 |
[Git_09] GitHub(깃허브) 사용하기 - GitHub 가입하기 (2) | 2022.11.12 |
[Git_08] 비주얼 스튜디오 코드(Visual Studio Code = VSCODE) 설치하기 (0) | 2022.11.11 |
댓글