개발자꿈나무
소프트웨어 버전 관리 방식, Git, SVN 본문
- 공유 폴더 방식
- 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식
- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사
- 담당자는 공유 폴더의 파일을 자기 PC로 복사한 후 컴파일하여 이상 유무를 확인
- 이상 유무 확인 과정에서 파일의 오류가 확인되면, 해당 파일을 등록한 개발자에게 수정의 의미
- 파일에 이상이 없다면 다음날 각 개발자들이 동작 여부를 다시 확인
- 파일을 잘못 복사하거나 다른 위치로 복사하는 것에 대비하기 위해 파일의 변경 사항을 데이터베이스에 기록하여 관리
- 종류 : SCCS, RCS 등
* RCS (Revision Control System) : 여러 개발자가 프로젝트를 수행할 때 시간에 따른 파일 변화 과정을 관리하는 소프트웨어 버전 관리 도구로 소스 파일을 동시에 수정하는 것을 방지하고 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있음 - 클라이언트 / 서버 방식
- 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
- 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사하여 작업한 후 변경된 내용을 서버에 반영
- 모든 버전 관리는 서버에서 수행
- 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지를 출력
- 서버에 문제가 생기면, 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업은 중단
- 종류 : CVS (Concurrent Version System), SVN 등
- SVN (서브버전, Subversion)
- CVS를 개선한 것으로 아파치 소프트웨어 재단에서 2000년에 발표
- 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 반영(Commit)
- 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합
- 커밋할 때마다 리비전이 1씩 증가
- 클라이언트는 대부분의 운영체제에서 사용되지만 서버는 주로 유닉스를 사용
- 소스가 오픈되어 있어 무료로 사용 가능
- CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능
* trunk 디렉터리 : 몸통이라는 의미로 개발 과정에서 가장 중심이 되는 디렉터리. 안에 소스 파일과 추가 작업을 위한 서브 디렉터리인 branches 디렉터리가 존재
* branches 디렉터리 : 가지라는 의미로 메인 개발 과정과는 별도로 새로운 기능을 테스트와 같이 추가적인 작업을 수행하기 위한 디렉터리. branches 디렉터리 하위에 작업별로 디렉터리를 만들어 그 안에서 개발을 진행하고 이후 별도의 디렉터리에서 진행된 개발 결과를 trunk와 병합할 수 있음
주요 명령어 | 의미 |
add | 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록하며 add로 등록되지 않은 대상은 commit이 적용되지 않음 |
commit | 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용 |
update | 서버의 최신 commit 이력을 클라이언트의 소스 파일에 적용 commit 전에는 매번 update를 수행하여 클라이언트에 적용되지 않은서버의 변동 내욕을 클라이언트에 적용 |
checkout | 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받아옴 |
lock / unlock | 서버의 소스 파일이나 디렉터리를 잠그거나 해제 |
import | 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로한 번 사용하면 다시 사용하지 않음 |
export | 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아옴 |
info | 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시 |
diff | 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시 |
merge | 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합 |
* 먼저 import 작업으로 모든 소스 파일을 서버에 등록한 후 버전 관리는 checkout -> 작업 -> add -> update -> commit 과정으로 진행
- 분산 저장소 방식
- 버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식
- 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경된 내용을 로컬 저장소에서 우선 반영한 다음 이를 원격 저장소에 반영
- 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업할 수 있음
- 종류 : Git, DCVS 등
- Git (깃)
- 분산 버전 관리 시스템으로 2개의 저장소 (지역 저장소, 원격 저장소)가 존재
- 지역 저장소는 개발자들이 설계 개발을 진행하는 장소로 버전 관리가 수행
- 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳으로 자신의 버전 관리 내역을 반영하거나 다른 개발자의 변경 내용을 가져올 때 사용
- 버전 관리가 지역 저장소에서 진행되므로 버전 관리가 신속하게 처리되고 원격 저장소나 네트워크에 문제가 있어도 작업이 가능
- 브랜치를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅이 가능
- 파일의 변화를 스냅샷으로 저장하는데 이전 스냅샷의 포인터를 가지므로 버전의 흐름을 파악할 수 있음
* 브랜치 : 저장소가 처음 만들어지면 마스터 브랜치가 생성되고 이 브랜치에서 기본적인 버전 관리가 진행. 새로운 기능을 추가하는 작업은 새로운 브랜치를 만들어 작업을 수행하며 작업이 정상적으로 마무리되면 작업 내역을 마스터 브랜치에 병합! 각각의 브랜치는 다른 브랜치에 영향을 주지 않으므로 독립적인 여러 작업을 동시에 진행할 수 있음
주요 명령어 | 의미 |
add | 작업 내역을 지역 저장소에 저장하기 위해 스테이징 영역에 추가 '--all' 옵션은 작업 디렉터리의 모든 파일을 스테이징 영역에 추가 |
commit | 작업 내역을 지역 저장소에 저장 |
branch | 새로운 브랜치를 생성 최초로 commit하면 마스터 브랜치가 생성 commit할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리키며 '-d' 옵션으로 브랜치를 삭제할 수 있음 |
checkout | 지정한 브랜치로 이동 현재 작업 중인 브랜치는 HEAD 포인터가 가리키는데 checkout 명령을 통해 HEAD 포인터를 지정한 브랜치로 이동 |
merge | 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에반영함으로써 두 브랜치를 병합 |
init | 지역 저장소를 생성 |
remote add | 원격 저장소에 연결 |
push | 로컬 저장소의 변경 내역을 원격 저장소에 반영 |
fetch | 원격 저장소의 변경 이력만을 지역 저장소로 가져와 반영 |
clone | 원격 저장소의 전체 내용을 지역 저장소로 복제 |
* 먼저 init 명령으로 지역 저장소를 만들고 remote add 명령으로 원격 저장소에 연결한 후 add - all -> commit -> push 를 해줌. 이후 버전 관리는 fetch -> 작업 -> add -> commit -> push 과정으로 진행
728x90
'CS > 소프트웨어공학' 카테고리의 다른 글
SW / 보안 관련 용어 (0) | 2024.01.10 |
---|---|
빌드 자동화 도구 (0) | 2024.01.09 |
소프트웨어 형상 관리 (2) | 2024.01.09 |
UI 테스트 기법의 종류 (0) | 2024.01.09 |
UI 설계 도구 (0) | 2024.01.09 |