정보처리기사 필기 2과목 - 소프트웨어 개발 : 버전 관리 도구 P.289
[1] 소프트웨어 버전 관리 도구
1. 제품 소프트웨어 버전 등록
- 제품 소프트웨어 버전 관리는 소프트웨어 개발과 관련하여 코드와 라이브러리, 관련 문서 등 시간에 변화에 따른 변경을 관리하는 전체 활동
1) 제품 소프트웨어 패키징의 형상 관리
- 제품 소프트웨어에서 형상 관리 목적은 기본적으로 작성된 패키지의 변경 내용을 관리하기 위함
- 소프트웨어의 변화를 시간에 따라 기록하고 특정 시점의 버전을 다시 꺼내 올 수 있도록 관리하는 체계를 의미
1-1) 제품 소프트웨어의 형상 관리 중요성
- 제품 소프트웨어는 지속적으로 변경되는데, 이에 대한 개발 통제가 중요
- 제품 소프트웨어의 형상 관리가 잘되지 않으면 배포판의 버그 및 수정에 대한 추적의 결여와 무절제한 변경이 난무할 수 있음
- 형상 관리가 잘 되지 않으면 제품 소프트웨어의 가시성(Visibility) 결핍이 일어나며 전체적인 조망이나 Insight가 결여되어 장기적인 관리 체계에 문제를 야기할 수 있음
1-2) 제품 소프트웨어의 형상 관리 역할
- 이전 리비전이나 버전에 대한 정보에 언제든지 접근이 가능하여 배포본 관리에 유용
- 불필요한 사용자의 소수 수정을 제한
- 동일한 프로젝트에 대해 여러 개발자가 동시 개발 가능
- 에러가 발생했을 경우 빠른 시간 내에 복구 가능
- 사용자의 요구에 따라 적시에 최상의 소프트웨어 제공 가능
형상관리 추가 정보 ▼
2023.01.27 - [정보처리기사 필기] SW 개발 : 통합 구현 관리(IDE, 협업, 형상관리)
2) 제품 소프트웨어의 버전 등록 상세 기법
- 제품 소프트웨어의 버전 관리는 소프트웨어 개발과 관련하여 코드와 라이브러리, 관련 문서 등 시간의 변화에 따른 변경을 관리하는 전체 활동을 의미
2-1) 버전 관리 항목
버전 관리 항목 | 항목 설명 |
저장소 (Repository) | 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳 |
가져오기 (import) | 버전 관리하지 않은 로컬 디렉터리 파일을 처음으로 저장 |
체크아웃 (Check-Out) | 프로그램을 수정하기 위해 저장소에서 파일을 받아오는 것 |
체크인 (Check-In) | 체크아웃 한 파일의 수정을 완료한 후, 저장소의 파일을 새로운 버전으로 갱신하는 것 |
커밋 (Commit) | 체크인 시 이전 갱신 사항이 있는 경우 충돌(Confilct)을 알리고, diff 도구를 이용해 수정 한 후 갱신을 완료 |
동기화 (Update) | 저장소에 있는 최신 버전으로 자신의 작업 공간(로컬/지역 저장소)을 동기화하는 것 |
2-2) 소프트웨어 버전 등록 과정
가져오기(Import) / 추가(Add) ▶ 인출(Check-Out) ▶ 예치(Commit) ▶ 동기화(Update) ▶ 차이(Diff)
2. 제품 소프트웨어 버전 관리 도구의 유형별 특징
1) 방식에 따른 버전 관리 도구
버전 관리 도구 유형 | 버전 관리 도구 설명 |
공유 폴더 방식 (RCS, SCCS) |
- 매일 개발 완료 파일은 약속된 위치의 공유 폴더에 복사 - 담당자 한 명이 매일 공유 폴더의 파일을 자기 PC로 복사하고 컴파일하여 에러 확인과 정상 동작 여부 확인 - 정상 동작일 경우 다음날 각 개발자들이 동작 여부 확인 - 파일의 변경 사항을 데이터베이스에 기록하며 관리 |
클라이언트/서버 방식 (CVS, SVN) |
- 중앙에 버전 관리 시스템이 항시 동작(버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식) - 개발자들의 현재 작업 내용과 이전 작업 내용을 축적하는 게 용이함 - 서로 다른 개발자가 같은 파일을 작업했을 때 경고 출력 - 서버에 문제가 생기면 다른 개발자와의 협업 및 버전 관리 작업은 중단됨 - Trac이나 CVS view와 같은 GUI 틀을 이용하여 모니터링 가능 |
분산 저장소 방식 (Git, Bitkeeper) |
- 로컬 저장소와 원격 저장소 구조 - 중앙의 저장소에서 로컬에 복사(clone)한 순간 개발자 자신만의 로컬 저장소에 생성 - 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사해 작업한 후, 개발 완료한 파일을 로컬 저장소에 우선 커밋한 이후 다시 원격 저장소에 반영(Push)하는 방식 - 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용해 작업 가능 - 로컬 저장소에서 작업을 수행할 수 있어 처리 속도가 빠름 |
2) 버전 관리 도구별 특징
버전 관리 도구 | 특징 |
CVS (Concurrent Versions System) |
- 서버와 클라이언트로 구성되어 다수의 인원이 동시에 범용적인 운영체제로 접근 가능하여 버전 관리를 가능하게 함 - Client가 이클립스에 내장되어 있음 |
Subversion (SVN) | - GNU의 버전 관리 시스템으로 CVS의 장점은 이어받고 단점은 개선하여 아파치 소프트웨어 재단에서 2000년에 발표 |
RCS (Revision Control System) |
- CVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일을 잠금하는 방식으로 버전 컨트롤을 수행 |
Bitkeeper | - SVN과 비슷한 중앙 통제 방식의 버전 컨트롤 툴로서 대규모 프로젝트에서 빠른 속도를 내도록 개발됨 |
Git | - 기존 리눅스 커널의 버전 컨트롤을 하는 Bitkeeper을 대체하기 위해 나온 새로운 버전 컨트롤로 현재 리눅스는 Git을 통해 버전 컨트롤이 되고 있음 - Git은 속도에 중점을 둔 분산형 버전 관리 시스템 이며, 대형 프로젝트에 효과적 - Git은 SVN과 다르게 Commit은 로컬 저장소에서 이루어지고 push라는 동작으로 원격 저장소에 반영 (로컬 저장소에서 작업이 이루어져 매우 빠른 응답을 받을 수 있음) |
Clear Case | - IBM에서 제작 - 복수 서버, 복수 클라이언트 구조이며 서버가 부족할 때 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음 |
3) SVN (Subversion)
- CVS를 개선한 것으로 아파치 소프트웨어 재단에서 2000년에 발표함
- 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합(merge)
- 커밋할 때마다 리비전(Revision)이 1씩 증가
- 서버는 주로 유닉스(UNIX) 사용
- 오픈 소스로 무료 사용 가능
- CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능
명령어 | 의미 |
add | 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록 |
commit | 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용 |
update | 서버의 최신 commit 이력을 클라이언트의 소스 파일에 적용 |
checkout | 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받아옴 |
lock / unlock | 서버의 소스 파일이나 디렉터리를 잠그거나 해제 |
import | 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로 한 번 사용 후 다시 사용하지 않음 |
export | 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아옴 |
info | 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시 |
diff | 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시 |
merge | 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합 |
4) Git
- 리누스 토발즈가 2005년 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마노에 의해 유지보수 되고 있음
- 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳으로, 자신의 버전 관리 내역을 반영(Push)하거나 다른 개발자의 변경 내용을 가져올 때(Fetch) 사용
- 로컬 저장소는 개발자들이 본인의 실제 개발을 진행하는 장소로 버전 관리가 수행됨
- 브랜치(Branch)를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅 가능
- 파일의 변화를 스냅샷(Snapshot)으로 저장
- 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름 파악 가능
명령어 | 의미 |
add | - 작업 내역을 로컬 저장소에 저장하기 위해 스테이징 영역에 추가 - '--all' 옵션으로 작업 디렉터리의 모든 파일을 스테이징 영역에 추가 가능 |
commit | - 작업 내역을 로컬 저장소에 저장 |
branch | - 새로운 브랜치를 생성, 최초로 commit을 하면 마스터(master) 브랜치가 생성됨 - commit 할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리킴 - '-d' 옵션으로 브랜치 삭제 가능 |
checkout | - 지정한 브랜치로 이동 |
merge | - 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치를 병합 |
init | - 로컬 저장소를 생성 |
remote add | - 원격 저장소에 연결 |
push | - 로컬 저장소의 변경 내역을 원격 저장소에 반영 |
fetch | - 원격 저장소의 변경 이력만을 로컬 저장소로 가져와 반영 |
clone | - 원격 저장소의 전체 내용을 로컬 저장소에 복제 |
fork | - 지정한 원격 저장소의 내용을 자신의 원격 저장소로 복제 |
'자격증 > 정보처리기사 필기' 카테고리의 다른 글
[정보처리기사 필기] SW 개발 : 애플리케이션 테스트의 유형 (0) | 2023.01.30 |
---|---|
[정보처리기사 필기] SW 개발 : 애플리케이션 테스트 (0) | 2023.01.30 |
[정보처리기사 필기] SW 개발 : 통합 구현 관리(IDE, 협업, 형상관리) (0) | 2023.01.27 |
[정보처리기사 필기] SW 개발 : 디지털 권리 관리(DRM) (1) | 2023.01.27 |
[정보처리기사 필기] SW 개발 : 애플리케이션 배포 도구(릴리즈 노트) (0) | 2023.01.27 |