관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[소프트웨어 개발] 3장 제품 소프트웨어 패키징 4 - 제품 소프트웨어 버전 관리 본문

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

[소프트웨어 개발] 3장 제품 소프트웨어 패키징 4 - 제품 소프트웨어 버전 관리

huenuri 2024. 7. 31. 13:08

오늘 정처기 공부 목표는 4장의 첫 번째 소장까지는 학습하는 것이다. 이제 오후에 공부할 시간이 1시간 반이 남지 않았지만 할 수 있는 데까지 해볼 것이다. 집에 가면 아마도 자바 공부를 아주 조금 하고 그 이후에는 계속 놀 가능성이 크기에 이 시간을 활용해 최대한 공부를 해야 한다.
이번주에는 내내 공부가 너무 하기 싫은 나날이었다. 아마도 지난주 주말부터였는지도 모른다.

 

이상하게도 난 공부 이외에 휴식 시간이나 영상 시청을 조금이라도 하면 그 이후의 머릿속이 완전히 그쪽으로 가버려 공부와는 거리가 먼 일상을 살게 된다. 이야기를 너무나 좋아해서 소설가나 시나리오 작가가 되려고 했으나, 나의 아이디어를 담기엔 협소한 공간이었다.
그러니까 내가 해야 할 일은 프로그램을 개발하는 일밖에 없다. 하기 싫어도 공부를 해야겠지~ 


 

 

 

 

소프트웨어 버전 관리 도구

 

개념

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

 

유형

1. 공유폴더 방식 : RCS

  • 매일 개발 완료 파일을 약속된 위치의 공유 폴더에 복사하는 방식
  • 담당자 한 명이 매일 공유 폴더의 파일을 자기 PC로 복사하고 컴파일하여 에러 확인과 정상 동작 여부 확인

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

  • 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
  • 개발자들의 현재 작업 내용과 이전 작업 내용 축적에 용이

3. 분산 저장소 방식 : Git

  • 로컬 저장소와 원격 저장소로 분리되어 관리되는 방식
  • 중앙 저장소에서 로컬에 복사한 순간 개발자 자신만의 로컬 저장소에 생성

 

 

도구별 특징

현재 국내 개별 프로젝트에서는 SVN을 가장 많이 사용하고 있으나, 전 세계적으로는 오픈 소스 시반의 SW 버전 관리 도구인 Git을 가장 많이 사용하고 있다.

 

1. RCS(Revision Control System)

  • CVS와 달리 소스 파일 수정을 한 사람만으로 제한하여 다수의 사람이 파일 수정을 동시에 할 수 없도록 파일 잠근 방식으로 버전을 관리하는 도구
  • 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있는 SW 버전 관리 도구

2. CVS(Concurrent Versions System)

가장 오래된 형상관리 도구 중 하나로 중앙 집중형 서버 저장소를 두고 클라이언트가 접속해서 버전 관리를 실행하는 도구

3. SVN(Subversion)

CVS와 같은 중앙 집중형 클라이언트-서버 방식이나, CVS의 단점을 보완해 가장 널리 사용되고 있는 도구

4. Git

  • 중앙 집중형 방식이 아닌 분산형 방식으로 각 PC 스스로 완전한 저장소가 구성되며, 필요에 따라 중앙 집중형 방식으로 운영
  • Git의 커밋 동작은 로컬 저장소에서 이루어지고, 푸시(push)라는 동작으로 원격 저장소에 반영

 

 

 

 

도구 사용시 유의사항

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

  • 형상 관리 지침에 의거해 버전에 대한 정보를 언제든지 접근 가능
  • 개발자가 원하는 때에 원하는 모습을 다시 구성

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

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

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

  • 동일한 프로젝트에 대해서 여러 개발자가 동시에 개발
  • 동시에 파일 수정이 일어나더라도 개발자의 수정 내역이 통합

4. 빠른 오류 복구

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

 

 

 

빌드 자동화 도구

 

개념

  • 빌드 : 소프트웨어를 생성하고 테스트 · 검사하여 배포하기 위해 수행하는 행위의 집합
  • 빌드 자동화 도구 : 제품 SW 실행파일 생성을 자동화하기 위해서 저장소에 있는 소스를 자동으로 읽어 빌드한 후, 테스트하고 검사 · 실행파일을 만드는 도구
  • 지속적인 통합과도 연관됨

지속적 통합(CI; Continuous Integration)
지속적으로 품질제어를 적용하는 프로세스를 실행하는 기법. 소프트웨어 릴리스 프로세스 중 빌드나 통합 단계에 적용됨


 

 

프로세스 및 주요 구성요소

프로세스

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

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

3. 단위테스트

4. 정적 분석

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

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

7. 최종 빌드

 

 

 

구성요소

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

 

1. CI(Continuous Integration) 서버 : Jenkis Hudson

빌드 프로세스를 관리하는 서버

2. SCM(Source Code Management) : SVN Git

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

3. 빌드 도구 : Ant Maven

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

4. 테스트 커버리지 도구 : Emma

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

5. 인스팩션 도구 : CheckStyle Cppcheck

  • 프로그램을 실행하지 않고, 소스 코드 자체로 품질을 판단할 수 있는 정적 분석 도구
  • 코딩 표준 준수 검사, 코드 메트릭 측정, 중복 코드 검사, 코드 인스펙션 검사

코드 인스펙션(Code Inspection)
개발팀에서 작성한 개발소스 코드를 분석하여 개발 표준에 위배되었거나, 코드가 중복 또는 작성 규칙에 맞지 않거나 잘못 구현된 부분을 수정하는 작업

 

기능

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

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

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

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

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

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

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

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

 

 

 

빌드 자동화 도구 사례

젠킨스(Jenkins)

  • 자바 기반의 오픈소스로 가장 많이 활용되는 빌드 자동화 도구. 지속적 통합관리를 가능하게 함
  • 서블릿 컨테이너 서버 기반으로 구동되는 시스템. CVS, SVN, Git 등 다양한 버전 관리 도구를 지원

젠킨스의 특징

  1. 쉬운 설치 : java-jar jenkins.war 명령어면 설치 가능
    이후에 추가적 설치나 데이터베이스도 필요 없음
  2. 친숙한 웹 GUI : 웹 기반 그래픽 사용자 인터페이스(GUI)를 통해 쉽게 전체적인 설정 변경 가능
  3. 저장소 부하 감소 : 버전 관리 도구에서 빌드에 사용될 목록만 따로 추출하여 변경 생성할 수 있는 기능 제공
  4. 최근 빌드 제공 : 최근 빌드 또는 최근 성공한 빌드 내역에 대한 링크 제공
  5. 실시간 피드백
  6. 분산 빌드 : 여러 대의 컴퓨터를 통해
  7. 3rd Party 플러그인을 통한 확장 : Jenkins가 지원하기 바라는 툴이나 프로세스가 있다면 본인이 직접 만들 수 있음

 

그래들(Gradle)

  • 그루비와 유사한 도메인 언어를 채용. 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 자동화 시스템
  • 실행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행
  • 자바, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원

 

 

 

학습을 마치고

오후 6시까지 해서 3단원 학습을 모두 끝냈다. 문제도 다 풀었고 강의도 모두 들었다. 정말 뿌듯하다. 오늘 사실 수업에 결석하려고 했는데 담임선생님이 전화하셔서 빨리 오라고 하셔서 억지로 집에서 나왔다.
수업은 30분이나 지각했지만 이럴 때는 집에서 가까운 것이 참 좋다. 일어나서 인사교까지 오는데 15분도 걸리지 않았다. 수업을 나름 열심히 들었고 아침에 오셨던 강사님의 수업이 정말 많은 도움이 되었다.

 

오늘 집중하지 못했던 것과 오후 수업은 다음에 강의 녹화 영상을 다시 시청하며 그때는 실습도 함께 진행해 볼 생각이다. 오후에는 주로 정처기 공부를 했는데 어제 하지 못했던 공부를 보충할 수 있어서 좋았다. 집에 가면 또다시 놀 수도 있지만 오후 공부는 여기서 마친다.