일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- XBOX360
- DotNetOpenAuth
- 기어스 오브 워
- ASP.NET
- 커버구루
- gitlab
- 센티넬
- c#
- 닷넷
- .NET
- replication
- Gears of War
- 고가용성
- TeamCity
- redis
- haproxy
- AirComic
- Keepalived
- 개발
- Cover Guru
- 복제
- mmbot
- 레디스
- 네아로
- ipod
- NoSQL
- iPod Touch
- High Availability
- sentinel
- DSM6
- Today
- Total
Once in a Lifetime
.NET 개발자로서의 협업 - 1 본문
닷넷이라는 플랫폼을 처음 접한게 2005년이니까 벌써 만 10년이 넘게 닷넷 플랫폼으로 밥을 벌어먹고 살고 있다. 그동안 진행했던 프로젝트들도 수십건이 넘고, 그때마다 독고 솔로 개발을 하는게 아니다보니, 팀 단위의 협업을 하게되는데 그동안 협업을 하면서 느꼈던 점들, 그리고 현재 나는 그때와 어떻게 달라졌는지에 대한 잡설을 조금 풀어보고자 한다.
- 형상관리
취미로 하던 개발이 취업을 하게되면서 일이 되고, 첫회사에서 닷넷이라는 플랫폼. 비주얼 스튜디오라는 IDE, NT 서버를 접하게 되었다. 그리고, 이미 그 시절에도 슬슬 퇴물이 되어가는 VSS라는 SCM을 처음 사용하게 되었는데, 난생 처음으로 팀단위의 프로젝트를 하게된 나에게는 신기방기하고도 안전하고 편리한 툴이었던 것으로 기억 된다. 중앙집중식에 파일단위의 락. 그야말로 강려크한! SCM이었지만, 아이러니하게도 그 강려크함이 팀작업에서는 이루말 할 수 없는 불편함들이 되는 경험을 한적이 많았다. 커밋이라는 개념자체가 없었고 당연히 병합(Merge)이라는 개념도 없는...순수한 파일락 방식의 SCM은 누군가에겐 마음의 안정을 가져오게 하는 툴이었지만, 나와같은 누군가에게는 복창터지는 답답함을 안겨주기에 충분했다. 그마저도 제대로 이해하고 있는 사람이 없었서 각종 참조 라이브러리와 바이너리 폴더(+파일)들까지 체크인하는 통에 이미 VSS는 소스를 관리하는 툴로써의 기능(협업을 위한 도구로써의 기능)은 상실한 상태였다. 심지어 신규 입사자가 VSS 서버에서 소스를 내려받고 빌드 가능한 상태까지 만드는데까지(혹은 팀의 개발 싱크를 맞추기 위한 시간까지) 며칠씩 걸리기도 일쑤 였다. MS 개발자(특히 닷넷 플랫폼)들은 셋트 아이템이라도 맞춘냥 형상관리를 거지같은 VSS로 끼워 맞추는 기현상을 몇번의 이직을 거친 2014년도까지 접할 수 있게 되었다.
그러다가 접하게 된 SVN은 처음 VSS를 마주했을때 만큼은 아니었지만 그야말로 신선한 충격이었다. 하나의 무결성 소스로 서로의 작업(진정한 의미의 협업)을 하고, 서버로의 반영도 파일락이 아닌 커밋 단위로 서버에 반영하며, 작업한 각각의 분량은 병합을 하는 방식. 이제야 제대로 협업을 한다는 느낌을 받았었다. 하지만, 주위에는 여전히 SCM 따위 먹는건가요? 를 시전하는 사람들이 많았고, 여전히 각종 참조 바이너리와 빌드 후 생성되는 바이너리들을 신주단지 모시듯, 불필요한 파일까지 커밋하는 혼돈의 카오스 상황이었다. SVN 은 VSS에 비하면 신세경급의 SCM이었지만, 브랜치 관리가 여전히 부실해 보였다. 다른 팀원의 작업물을 내 로컬로 업데이트라도 할때면, 개발자들이 만들어 놓은 브랜치들이 중구난방으로 내 PC로 쏟아져 들어오는 왔다. 제법 큰 대형 솔루션에 브랜치가 2-3개라도 만들어져 있으면, 내 컴퓨터의 모든 자원이 서버로부터 싱크하느라 사용될 지경(PC 가 구렸을까? 아님 TortoiseSVN이 문제였을까? 아직 미스테리)이었으니...어느 순간부터는 소스 업데이트하기가 무서워(?)졌다. 중앙집중식으로 자원관리를 하는 다른 SCM도 도낀개낀이라 그러려니 해야지 별수있나?
여하튼, 2년전쯤부터는 Git 을 사용하고 있는데, 기본적으로 분산 버전 관리 시스템 기반이다보니, 실제 프로젝트를 운영함에 있어서 이와 같은 방식이 개발/운영 플로우를 좀더 유연하게 대처할 수 있다는 점이 가장 좋았다. Git Flow 라 불리는 도구가 좋다고 하지만, 사내에서의 브랜치 관리를 그 정도로 세분화 필요는 없어서, 현재는 Git Flow 에서 일부 차용해서 브랜치를 운영하고 있다. 사실 Flow 라 할것도 없는 가장 베이직의 형태로 운영중이다.
- 라이브 배포버전의 master 브랜치
- 개발/스테이지 배포버전의 develop 브랜치