EveryDay.DevUp

[Unity] 버전 관리, 형상 관리 ( SVN, GIT ) - 개념 본문

R&D

[Unity] 버전 관리, 형상 관리 ( SVN, GIT ) - 개념

EveryDay.DevUp 2020. 6. 6. 00:57

● 버전 관리, 형상 관리

: 버전 관리나 형상 관리나 사실 상 같은 말이다. 작업물을 최신 버전과 이전 버전들을 가지고 있어서 어떤 상황에서도 언제든 원하는 상태로 돌릴 수 있도록 하는 것을 말한다.

: 버전관리, 형상 관리가 말을 어려워 보일지 몰라도 원리는 사실 간단하다. 작업물을 수정할 때, 수정하기 전에 복사해서 다른 이름으로 만들고, 수정한 작업물은 원래의 이름으로 저장하는 방식이다.

[ 복사본과 수정본이 존재 ]

: 원리는 간단하지만, 실제로 사람의 손으로 위의 작업을 한다면 여러가지 문제에 직면하게 된다. 작업물이 하나이고 작업자도 한 사람이라면 사람의 손으로 할 수 있다. 하지만 여러명이 하나의 작업물을 수정한다고 했을 때 작업 전의 상태가 모든 사람이 동일하게 가지고 있는 상태인가에 대한 확인이 필요하고, 동시에 작업을 할 수 없는 문제가 있다. 또한 작업물이 여러개라면 사람의 눈으로 작업 전과 후의 상태를 비교하는 것은 엄청난 시간이 필요할 것이다.

: 사람이 컴퓨터에서 하는 모든 작업은 1,0의 숫자의 나열에 불과하고, 그렇기 때문에 사람이 할 수 없는 비교도 할 수 있다. 예를 들어 그림 파일이 원본과 수정 파일이 있을 때 사람이 둘의 차이를 발견하기 위해서는 눈으로 하나 하나 비교하는 수 밖에는 없다. 하지만 컴퓨터에게 해당 파일을 비교하는 작업을 한다면, 원본과 수정 파일의 1,0의 숫자가 서로 다른 부분만을 체크하여 나타낼 수 있다. 이는 사람보다 더 정확하고 빠르다는 것을 알 수 있다.

: 사람이 기계를 만든 이유는 사람이 할 수 없는 문제를 해결하기 위함보다 사람의 편의성을 높이기 위해서 인데, 버전 관리 툴 또한 사람이 아닌 컴퓨터를 통해 작업의 효율성을 높이기 위함이다.

● SVN 버전 관리

: SVN의 버전 관리 방식은 하나의 서버에 작업물을 올리고 내려 받는 형태로 구성되어 있다.

① 사람1이라는 사람이 중앙 서버에서 A라는 작업물을 받은 후에 AA에 빨강으로 수정한 뒤 중앙 서버에 올린다.

② 사람2도 중앙 서버에서 동일하게 작업물을 받는데 이때는 A라는 작업물과 AA에 빨강으로 수정했다는 내용을 받는다.

③ 사람1, 사람2가 다운로드 받은 작업물을 수정하여 서버에 올리고, 다운로드 받는 과정을 반복하면서 작업물을 공유 한다.

▶ SVN은 파일을 관리할 때 최초의 생성한 파일과 수정한 파일의 차이점만을 기록하여 서버에서 가지고 있고, 이를 다른 사람이 다운받을 때는 원본 파일과 변동된 내용들로 최종 수정 파일을 만들어 낸다.

: SVN은 저장소가 하나이기 때문에 작업물을 올리는 순간 모두에게 공유가 가능하고 과정도 단순하여 직관적이다. 

: SVN은 저장소의 내용을 다운받을 때 변동되었던 내용을 다 받아야 되기 때문에 변동 내용에 비례하여 다운로드 받는 시간이 증가하며, 서버에 이슈가 생길 경우 SVN을 사용할 수 없는 문제가 있다.

● GIT 버전 관리

: GIT의 버전 관리 방식은 사용자의 컴퓨터에 로컬 서버의 개념을 두고 업로드와 다운로드를 로컬 서버를 통해서 하는 것이다.

① 사람1이라는 사람이 중앙 서버에서 A라는 작업물을 받은 후에 AA에 빨강으로 수정한 뒤 로컬 서버에 올린다.

② 사람1이 추가 수정 사항이 없다면 로컬 서버의 AA 작업물을 중앙 서버에 올린다.

② 사람2도 중앙 서버에서 다운로드를 받는데, 최신의 AA를 받는다.

③ 사람1, 사람2가 다운로드 받은 작업물을 수정하여 로컬 서버에 올리고, 다운로드 받고 최종 수정이 완료된 내용을 중앙 서버에 올리는 작업을 반복한다.

▶ GIT은 파일을 관리할 때 파일의 변동 내용이 있다면, 해당 파일의 스냅샷을 기록하여 저장한다. 이를 다운로드 받을 때는 스냅샷 파일을 다운로드 하게 된다.  GIT은 원본 파일과 수정한 파일의 전체 내용을 가지고 있는 것이다. ( 예를 들어 text1.txt [ "1234" ] 를 text1.txt[ "12345" ]로 수정 한 후 업로드하면 text1.txt(2)의 파일이 생기고 text1.txt [ "12345" ]의 내용이 모두 복사가 된다. 서버에는 text1.txt [ "1234" ], text1.txt(2) [ "12345" ] 파일 2개가 생긴다. ) 물론 이런식으로 계속 저장하면 저장 용량이 커지기 때문에 최종 수정본과 이전 버전의 차이점을 기록하는 작업을 한다. 

: GIT은 로컬 저장소가 있기 때문에 네트워크 연결 없이 자신의 PC에서 빠르게 작업을 할 수 있다. 파일을 다운로드 할때도 최종 스냇샵 파일만을 받기 때문에 속도가 빠르다.

: GIT은 로컬 저장소라는 개념으로 인해 복잡성이 올라가고 이로 인해 직관적으로 이해하기가 어렵다. 이 부분이 GIT의 최대 단점이라고 할 수 있다. 혼자 작업하는 사람이라면 혼자 개념을 이해하고 사용하면 되지만 여러 사람이 작업을 할 때는 모든 사람들에게 개념을 이해시켜야하는데 사람마다 이해도가 다를 수 있고 이해하는 시간이 다르기 때문에 어려움이 있다. 

참고 자료 : https://git-scm.com/book/ko/v2

 

Git - Book

 

git-scm.com