소규모 개발회사나 팀에서 구축할 수 있는 협업 시스템, 특히 CI를 위한 개발지원 시스템을 꾸미기 위해 Synology NAS를 이용하는 방법등을 적어 보고자 합니다. 저희는 주로 Java 생태계를 이용하므로 Java 위주가 되겠지만, 다른 언어를 사용하는 경우에도 크게 다르지 않을것 같습니다. 암튼, 이를 위해서 크게 다음과 같은 전제 조건을 정했고, 비슷한 요구조건을 가지신 분들에게 도움이 되셨으면 좋겠습니다.
블로그에서 각 시스템의 자세한 사용법을 설명하지는 않습니다. 설치와 연동 방법에 대해서만 주로 다룹니다. 이점 양해 바라 겠습니다.
전제조건
- 소프트웨어는 무료 솔루션이어야 한다.
- 계정이 통합되어야 한다. (로그인은 각각 하더라도, 계정 정보가 연동 되어야 한다)
- 사용하기 쉬운 시스템이어야 한다.
- 사내에 구축되어야 한다.
- 안정성이 있어야 하며 장애시 100%는 아니더라도 백업을 통한 복구가 반드시 가능해야 한다.
필요 시스템
- Wiki
- Issue Tracker
- SCM
- Maven/Docker Local Repository
- CI
- Slack과 같은 모바일을 지원하는 Communication tool
- Google Docs와 같은 온라인 문서작성 tool
- 기타 개발 지원 시스템
- 파일 서버와 백업 서버
Wiki
개인적으로 협업과 위키시스템에 관심이 많았습니다. 그래서 인지, 이제까지 사용해본 위키는 MeidaWiki, Doku, Confluence, Xwiki, 심지어 지금은 역사속으로 사라진 Mac OS Wiki Server 등입니다. 개인적으로는 역시나 Atlassian 의 제품들이 지존 이라고 생각 하고 있습니다만, 역시나 그놈의 비용이 문제죠. 아무리 경영자를 설득하려 해봐야 돌아오는 답은 뻔합니다. 흠흠..
비교적 사용하기 쉽고, 페이지 단위의 퍼미션(팀별로 접근해야 하는 페이지가 있을 수 있으므로)이 있어야하고, 한글 검색이 되어야 한다는 점에서 Xwiki를 선택 했습니다. 아래 서술된 gitlab에도 wiki가 있습니다만, 페이지들이 프로젝트에 한정되어 있는 데다가 개발자가 아니면 사용하기 어려운 점이 걸렸습니다. 개발팀 뿐만 아니라 전사적인 협업 포탈이 되기 위해서는 좀 더 덜 개발자 스러워야 했습니다. ^^
SCM
RCS, CVS, SVN 을 거쳐 이제는 Git이 대세가 되었다죠. 개인적으로 생각할 땐 기업에서의 소규모 개발팀은 SVN이 더 어울린다고 생각 합니다만, 어쨌든 대세를 역행 할 순 없겠죠. 그랬다간 꼰대 소리를 들을 테니까요 *^^*
단순히 git서버만을 설치 할 수 있겠지만, gitlab이라는 설치형 서비스가 있습니다. gitlab.com이 무제한 private repository를 제공하는 훌륭한 무료 서비스지만, 사내에 구축하기로 했으므로 gitlab을 설치하여 운용하기로 하였습니다. 게다가 gitlab은 내부에 issue tracker와 간단한 wiki도 가지고 있습니다.
Issue Tracker
지존의 시스템 Jira 를 쓰고 싶지만(Jira의 workflow 정의를 이용하여 사내 승인/기안/품의등을 모두 처리한 적이 있을 정도) 저희는 가난하므로 과감히 미련을 버립니다. Mantis와 같은 훌륭한 무료 툴도 있고, 정확히 이 범주라고 하기는 뭐하지만 Trac, Redmine 같은 좋은 툴들이 많이 있습니다만, 결론적으로 저는 gitlab의 issue tracker를 쓰기로 하였습니다. 간단한 Kanban 보드 비스므리한 board 도 있고, 여러 프로젝트에 걸친 todo를 보여주기도 하고, git commit log에 이슈 번호를 적으면 프로젝트에서 보이기도 하고, 여러가지로 나쁘지 않은 선택 이라고 생각 했습니다. 또한 경험상 대부분의 개발자들이 issue tracker 자체를 잘 사용하지 않기 때문에, 최대한 심플한 시스템을 원했습니다.
커뮤니케이션
대세가 되어 버린 Slack. 무료 버전은 메시지수의 제한이 있는데다가 무료로 오래 쓰다 보면 점점 느려진다는 확인되지 않은 루머가… 암튼 메일은 정말로 쓰잘데기 없는 시스템이므로 Slack 비스무리라도 사내에 설치하고, 계정도 통합 되었으면 좋겠습니다.
그외
Maven과 docker repository는 망설임 없이 Nexus를 선택 하였고, 마찬가지로 CI는 Jenkins 를 사용하기로 하였습니다. gitlab에도 CI tool이 있는데, 이것(gitlab-runner)도 이용해 보기로 합니다. 정적 분석을 위해 SonarQube도 붙여 봅니다.
파일공유와 백업을 위해서 NAS를 도입할 것이며, 저는 Synology를 선택 하였습니다(저는 synology와 1도 관련 없습니다). 이유는 블로그 전체에서 하나씩 밝혀지리라 봅니다.