티스토리 뷰

소프트웨어 개발팀을 구성할 때 중요한 것 중 하나가 협업 시스템의 구축이다. 소프트웨어 개발에 필요한 기본적인 협업 시스템은 다음과 같은 것들이 있다.

  • Issue Tracking System(ITS)
  • Source Control Management (SCM)
  • Wiki
  • Code Review System (CR)
  • Continuous Integration (CI)
  • Agile Management Tool
  • Messenger, Internet Relay Chat(IRC) 

오픈 소스 기반의 협업 시스템을 위주로 각각의 툴에 대한 사용 방법들에 대하여 하나 하나 설명을 진행할 예정이다. 

우선은 각각의 툴의 특징 들과 종류들에 대해서 언급해보자.

1. Issue Tracking System (ITS)
이력관리가 되는 To-do list라고 볼 수 있다. 새로 개발해야할 것들, 문제점들에 대하여 체계적으로 관리하는 것을 목적으로 한다. 
ITS 시스템을 갖추지 않은 팀에서는 Wunderlist, Toodledo와 같은 웹기반 to-do 리스트를 이용하여 해야 할일을 관리하기도 한다. 하지만 이와 같은 단순 to-do 툴 과의 차이점은 이슈가 생성한 시점부터 해결하여 종료될 때 까지의 모든 이력(문제점 보고, 문제점 논의, 테스트 결과, 수정 내역, 소스코드 패치 내역, 시험 결과, ...)을 관리할 수 있다는 것이다. 

간단한 예를 들어보면 오픈소스로 ITS 기능을 제공하는 Phabricator의 issue 중 아래와 같은 하나를 참조해 보면 어떻게 관리한다는 것인지 알 수 있을 것이다. 

문제점에 대해서 처음 등록하면 위 T6887과 같이 티켓번호가 생성되고, 담당자나 참조가 할당되어, 일반 게시판처럼 문제 증상에 대하여 논의하면서 문제를 해결하는 방향으로 진행해 나갈 수 있다. 이와 같은 이슈들을 모으면 소프트웨어 릴리즈 이력이 될 수 있다. 

이와 같은 ITS에 Source Control System(SCM)의 소스 수정 내역도 같이 링크되고, 시험 검증 결과 등도 모두 연동되어 관리다면 이 시스템이 크게 돋보일 수 있다. 소프트웨어 개발 상의 과거의 모든 행위가 ITS를 확인해 보면 거의 대부분 복기가 가능하게 된다. 

오픈소스 기반의 ITS 시스템으로 인기가 높은 것으로는 다음과 같은 것이 있다. 

이들 시스템의 장단점들은 차후에 하나씩 정리할 계획이다. 

2. Source Control Management (SCM)
ITS는 이슈들의 이력을 관리한다고 하면, Source Control Management(SCM)소스코드의 이력을 관리하는 것이다.

많이 사용하는 툴로는 다음과 같다.

CVS, SVN의 경우 서버,클라이언트 구조의 집중형 모델이지만, git의 경우 모두가 서버인 분산형 방식이다. CVS, SVN을 사용하던 개발자가 git을 사용하였을 때 이와 같은 분산형 모델의 차이점 때문에 어려워 하지만, 익숙해지고 나면 단순 에디터와 워드프로세서의 차이랄까. 기존 툴 대비 git은 수 많은 장점을 가지고 있고 이를 활용하면 소스코드도 더욱 체계화 될 수 있다. Linux kernel의 경우 3.x 버전에서 판올림이 기존 2.6 대비 급격히 빨라진 것도 이와 같은 git 분산형 방식의 관리 덕분이다. 

Open source proejct의 상당 부분이 현재 git으로 전환된 것을 보면 이의 유용성을 간접적으로 알 수 있을 것이다. 

3. Wiki
일반적인 경우 협업 개발 시스템의 최소 세트는 ITS + SCM + Wiki 이다. Wiki는 웹 기반의 문서화 시스템으로 백과사전 프로젝트인 Wikipedia를 보면 어떤 것인지 이해가 갈 것이다. 

Wiki로 문서화를 하였을 때의 장점은 다음과 같은 것이 있다. 
  • 웹 상으로 여러명이 문서작업 가능
  • 문서 검색 기능
  • 문서 수정 이력 관리 및 복원
기존에 Microsoft Word 등을 이용하여 문서를 만든 후 디렉토리로 분류하여 관리하여 작업하던 개발자가 wiki를 이용하여 문서를 관리하기 시작하면 이와 같은 장점보다는 다음과 같은 혼동을 가져올 수 있다.
  • 디렉토리 구조처럼 top down 방식으로 문서를 찾아가기가 쉽지 않다. 서로 link로 연결만 되어 있지 상하 관계과 명확히 보이지 않는다.
  • 다수의 사람이 문서를 만들어 나가다 보니 문서 구조, 내용이 맘에 들지 않는다.
  • 출력 결과가 Word 처럼 깔끔해 보이지 않아 눈에 잘 들어오지 않는다(위키로 작업을 하다보면 웹 방식의 제한으로 인하여 엑셀을 이용한 복잡한 테이블을 그리는 것이 쉽지 않다).
이와 같은 단점을 극복한다면 언제 어디서나 쉽게 자료를 찾을 수 있는 wiki의 장점을 크게 느낄 수 있을 것이다. 또한 ITS 등의 다른 툴과도 상호 연동된다면 장점은 배가 될 것이다.

Extention도 많고 사용자도 많은 wiki 툴은 다음과 같다. 

4. Code Review (CR)

소스코드를 다른 사람이 리뷰를 하면 소스코드의 품질이 크게 좋아 질 것이다. 물론 이에 대한 거부감도 없고, 형식적이지만 않는다면... 

Code review는 보통 SCM과 연동하여 SCM에 코드가 등록되기 전후에 리뷰를 하는 절차를 추가하도록 되어 있다. 

관련 툴로는 다음과 같은 것이 있다.


5. Continuous Integration (CI)

CI는 소프트웨어 개발에서 반복적으로 일어나는 일들을 자동화 해주는 툴이다. 예를 들어 다음과 같은 것이 있을 수 있다.

  • git에 소스코드를 commit(등록)하면 자동으로 컴파일 실행하여 에러 있는 지 확인. 또는 unit test를 돌려 결과가 정확한지 확인
  • Daily 빌드 및 배포 자동화

CI로는 Jenkins가 거의 독보적이다. 다양한 extension이 있어 SCM 등 여러 툴과 연동이 가능하다. 


6. Agile Management Tool

최근 소프트웨어 개발에서는 agile 개발 방법론인 scrum이나 kanban을 많이 도입한다. 이와 같은 방법론을 도입하는 경우 진행 상황을 확인할 수 있는 scrum의 burndown chartkanban board를 관리하여야 한다. 가장 효과적인 방법은 커다란 화이트보드나 벽면을 이용하는 것이라고 하는데... 막상 이런 방법론을 도입하다보면 ITS(Issue Tracking Systgem)의 이슈 관리와 일이 중복되는 느낌이 든다. 

이래서 ITS의 extension 기능으로 이와 같은 agile 방법론을 적용할 수 있는 기능을 제공해 주기도 한다.


7. Messenger, Internet Relay Chat (IRC)

오픈 소스 프로젝트를 보면 git repository(저장소), mailing list, 그리고 채팅을 위한 IRC 채널을 기본적으로 구축한다. 다수의 사람들이 원격으로 작업하는 오픈 소스의 경우 IRC가 반드시 필요하다고 생각할 수 있지만 일반 개발팀내에서도 IRC를 활용하는 것도 도움이 될 수 있다.

이와 같은 개념을 확장한 것이 최근에 뜨고 있는 기업용 협업 시스템이다. 오픈 소스는 아니지만 무료로 사용할 수 있는 Slack이 가장 유명한 툴이다 (유료로 전환하는 경우 무제한 검색과 확장기능 제공). 

말로 하는 것은 남는 것이 없어서 보통은 사내나 팀내에서 이메일이나 메신저를 통하여 서로 의견 교환을 하는데 이도 공유가 제대로 되지 않거나 찾는데 어려운 문제가 있다. 이와같은 부분을 도와줄 수 있는 것이 Slack과 같은 시스템이다. 이를 사용해 보면 사내의 email 전달이 크게 줄어들게 되고, 정보 공유가 좀 더 원활히 되는 것을 느낄 수 있어 도입 해봄직하다.



이상 각각의 툴에 대한 특징과 종류를 언급했고, 다음에는 각각의 툴에 대해서 하나씩 이야기를 해볼 예정이다.


댓글
댓글쓰기 폼