일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 플로이드워셜
- 이진탐색
- 토비의스프링
- sope
- 그래프
- BinarySearch
- Java
- 구현
- 징검다리
- 자바
- 스프링
- Spring
- 스프링프로젝트 시작하기
- bitmasking
- 이진검색
- 알고리즘
- Spring이란
- 카카오인턴
- Singtone
- 가장먼노드
- @Profile
- 전화번호 목록
- 플로이드와샬
- 쇠막대기 문제
- Algorithm
- 스프링이란
- 11723
- 프로그래머스
- 카카오
- 백준
- Today
- Total
육감적 코딩
[Git 교과서]1장. 깃과 버전 관리 본문
1.1 버전관리
1.1.1 버전이란
사전적의미로
이전의 것과 다른 또는 약간비슷한 것
서브버전은 무엇일까요 ?
보통 버전과 버전 사이에도 코드가 수없이 변화되며 이 중간에도 버전이 있습니다. 이처럼 버전과 버전 사이에 변화된 것을 서브버전이라고 합니다.
이러한 버전의 순자나 기호 역시 일련의 규칙들이 있습니다. 버전을 부여하려면 소스 코드를 구별할 수 있는 의미 있는 변화가 있어야 합니다. 개발 도중 임시로 작업한 것을 버전이라고 말하지는 않습니다.
1.1.2 버전 관리는 왜 필요할까?
개발 도중에는 많은 기능이 추가되고, 수많은 코드가 변경됩니다. 변경되는 동안 코드들은 잠시 불안정한 상태가 되고, 이후 정상적인 테스트와 동작을 확인하고 나면 다시 안정된 상태의 코드가 됩니다.
개발 또는 테스트하는 과정에서 불안정한 코드가 있다면 계속 이어서 작업하기 불안할 것입니다.
이때는 이전상태로 돌아가 다시 시작할 수 있는 코드의 복귀(포인트) 지점이 필요합니다.
코드 복귀 지점은 반드시 안정된 코드 상태를 기준으로 설정해야 합니다. 복귀 지점을 기록해 두면 좀 더 자유롭고 안정적으로 개발할 수 있습니다.
1.2 버전 관리 시스템
1.2.1 버전관리 소프트웨어
코드와 컨텐츠의 변화를 관리하고 추적하는 소프트웨어를 버전 관리 시스템(VCS, Version Control System)이라고 합니다.
VCS에서 버전 파일들을 관리하고 저장하는 공간을 저장소(repository)라고 합니다.
현재 사용하는 VCS는 크게 집중형과 분산형, 두 종류로 구분할 수 있습니다.
집중형
하나의 메인 중앙 서버에서 개발 구성원의 모든 소스 코드를 통합적으로 관리합니다.
클라이언트-서버 모델이라고도 합니다.
장점: 시스템을 운영하기 수월
단점: 중앙 저장 공간인 서버에 문제가 생기면 모든 개발자가 접근 불가. 여러 개발자가 점근하면 충돌 발생하기에 코드 수정을 안정적으로 할 수 있게 잠금 모델을 적용
잠근 모델
보통 다수의 클라이언트가 서버에 동시 접속하곤 합니다. 파일 하나를 다수의 사용자가 동시에 접근하여 수정하려고 한다면 충돌이 발생합니다. 먼저 파일을 수정하고 있다면 수정을 못하도록 잠금을 설정하여 방지하는것.
분산형
여러 저장소에서 각 버전별 소스를 개별 보관.
분산 저장소는 P2P방식으로 공유. 각 개발자에게 공유 가능한 저장소 사본을 제공합니다. 서버는 각 저장소 자료를 동기화하고 중개하는 역할만 수행.
메인 서버에 문제가 생기더라도 지속적으로 개발할 수 있습니다.
1.3 깃
- 대표적인 분산형 버전 시스템. 원격 저장소와 별개로 개발자 각각의 로컬 컴퓨터에 완벽한 복제본 소스 코드를 저장할 수 있습니다. 완벽한 복제본이 있으면 매번 중앙 저장소를 조회하지 않아도 개발을 진행할 수 있습니다.
- 네트워크나 인터넷이 연결되어 있지 않은 상태에서도 로컬 컴퓨터의 소스 코드만으로 버전을 관리할 수 있습니다. 작업 후 나중에 인터넷에 연결되었을 때 동기화만 하면 됩니다.
- 원격 저장소로 많은 개발자의 저장소와 연결하거나 동기화 작업을 할 수 있습니다. 또 직접 만든 새로운 소스 코드를 배포하거나 내려받은 소스 코드를 수정한 후 다시 병합(merge) 할 수 있습니다.
1.3.1 백업 기능
분산형 깃은 자신의 로컬 컴퓨터에서 독립적으로 소스의 버전 관리를 할 수 있습니다.
깃을 사용하면 코드를 원격 저장소에 저장할 수 있습니다. 또 로컬 컴퓨터의 저장소를 동기화하여 원격 저장소에 백업합니다. 여러 공간에서 원격 저장소에 저장된 내용을 다시 내려받아 프로젝트 개발을 이어서 할 수 있습니다.
1.3.2 협업 개발
코드 공유
책임과 기록
깃은 변경된 모든 이력을 저장합니다. 깃은 커밋(commit)을 거쳐 모든 코드의 수정 이력을 기록합니다. 컷밋으로 저장된 원본 객체는 수정할 수 없습니다.
원격 공유
깃에서는 원격 저장소가 중앙 서버 역할을 합니다.
자신의 코드 저장소를 원격 서버에 푸시(push)하여 저장(동기화)합니다.
또 다른 개발자의 소스를 원격 서버에서 풀(pull) 또는 페치(fetch)하여 언제든지 내려받을 수 있습니다.
병합
깃은 하나의 소스 코드를 여러 가지 브랜치로 분기하여 독립된 기능을 구현할 수 있습니다.
필요하다면 각 브랜치를 하나로 병합하기도 합니다. 깃에서는 다양한 병합 알고리즘을 제공하기 때문에 이를 이용하여 소스 코드의 충돌을 최소화하고 최종 코드를 쉽게 유지할 수 있습니다.
공개
코드를 외부에 공개함으로써 내부 개발자가 만든 기능 한계를 극복하고 외부 개발자와 협업할 수 있습니다. 외부 개발자는 원격 저장소를 포크(fork)하여 소스 코드의 버그를 수정하거나 기능을 개선할 수 있습니다. 또 수정한 소스 코드를 풀 리퀘스트(pull request)하여 기존 코드에 병합할 수도 있습니다.
1.4 깃의 동작 한눈에 보기
- 초기화: 폴더를 깃 저장소로 변경합니다.
- 커밋: 변경된 코드의 이력을 기록합니다.
- 브랜치: 분리 격리된 코드 이력을 기록합니다.
- 병합: 기존 이력과 분리된 이력을 통합합니다.
- 푸시: 로컬 저장소의 이력을 서버로 전송 및 공유합니다.
'정리 > Git' 카테고리의 다른 글
[Git 교과서]7장. 임시 처리 (0) | 2021.11.30 |
---|---|
[Git 교과서]6장. 브랜치 (0) | 2021.11.23 |
[Git 교과서]5장. 서버 (0) | 2021.11.21 |
[Git 교과서]4장. 커밋 (0) | 2021.11.21 |
[Git 교과서]3장. 깃 개념 잡기 (0) | 2021.11.12 |