9일차 제품 소프트웨어 버전관리

Dev_HG·2020년 7월 7일
0

1. 소프트웨어 버전 관리 도구

1. 소프트웨어 버전 관리 도구 개념

  • 소프트웨어 버전 관리 도구는 형상 관리 지침을 활용하여 제품 소프트웨어의 신규 개발, 변경, 개선과 관련된 수정 사항을 관리하는 도구이다.
  • 제품 소프트웨어 버전 관리는 소프트웨어 개발과 관련하여 코드와 라이브러리, 관련 문서 등 시간의 변화에 따른 변경을 관리하는 전체 활동을 의미 한다.

2. 소프트웨어 버전 관리 도구 유형

1. 공유 폴더 방식(RCS, SCCS)

  • 매일 개발 완료 파일은 약속된 위치의 공유 폴더에 복사하는 방식
  • 담당자 한 명이 매일 공유 폴더의 파일을 자기 pc로 복사하고 컴파일하여 에러 확인과 정상 동작 여부확인
  • 정상 동작일 경우 다음날 각 객발자 들이 동적 여부 확인

2. 클라이언트/서버 방식(CVS, SVN)

  • 중앙에 버전 관리 시스템을 향시 동작 시킴
  • 개발자들의 현재 작업 내용과 이전 작업내용 축적에 용이
  • 서로 다른 개발자가 같은 파일을 작업했을 때 경고 메시지 출력

3. 분산 저장소 방식(Git, Bitkeeper)

  • 로컬 저장소와 원격 저장소로 분리된 구조
  • 중앙의 저장소에서 로컬에 복사(Clone)한 순간 개발자 자신만의 로컬 저장소에 생성
  • 개발 완료한 파일을 수정한 다음에 로컬 저장소에 우선적으로 커밋(Commit)한 이후, 다시 원격 저장소에 반영(Push)하는 방식

3. 소프트웨어 버전 관리 도구별 특징

1. CVS(Concurrent Versions System)

  • 서버와 클라이언트로 구성되어 다수의 인원이 동시에 범용적인 운영체제로 접근 가능하여 버전 관리가 가능한 도구

2. SVN(Subversion)

  • 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구
  • GNU의 버전 관리 시스템으로 CVS의 장점은 이어받고 단점은 개선하여 2000년에 발표됨
    cf : GNU(GNU's Not Unix) : GNU는 자유 소프트웨어 운영체제이자, 컴퓨터 소프트웨어의 모음집이다. 리처드 스톨먼의 자유 소프트웨어 재단에서 진행하고 유지되며, 그 중 대부분이 GNU프로젝트의 GPL로 라이선스를 발급받는다.
    cf : GPL(General Public License) : 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스로 소프트웨어의 실행, 연구, 공유, 수정의 자유를 최종 사용자에게 보정해주는 라이선스이다.

3. RCS(Revision Control System)

  • CVVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구

4. Bitkeeper

  • SVN과 비슷한 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 버전 관리 도구

5. Git

  • Git은 속도에 중점을 둔 분산형 버전 관리 시스템이며, 대형 프로젝트에서 효과적이고 유용함
  • Git의 커밋(Commit) 동작은 로컬 저장소에서 이루어지고, 푸시(Push)라는 동작으로 원격 저장소에 반영
  • 로컬 저장소에서 작업이 이루어져 매우 빠른 응답을 받을 수 있음
  • Git의 작업 폴더는 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하는 완전한 형태의 저장소임

6. Clear Case

  • 복수 서버, 복수 클라이언트 구조이며 서버가 부족할 때 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음

4. 소프트웨어 버전 관리 도구 사용 시 유의 사항

1. 버전에 대한 쉬운 정보 접근성

  • 형상 관리 지침에 의거 버전에 대한 정보를 언제든지 접근할 수 있어야 함
  • 프로젝트 단위 접근이든, 파일 단위의 접근이든 간에 개발자가 원하는 때에 원하는 모습을 다시 구성할 수 있어야함

2. 불필요한 사용자에 대한 접근 제어

  • 제품 소프트웨어 개발자, 배포자, 이외에 불필요한 사용자가 소스를 수정할 수 없도록 해야 함
  • 중요한 파일 혹은 폴더에 대한 접근은 개발자, 배포자 등 권한이 있는자만 접근할 수 있도록 함

3. 동일 프로젝트에 대하나 동시 사용성

  • 동일한 프로젝트에 대해서 여러 개발자가 동시에 개발할 수 있어야함
  • 여러 개발자가 동일한 파일, 폴더에 접근 시 동시에 파일 수정이 일어나더라도 개발자의 수정 내역이 통합될 수 있어야함

4. 빠른 오류 복구

  • 에러 발생 시 최대한 빠른 시간 내에 복구가 가능해야 함
  • 과거 버전의 소스를 가지고 신속하게 원복할 수 있어야함

5. 제품 소프트웨어에 소프트웨어 버전 관리 도구 활용 방안

1. 버전 관리 도구를 활용한 통합 버전 현황 관리

  • 버전 관리 도구를 활용한 버전 현황 관리 작업에는 기존의 고유한 버전 관리 외에도 버전 관리 도구에서 지원하는 모든 관리 작업 전체를 관리할 수 있어야 한다.
  • 버전 관리의 버전별 공동 작업 이외에도 백업 및 복구 작업, 공동 솔루션 기반의 여러 가지 작업 등을 통합, 관리

1. 버전 관리, 백업 및 복구

  • 이전 버전으로의 복구 필요시 사용
  • 이전 버전의 기능을 재활용 시 사용

2. 동일 버전 공동 작업

  • 동일 버전의 소스 코드를 두 명 이상의 개발자가 수정할 경우(공동 작업)
  • 분산 환경에서 두 명 이상의 개발자가 동일한 버전의 소스를 수정할 경우(분산 버전 관리 도구 필요)

3. 여러 버전 솔루션 작업

  • 하나의 솔루션을 기반으로 여러 버전의 제품을 개발 할 경우(브랜치 관리 기능 필요)

2. 버전 관리 도구 활용한 제품 소프트웨어 소스 및 자료 백업

  • 버전 관리 도구를 활용, 제품 소프트웨어 백업은 내부의 정확한 백업 정책을 먼저 세워야 하고, 상세 백업 방법을 공유해야 한다.

- 백업 정책 사례 및 방법

1. 백업 정책

  • 버전 관리 라이브러리에 대한 백업 파일은 버전 관리 라이브러리가 저장된 디스크와 분리된 디스크에 저장
  • 디스크 백업은 1일 1회(예, 매일 03시) 실시(단, 일요일은 제외)
  • CD 백업은 1주일 1회(예, 매주 금요일) 실시
  • 실수에 의한 삭제 예방을 위한 백업은 최소D-2일분 이상 보관

2. 백업 방법

  • 버전 라이브러리의 백업은 빠른 복구를 위해 Full 백업 실시
  • 백업 작업에 대한 임시/신규 요청 또는 중지 요청은 절차에 따라 실시
  • 백업 결과는 버전 관리를 담당하는 관리자가 주기적으로 점검하며, 그 결과를 버전 관리 정기 보고 시 함께 보고 해야함

가. 디렉토리를 신규로 만들며 물리적 복사(저장소 백업)

  • Git 자체가 소스 코드 백업용으로 쓰이지만, 2차 백업 개념으로 ./.Git 폴더의 내용 디렉토리를 물리적으로 다른 곳에 보관하여 백업

나. 버전 관리 도구의 백업 기능 활용(Git 번들)

  • Git 저장소(Repository)의 번들을 생성하는 프로세스를 통해 백업 자체를 버전 관리 도구에서 자동화하여 백업을 진행해주는 백업 방법
    cf : 번들(Bundle) : 정의된 파일 및 파일 확장자를 갖는 디렉터리로, 개념상 관련된 파일들을 모두 하나로 묶어주는 꾸러미로 애플리케이션, 프레임워크나 플러그인의 실행 파일을 포함하고 있다.

2. 빌드 자동화 도구

1. 빌드 자동화 도구 개념

  • 빌드란 소프트웨어를 생성하고 테스트하고 검사하여 배포하기 위해 수행 하는 행위의 집합이다.
  • 빌드 자동화 도구란 제품 소프트웨어 실행파일 생성을 자동화하기 위해서 저장소에 있는 소스를 자동으로 읽어서 빌드한 후 테스트하고 검사하여 실행파일을 만드는 도구이다.
  • 빌드 자동화 도구는 지속적인 통합과도 연관됨
    cf: 지속적 통합(CI; Continuous integration) : 소프트웨어 릴리스 프로세스 중 빌드 또는 통합 단계에 적용되며, 지속적으로 품질제어를 적용하는 프로세스를 실행하는 것이다.

2. 빌드 자동화 프로세스 및 주요 구성요소

1. 빌드 자동화 프로세스(지속적인 통합 관점)

1. 컴파일 : 소스 코드를 바이너리 파일로 컴파일

2. 패키징 : 바이너리 파일을 배포 형태로 패키징

3. 단위테스트 : 단위테스트(커버리지 포함) 수행

4. 정적분석 : 정적분석을 수행

5. 리포팅 : 분석 결과 리포팅

6. 배포 : 패키징한 파일을 테스트 서버에 배포

7. 최종빌드 : 최종 빌드

2. 빌드 자동화 구성요소

  • 형상 관리 서버에 저장된 소스 코드를 주기적으로 가져와서 컴파일, 단위 테스트, 코드 검사 등의 과정을 수행하며 신규 또는 수정된 소스 코드가 결함이 있는지의 여부를 지속적으로 검증
  • 검증 결과는 이메일 등의 피드백을 통해 개발자들에게 전달되고, 이를 통해 조기에 결함을 발견하고 해결

빌드 자동화 구성요소

1. CI(Continuous Integration) 서버

  • 빌드 프로세스를 관리하는 서버 , 도구 : Jenkins, Hudson

2. SCM(Source Code Management)

  • 소스 코드 형상 관리 시스템
  • 소스 코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템
  • 여러 사람이 같은 프로젝트에 참여할 경우, 각자 수정 부분은 자동으로 동기화되어 팀원 전체가 볼 수 있는 시스템(SVN, Git)

3. 빌드 도구(Bulid Tool)

  • 컴파일, 테스트, 정적분석 등을 통해 동작 가능한 소프트웨어 생성, 도구 : Ant,Maven

4. 테스트 도구(Test Tool)

  • 작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 도구의 스크립트에서 실행, 도구 : Ant, Selenium

5. 테스트 커버리지 도구(Test Coverage Tool)

  • 테스트 코드가 대상 소스 코드에 대해 어느 정도 커버하는지 분석하는 도구
    , 도구 : Emma

6. 인스펙션 도구(Inspection Tool)

  • 프로그램을 실행하지 않고, 소스 코드 자체로 품질을 판단할 수 있는 정적분석 도구
  • 코딩 표준 준수 검사, 코드 메트릭 측정, 중복 코드 검사, 코드 인스펙션 검사
    cf: 코드 인스펙션(Code Inspection) : 개발팀에서 작성한 개발소스 코드를 분석하여 개발 표준에 위배 되었거나, 코드가 중복 또는 작성규칙에 맞지 않거나 잘못 구현 된 부분을 수정하는 작업을 말한다.

3. 빌드 자동화 도구의 기능

1. 코드 컴파일 : 테스트를 포함한 소스 코드 컴파일

2. 컴포넌트 패키징 : 자바의 jar 파일이나 윈도우의 exe 파일 같은 배포할 수 있는 컴포넌트를 묶는 작업

3. 파일 조작 : 파일과 디렉토리를 만들고, 복사 및 지우는 작업

4. 개발 테스트 실행 : 자동화된 테스트 진행

5. 버전 관리 도구 통합 : 버전 관리 시스템 지원

6. 문서 생성 : API 문서 생성

7. 배포 기능 : 테스트 서버 배포 지원

8. 코드 품질 분석 : 자동화된 검사 도구를 통한 코드 품질 분석

4. 대표적인 빌드 자동화 도구, 젠킨스(Jenkins)

  • 젠킨스는 자바(JAVA) 기반의 오픈소스로 가장 많이 활용되는 빌드 자동화 도구이고, 지속적 통합관리(Continuous Integration)를 가능하게 한다.
  • 서블릿 컨테이너 서버 기반으로 구동되는 시스템이며, CVS,SVN,Git 등 다양한 버전 관리 도구를 지원한다
    cf : 서블릿(Servlet) : 서블릿 컨테이너 위에서 작동하는 웹 서비스용 자바 인터페이스의 객체(애플리케이션)이다.
    cf : 서블릿 컨테이너(Servlet Container) : 서블릿을 관리하고 동작 시킬수 있는 환겨을 제공하는 서버 프로그램 이다.

젠킨스의 특성

1. 쉬운 설치

  • jenkins.war 파일로 제공하며 java - jar jenkins.war 명령어면 설치 가능
  • 그 자체로 서블릿 컨테이너에 배포하면 되므로, 이후에 추가적 설치나 데이터베이스도 필요 없음

2. 친숙한 웹 GUI

  • 웹 기반 그래픽 사용자 인터페이스(GUI)를 통해 쉽게 전체적인 설명 변경 가능

3. 저장소 부하 감소

  • 버전 관리 도구에서 빌드에 사용될 목록만 따로 추출하여 변경 생성 할 수 있는 기능 제공
  • 전체 빌드로 인한 저장소 부하 감소

4. 최근 빌드 제공

  • 최근 빌드 또는 최근 성공한 빌드 내역에 대한 링크 제공

5. 실시간 피드백

  • RSS 또는 이메일을 통해 실시간으로 빌드 실패 내역에 대해 통지를 받아서 빌드 결과 확인 가능

6. 분산 빌드

  • 여러 대의 컴퓨터를 통해 분산 빌드나 테스트 가능

7. 3rd Party 플러그인을 통한 확장

  • Jenkins가 지원하길 바라는 툴이나 프로세스가 있다면 본인이 직접 만들 수 있음

5. 안드로이드 공식 자동화 도구, 그래들(Gradle)

  • Groovy를 이용한 빌드 자동화 시스템이다.
  • Groovy와 유사한 도메인 언어를 채용하였으묘, 현재 안드로이드 앱을 만드는 데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이다.
  • 자바, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원
    cf : 그루비(Groovy) : 자바 가상머신(JVM) 위에서 동작하는 동적 스크립트 언어이다.
profile
꾸준함

0개의 댓글