소프트웨어 개발 방법 및 도구(5), Software Maintenance

2022. 9. 16. 19:29강의 내용 정리/소프트웨어 개발 방법 및 도구

728x90
반응형

Software Maintenance

만들어진 소프트웨어가 버저닝이 이루어지거나 백업을 하거나 하나의 어플리케이션으로 만들기 위해서 어떻게 유지 관리할 것인가


Q) 여러 사람이 함께 하나의 소프트웨어를 만들 때 어떻게 결과물을 공유할 것인가?

 

A1) GitHub

  • 오픈소스로 할 경우에는 무료로 저장공간이나 도구 등을 제공할 수 있다. 
  • 우리가 만든 코드를 공유하고 관리할 수 있는 도구이다.
  •  

A2) Google Docs

  • 설계를 위해 필요한 도구이다.
  • 동일한 파일을 여러명이 동시에 작업해도 작업을 할 수 있다. 따라서 문서를 만들 때 매우 유용한 도구이다.

 


1. Version Control

1) Version Control이란?

소프트웨어가 개선될 때마다 버전을 매겨 이를 관리하는 것을 의미한다. 버전은 번호를 통해 매기기도 하고, 알파, 베타, 감마와 같이 이름을 붙이기도 하다. 소프트웨어에 필요한 소스 코드 뿐만 아니라 파일, 이미지, 자료 등등을 모두 함께 포함한다. 즉, 내용도 모두 포함한다. 만약 최신 버전이 문제가 생겼을 때 이전 버전으로 돌아갈 수도 있다. 이는 소프트웨어 뿐만 아니라 문서나 웹사이트에서도 이를 관리했었다. 

 

기존에는 USB, 이메일 등을 통해 소프트웨어에 필요한 자료들을 공유했다. 최신 버전에서 문제가 발생해서 이전 버전으로 돌아가고자 한다면 문제가 발생할 여지가 있다. 따라서 버전 컨트롤을 하는 것은 중요하다. 

 

 

버전 컨트롤 시스템의 유형

중앙 집중형 버전 컨트롤 시스템을 통해 사람들이 소프트웨어를 공유할 수 있다. 하지만 중앙 집중형 컴퓨터에 저장된 자료를 모두 카피해서 가져온 뒤 작업을 하는 형태로서 자원이 많이 필요한 소프트웨어인 경우에는 문제가 발생할 여지가 있다. 또한 중앙 집중형된 곳에 문제가 발생한다면 모든 자료에 문제가 발생한다는 단점이 있다.

 

분산형 버전 컨트롤 시스템을 사용한다면 사용자들이 각각 따로 자료를 가지고 작업을 할 수 있다. 또한 필요 시 동기화 작업을 거치거나, 독립적으로 작업할 수도 있다. 이의 대표적인 에시는 Git이다.

 

 

2) Version Control System의 과정

 

 하나의 소프트웨어를 만드는 과정이 어떻게 이루어지는지를 보여준다. 깃 브랜치 전략을 확인할 수 있다. 새로운 기능을 추가하려할 때마다 branch off를 해 브랜치를 만드는 것을 확인할 수 있다. 만약 기능이 main 작업에 들어가도 될 정도로 의미가 있다면 main에 merge할 수 있다. 개발 중인 소프트웨어가 상용 서비스로 출시할 수 있거나 개발 단계를 마무리했을 때 tag를 매긴다. 이때 freeze를 해 소프트웨어 기능 개발을 중단하는 경우도 존재한다. 

master는 상용 서비스 목적의 소프트웨어들에 대한 버전이 있다. 기능을 개발할 때에는 develop 브랜치를 만들어서 개발을 한다. 구체적으로 기능을 한단위씩 추가할 때는 feature branch를 따서 이를 merge한다.

 

출시를 하지 않았지만 안정화작업을 하기 위해 release 버전에 대한 branch를 따서 테스트 등 안정화 작업을 한다. 이후 master에 추가한다.

 

급하게 버그를 개선할 때는 hot fix branch를 만들어서 이를 수정한다. 

 


2. Concurrent Versions System (CVS)

동시다발적으로 이뤄지는 버전 컨트롤 시스템으로 깃 이전에 등장한 버전 컨트롤 시스템

  • GNU 라이센스를 사용하고 있다.
  • 클라이언트 서버 방식으로 중앙 집중형 버전 컨트롤 시스템이다. 
  • 오래된 버전을 추적하고, 여러 사람들이 협업해 하나의 소프트웨어를 만들기 위해 만들어졌다.
  • 서버에 있는 것을 가져오는 것은 check in이다. 
  • 암스테르담 컴파일러 키트를 만드는 교수님이 학생과 함께 프로젝트를 진행하기 위해 만든 소프트웨어이다. 이를 오픈 소스화하고 다른 사람들이 사용할 수 있도록 해서 나왔다.

3. Apache Subversion (SVN)

Apache Subversion이란 수많은 사람들이 함께 사용할 수 있고, CVS에서 파생된 중앙집중형 버전 컨트롤 시스템이다. 이는 아직도 왕성하게 사용되는 프로그램으로 CVS에서 나온 버전 컨트롤 시스템 중에서 가장 확산된 프로그램이다. 전통적이었던 회사들은 SVN을 사용하는 경우가 종종 있다. C언어로 짜여졌고, 운영체제가 뭔지 간에 사용할 수 있다.(Cross-platform) 

 


4. Git

Git은 분산형 버전 컨트롤 시스템으로 작고 빠르다는 장점이 있다. Git은 리눅스를 비롯하여 유명한 오픈 소스 소프트웨어들의 버전 컨트롤을 했기 때문에 최근에도 자주 사용되고 있다. git은 C 뿐만 아니라 다양한 언어들을 한번에 많이 사용한다. Git의 주 목적은 소프트웨어 개발이다. maintainer는 Junio Hamano로 pull request를 허가하는 사람이다. 

 

Git은 분산화되어있기에 개발을 하기위해 모든 개발자가 개발관련 자료를 모두 가지고 있다. 또한 중앙 서버가 없어져도 안정적인 특징이 있다. 이러한 경우에는 peer-to-peer라고 한다. 

 

Pro git이라는 책은 온라인 상에서 무료로 다운받을 수 있다.

 

cf)  SCM: Source Code Management

 

중앙집중형인 경우에는 중앙 레포지토리가 있어서 이를 관리할 maintainer가 있다. 모든 수정 사항은 중앙서버에 있기에 다른 사람들은 동기화해가며 개발을 진행하고, 중앙서버에 반영할 때는 maintainer가 이를 관리한다. 

 

분산형인 경우에는 pull requests를 보내 pull하는 것을 요청하여 이를 동기화하는 과정이 있다. 각각 복사본은 있지만 변화가 있다는 점에 대해 알림을 주는 경우가 있다.  pull request를 한다면 1대 1이 아니라 여러 리뷰어가 존재해 해당 코드에 관해 리뷰를 남긴다. 리뷰하고 테스트하는 과정을 거친 뒤 머지하는 단계가 이뤄지고 이는 최근에 자동화되어서 이뤄지고 있다.  pull request의 빈도를 보고 오픈소스가 살아있는지를 볼 수 있다.

 


5. GitHub

깃의 저장소

 

깃 push를 할 경우에는 깃허브에 들어간다.  git flow는 이전 포스팅 자료를 참고할 수 있다.

 

 

깃은 터미널을 통해 사용할 수 있지만 깃허브는 웹 베이스 소프트웨어이기에 사용이 편리하다. task management나 위키, feature requests 등등의 기능이 가능하다. 

 

README를 통해 문서 작성이 가능하고, 위키도 가능하다. Issue tracking도 가능하다. 그래픽적인 요소도 제공해줘서 커밋횟수 등등을 알 수 있게 한다. 깃허브 페이지를 본인의 페이지를 만들수도 있다. 개인 포트폴리오를 만들기에는 좋은 서비스이다. 학생인 경우에는 무료로 사용할 수 있는 것들이 많다. 

 

cf) 깃허브는 Ruby로 만들어졌다.

728x90
반응형