JUINTINATION

소프트웨어 버전 등록 및 관리 본문

정보처리기사 정리

소프트웨어 버전 등록 및 관리

DEOKJAE KWON 2024. 2. 12. 15:19
반응형

소프트웨어 패키징의 형상 관리

형상 관리(SCM; Software Configuration Management)는 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동이다. 관리 항목에는 소스 코드뿐만 아니라 프로젝트 계획, 분석서, 설계서, 프로그램 테스트 케이스 등이 포함된다.

  • 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 한다.
  • 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동이며 유지보수 단계에서도 수행된다.
  • 형상 관리를 통해 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있다.

형상 관리의 중요성

  • 지속적인 소프트웨어의 변경 사항을 체계적으로 추적하고 통제할 수 있다.
  • 제품 소프트웨어에 대한 무절제한 변경을 방지할 수 있다.
  • 제품 소프트웨어에서 발견된 버그나 수정 사항을 추적할 수 있다.
  • 형태가 없어 가시성이 결핍된 소프트웨어의 진행 정도를 확인하기 위한 기준으로 사용될 수 있다.
  • 소프트웨어의 배포본을 효율적으로 관리할 수 있으며 여러 명의 개발자가 동시에 개발할 수 있다.

형상 관리 기능

  • 형상 식별
    • 형상 관리 대상에 이름과 관리 번호를 부여하고 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업
  • 버전 제어
    • 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고 이를 위해 특정 절차와 도구를 결합시키는 작업
  • 형상 통제(변경 관리)
    • 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
  • 형상 감사
    • 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
  • 형상 기록(상태 보고)
    • 형상의 식별, 통제, 감사 작업의 결과를 기록 및 관리하고 보고서를 작성하는 작업

소프트웨어의 버전 등록 관련 주요 기능

항목 설명
저장소(Repository) 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
가져오기(Import) 버전 관리가 되고 있지 않은 아무것도 없는 저장소(Repository)에 처음으로 파일을 복사
체크아웃(Check-Out) 프로그램을 수정하기 위해 소스 파일과 함께 버전 관리를 위한 파일들을 저장소(Repository)에서 받아옴
체크인(Check-In) 체크아웃한 파일의 수정을 완료한 후 저장소(Repository)의 파일을 새로운 버전으로 갱신
커밋(Commit) 체크인을 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌(Conflict)을 알리고 diff 도구를 이용해 수정한 후 갱신을 완료
동기화(Update) 저장소에 있는 최신 버전으로 자신의 작업 공간을 동기화

소프트웨어 버전 등록 과정

  1. 가져오기(Import)
    • 개발자가 저장소에 신규로 파일을 추가
  2. 인출(Check-Out)
    • 수정 작업을 진행할 개발자가 저장소에 추가된 파일을 자신의 작업 공간으로 인출
  3. 예치(Commit)
    • 인출한 파일을 수정한 후 설명을 붙여 저장소에 예치
  4. 동기화(Update)
    • 커밋(Commit) 후 새로운 개발자가 자신의 작업 공간을 동기화(Update)
    • 이 때 기존 개발자가 추가했던 파일이 전달됨
  5. 차이(Diff)
    • 새로운 개발자가 추가된 파일의 수정 기록(Change Log)을 확인하면서 이전 개발자가 처음 추가한 파일과 이후 변경된 파일의 차이를 확인

소프트웨어 버전 관리 도구

  1. 공유 폴더 방식
    • 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식으로 SCCS, RCS, PVCS, QVCS 등이 있다.
      • 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사
      • 담당자는 공유 폴더의 파일을 자기 PC로 복사한 후 컴파일하여 이상 유무를 확인
      • 파일을 잘못 복사하거나 다른 위치로 복사하는 것에 대비하기 위해 파일의 변경 사항을 DB에 기록하여 관리
  2. 클라이언트/서버 방식
    • 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식으로 CVS, SVN, CVSNT, Clear Case, CMVC, Perforce 등이 있다.
      • 모든 버전 관리는 서버에서 수행됨
      • 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지를 출력
      • 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사하여 작업한 후 변경된 내용을 서버에 반영
      • 서버에 문제가 생기면 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업이 중단됨
  3. 분산 저장소 방식
    • 버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식으로 Git, GNU arch, DCVS, Bazaar, Mercurial, TeamWare, Bitkeeper, Plastic SCM 등이 있다.
      • 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경된 내용을 로컬 저장소에서 우선 반영한 다음 이를 원격 저장소에 반영
      • 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업할 수 있음
  4. 서브 버전(Subversion, SVN)
    • 클라이언트/서버 구조로 CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능하도록 개선한 것
      • 서버(저장소, Repository)에는 최신 버전의 파일들과 변경 내역이 관리되며 서버는 주로 유닉스를 OS로 사용함
      • 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 반영(Commit)
      • 모든 개발 작업은 trunk 디렉터리에서 수행되며 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합(merge)
      • 커밋(Commit)할 때마다 리비전(Revision)이 1씩 증가
  5. 깃(Git)
    • 분산 버전 관리 시스템으로 2개의 저장소, 즉 로컬 저장소와 원격 저장소가 존재
      • 로컬 저장소는 개발자들이 실제 개발을 진행하는 장소로 버전 관리가 수행됨
      • 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳으로 자신의 버전 관리 내역을 반영하거나 다른 개발자의 변경 내용을 가져올 떄 사용
      • 버전 관리자 로컬 저장소에서 진행되므로 버전 관리가 신속하게 처리되고 원격 저장소나 네트워크에 문제가 있어도 작업 가능
      • 브랜치를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅이 가능
      • 파일의 변화를 스냅샷(Snapshot)으로 저장하는데 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름을 파악할 수 있음

빌드 자동화 도구

빌드 자동화 도구는 소스 코드 파일들을 컴파일한 후 여러 모듈을 묶어 실행 파일로 만드는 과정인 빌드를 포함한 테스트 및 배포를 자동화하는 도구이다.

  • 애자일 환경에서는 하나의 작업이 마무리될 때마다 모듈 단위로 나눠서 개발된 코드들이 지속적으로 통합되는데 이러한 지속적인 통합(Continuous Integration) 개발 환경에서 빌드 자동화 도구가 유용하게 활용된다.
  • 빌드 자동화 도구에는 Ant, Make, Maven, Gradle, Jenkins 등이 있다.

Jenkins

JAVA 기반의 오픈 소스 형태로 클라이언트의 요청을 처리해 주기 위해 서버측에서 실행되는 작은 프로그램인 서블릿을 실행하고 서블릿의 생명주기를 관리하는 역할을 하는 서블릿 컨테이너에서 실행되는 서버 기반 도구이다.

SVN, Git 등 대부분의 형상 관리 도구와 연동이 가능하며 친숙한 Web GUI 제공으로 사용이 쉽고 여러 대의 컴퓨터를 이용한 분산 빌드나 테스트가 가능하다.

Gradle

Groovy를 사용해서 만든 DSL(Domain Specific Language)을 스크립트 언어로 사용하는 오픈 소스 형태의 자동화 도구로 안드로이드 앱 개발 환경에서 주로 사용되며 플러그인을 설치하여 JAVA, C/C++, Python 등의 언어도 빌드가 가능하다.

Gradle은 실행할 처리 명령들을 모아 태스크(Task)로 만든 후 태스크 단위로 실행한다. 이전에 사용했던 태스크를 재사용하거나 다른 시스템의 태스크를 공유할 수 있는 빌드 캐시 기능을 지원하므로 빌드의 속도를 향상시킬 수 있다.

 

728x90

'정보처리기사 정리' 카테고리의 다른 글

결함 관리  (0) 2024.02.12
애플리케이션 테스트  (1) 2024.02.12
소프트웨어 설치 및 사용자 매뉴얼  (1) 2024.02.12
디지털 저작권 관리(DRM)  (0) 2024.02.12
소프트웨어 패키징과 릴리즈 노트  (0) 2024.02.12
Comments