삼류 개발자의 애로사항
형상 관리 주요 개념 본문
0) Repository
말 그대로 저장소. 자신이 짠 소스나 파일들을 업로드할 곳이라고 생각하면 좋다.
1) Pull (사전적의미: 당기다)
저장소에서 저장된 소스들을 그대로 가져오는 작업을 한다.
2) Push (사전적의미: 밀다)
자신이 변경한 소스들을 그대로 날려버린다. 제일 신중하게 해야 하는 작업이다. 이 작업에는 Check가 없기 때문에 신중을 기해야 한다. 내 작업으로 누군가 하루 동안 작업한 것이 날아가 버릴 수 있다!
3) Commit (사전적의미: 의사 따위를 밝히다)
Commit 기능을 사용하는 형상관리 Tool(소스트리,Git 등)과 그렇지 않은 Tool(GitHub 등)로 나뉜다.
일단은 Commit을 사용하는 Tool 기준으로 설명하고 싶다. 크게 세 가지 기능으로 정의할 수 있을것 같다.
우선 Push전의 예열 작업이다.
Commit을 하지않는다면, Push조차 되지 않는다. 이 작업을 왜하냐면, 자신이 지금까지 작업한 소스를 Push할건데, Local에서 누군가 같은 시간대에 같은 소스를 작업할 수 있기 때문에 주의하라는 경고 차원에서 보내는 것이다. Commit 자체로 자신이 작업한 소스코드파일 자체를 보내는 것이 절대로 아니다.
그리고 또다른 이유는 히스토리에 남는다는 것이다.
이 부분은 Fetch 기능을 도와주면서, 일부 Tool에서는 자신이 어떤 Branch에서 어디까지 작업했는지 볼 수 있는 이력을 남겨주는 역할을 한다.
마지막으로 제일 중요한 이유, 자신이 변경한 내역의 소스의 Pull을 방지해주는 역할을 한다.
이런 체크를 하지않으면, Pull할 때 Repository의 Commit내역과 본인의 Commit내역이 다른데도 자신의 소스가 덮어씌워지는 불상사가 일어날 수 있다. Local과 Repoitory의 Commit내역들이 다름을 비교함으로써 소스코드의 내용이 덮어씌어지는 문제를 사전에 방지할 수 있게 된다.
4) Fetch (사전적의미 : 가져오다)
Commit 변경 내역을 최신화 하는 작업. Commit한 이력들이 추가되면서 Pull할 내역들이 최신화 된다. 내가 쓰던 Tool 소스트리에는 자동으로 일정 시간이 지나면 Fetch가 되긴했지만, 그래도 Pull/Push 전에는 꼭 눌러 소스를 최신화 시켰다.
5) Branch (사전적의미 : 나뭇가지 / 분점)
작업 내역들이 다양하고, 많아져서 분기를 만든 개념이라고 정리 할 수 있겠다.
하나의 Repository에서 모든 작업을 동시에 병행하는 것은 어려울 것이다. 사람이 2명, 3명이라면 협의가 간단하겠지만, 100명,200명이 넘는 곳에서, 자신이 작업하고 있는 환경에서 소스코드가 언제 어떻게 바뀔지 누가 알수나 있을까?
만약에 자신이 열심히 작업하던 소스코드 파일을 한 명도 아니고, 몇 명이 Commit하려고 기다리고 있는 상황이 빈번히 일어날지도 모른다. 그렇기 때문에 이런 공포를 최소화하기 위해서 나온 개념이 Branch이다.
보통 Master Branch를 중심에 두고, 메인 개발 담당, 테스트 담당, 결제 담당, UI/UX 담당 등의 여러 역할로 나누어서 작업을 하여, 업무를 조금더 효율적으로 나아가자는 것에 목표를 둔다.
이 Branch의 매력적인 부분은 저장소의 같은 파일의 소스 코드를 버전 별로 관리 가능하다는 점이다.
장점은 크게 두 가지가 있을 것 같다.
1. 다른 기능을 담당하는 곳에서 개발한 것을 Master Branch에 올릴 때, 내역이 저장될때 까지 기다려야 한다. 만약에 소스가 잘못되어지기라도 했다면, 아무것도 할 수 없고, 버그가 고쳐지길 기다려야하는 신세가 될 수 있다. Branch기능이 있음으로써, 분야별 기능이 안정화 되어서 다른 분야의 Branch가 문제가 생겨도 본인들의 Branch로 작업하면 된다.
2. Master Branch에서 잘되고 있는 소스코드 버전을 변경하는 것보다, 따로 실험 개발 버전을 만들어서 사용하는 것이 안전하다. 잘 운영되어지고 있는 Branch에서 실험적으로 몇번 테스트를 하려고 잘못된 소스코드를 올렸다가는, Master Branch에서 문제가 생겨 운영에서 손해가 생길 수 있다. 따로 Branch가 있다면, 따로 테스트가 가능하며 굳이 손해를 보지 않아도 된다.
6) Merge (사전적의미: 병합하다)
보통 Branch를 흡수시키는 것을 뜻한다.
주로 Local이나 더 이상 UPDATAE할 기능이 없는 소스코드의 Branch를 Master Branch에 추가하는 것을 의미한다.
추가되면서 모든 소스코드 및 파일들이 그대로 반영되어진다. 각 담당에서 개발한 기능들이 잘 돌아가는 것을 확인 하였다면, Master Branch로 병합하는 작업을 하게 되는 경우도 있다.
7) Stash (사전적 의미 : 숨기다)
Pull할때는 저장소에 있는 파일과 다른지 체크 또한 하게 되는데, 자신이 변경한 파일들이 많아 Commit 작업을 해야하는 경우에는, Pull에 실패할 수 있다.
이처럼 엄격하게 Pull을 Lock 할 때가 있는데, 이때는 다음 명령어를 치면 이를 무시하고 Pull을 받을 수 있게 된다.
git config --global rebase.autoStash true
정리하자면, Stash의 기능은 자신의 Commit 내역을 임시 저장소에 Stack 처리하여 숨기고/백업하고 Pull을 받은 다음 다시 원래대로 되돌리는 것을 뜻한다.
'개발 개념 정리' 카테고리의 다른 글
라이브러리 VS 프레임워크 (0) | 2023.08.24 |
---|---|
형상 관리 (0) | 2022.01.19 |
헷갈리는 DB 용어 (0) | 2021.09.02 |
정규화에 대해서 (0) | 2021.09.01 |
오라클(Oracle) 자료형 (0) | 2021.08.23 |