자격증/정보처리기사 필기

[정보처리기사 필기] SW 개발 : 제품 소프트웨어 버전 관리

Yuco 2023. 1. 27. 22:22

 

정보처리기사 필기 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 - 지정한 원격 저장소의 내용을 자신의 원격 저장소로 복제