윈도우 프로젝트 필수 유틸리티







이 책은 SVN에 대해 다룹니다. SVN 에 대해 꽤나 상세하고 쉽게 설명하고 있기 때문에
큰 프로젝트를 하는 여러 개발자들에게 평가가 참 좋은 편이죠. 그 책 내용 일부중 참 마음에
드는 부분이 있어서 긁어왔습니다. 필자는 SVN의 필요성을 강조하려고 작성한 내용이겠지만,
그 필요성에 대한 예제들이 참 가슴에 와닿고, 전부 진짜 있었던 이야기들인 것 처럼 아주
생생합니다 :) 

아마도 이 작가분은 소스 프로젝트 관리를 엿같이 하고 퇴사한 전임자 때문에 고생한 사람들에
대한 얘기를 여기저기서 많이 들은게 아닌가 하는 생각이 듭니다. 어쨌든 직접 한번 읽어보세요.
특히 강추하는 부분입니다 (SVN 을 단지 WinMerge 등으로만 이용하고 Trac 이나 심볼 서버
등과의 작업을 병행하지 않으신 분들은 책을 통채로 사서 읽어보시는 것도 추천합니다)



일하기 편한 환경 만들기
("윈도우 프로젝트 필수 유틸리티" 中)
이재홍 (pyrasis) http://www.pyrasis.com


어떤 소프트웨어 개발팀이 있습니다. 물론 전담 테스트 팀도 갖추고 있습니다. 이 개발팀의 환경은 이렇습니다. 소스 코드는 개발자 각자 PC에서 알아서 관리하고, 고객에게 판매되는 제품도 개발자 PC에서 직접 빌드합니다. 그리고 빌드된 exe와 dll 파일을 취합하여 FTP 서버에 업로드합니다. 이제 테스트 팀은 FTP 서버에 접속하여 빌드된 파일을 받아들고 테스트를 시작합니다. 별 문제없이 돌아갈듯한 환경입니다. 모든 구성원이 정신 바짝 차려서 일한다면 말이죠.

이런 환경에서 일을 하다보니 여러가지 문제점이 보이기 시작합니다. 개발자는 개발을 하면서 소스 코드가 든 폴더를 날짜별로 복사해가며 관리를 하기 시작합니다. 그래도 이런 사람은 양반입니다. 어떤 개발자는 그냥 귀찮아서 소스 코드가 든 폴더 하나로 개발을 진행합니다.

테스트 팀은 개발팀에서 전달받은 파일로 테스트를 합니다. 마침내 여러가지 버그를 발견하였고, 버그에 대한 내용을 종합하여 엑셀로 작성한 뒤 개발팀에게 넘겨줍니다. 하지만 정해진 전달 경로가 없기 때문에 메일로 보내기도 하고, 메신저로 보내기도 합니다. 더 나아가서 버그 내용을 말로 전달하고 끝낼 때도 있습니다.

개발 업무에 쫓기는 개발자는 버그 내용을 기록한 엑셀 파일을 자신의 PC 어딘가에 방치한 채 그냥 넘어가기도 하고, 말로 전해들은 버그 내용은 쉽게 잊어버립니다. 이런 일이 반복되면서 제품의 버그는 점점 늘어나기 시작합니다. 결국에는 모든 것을 뒤엎고 새로 개발하자는 말이 나오기도 합니다. 테스트 팀 입장에서는 버그 보고를 해도 함흥차사가 되어버리고, 테스트를 제대로 안해서 제품 질이 떨어졌다는 비난만 받게 되니 일할 의욕을 잃게 됩니다.

그래도 이런 저런 고생 끝에 제품이 출시되었습니다. 이제 기술 지원 파트와 고객 지원 파트를 통해서 여러가지 버그가 보고되기 시작합니다. 그래서 개발팀은 버그를 수정하기 위해 담당자가 누구인지 찾게 되었는데, 버그가 발생한 파일의 담당자는 이미 퇴사를 하여 소스 코드가 다른 사람에게 인수인계된 상태였습니다. 물론 새 담당자가 버그를 처리하면 됩니다. 하지만 문제는 이것이 아니었습니다. 퇴사한 개발자는 소스 코드가 든 폴더 하나로 개발을 진행하던 사람이었고, 새 담당자도 이 소스 코드 폴더 하나만 달랑 받은 상태였습니다. 이미 소스 코드의 구조는 엄청나게 바뀌어 있었고, 하위 호환성도 고려되지 않은 채 개발되었기 때문에 버그를 고치려면 구 버전을 다시 만들어야 하는 상황이 되어버린것입니다.

인수인계 과정에서 소스 코드가 분실되는 경우도 비일비재 합니다. 새 담당자에게 소스 코드를 넘겨 줄 때 모두 넘겨주지 않고 실수로 한 두개 빼먹은 상태로 넘겨주기도 합니다. 사고가 터졌을 때에는 퇴사자의 PC는 이미 회수되어 소스 코드를 찾을 수 없을 때도 있습니다.

빌드된 파일 자체도 관리가 되지 않아 FTP 서버에 보관된 파일은 언제나 최신 버전뿐입니다. 버그가 보고되어도 해당 버전의 파일이 없으니 버그를 재현하는 것도 힘들어집니다.(고객 PC에서 해당 파일을 가져오는 수 밖에 없습니다.) 물론 소스 코드 관리가 제대로 되지 않으니 해당 버전을 빌드해서 만들어내는 것도 쉬운일이 아닙니다. 게다가 심볼(PDB) 파일도 따로 보관을 하지 않는 경우가 많아서 덤프 파일을 입수하여도 분석이 힘들때가 많습니다. 정말 디스어셈블된 코드를 보고 버그를 찾는 것도 한계가 있습니다. 고객에게 판매되는 제품을 개발자 각자가 빌드하다 보니 바이러스에 감염된 파일이 제품에 포함되어 배포되는 사고가 발생하기도 합니다. 정말 믿기지 않는 상황들이지만 필자도 겪은 일들이고, 지금도 어디선가 이러한 일들이 벌어지고 있을것입니다.

이제 엉뚱한 곳에 시간을 빼앗기지 않고 개발에만 집중할 수 있는 일하기 편한 환경을 구축한 개발팀의 일하는 모습을 들여다보겠습니다. 일하기 편한 환경을 구축한 이 개발팀은 소스 코드를 Subversion으로 관리합니다. 그리고 각 개발자는 TortoiseSVN을 사용하여 소스 코드를 체크아웃 및 업데이트하고 수정된 내용을 커밋 합니다. 고객에게 판매되는 제품은 빌드 서버에서 빌드합니다. 파일의 버전도 개발자가 올리지 않고 빌드 서버가 알아서 올려줍니다. 빌드 서버는 빌드된 파일을 버전 별로 차곡 차곡 모아둡니다. 물론 심볼(PDB) 파일도 심볼 서버 형식으로 보관을 해줍니다.

버그 보고는 Trac으로 받습니다. 테스트 팀은 버그를 발견하면 해당 프로젝트의 Trac 사이트에 접속하여 버그에 대한 내용을 자세히 기록한 티켓을 생성합니다. 개발팀은 버그 티켓을 확인하여 버그를 수정한 뒤 버그를 수정했다고 답글을 달아놓습니다. 다음날이 되면 자동빌드가 되어 버그가 수정된 새 버전이 올라와 있을것입니다. (급할때에는 강제 빌드 명령으로 즉시 빌드를 할 수 있습니다.) 테스트 팀은 빌드 서버에 접속하여 버그가 수정된 새 버전을 받아 테스트 한 뒤 버그가 수정된 것을 확인하고 해당 티켓을 닫습니다.

개발자는 버그 보고를 티켓으로만 받기 때문에 Trac 사이트만 잘 확인하면 버그 내용에 대해서 잊어버리고 넘어갈 일은 없습니다. 테스트 팀 또한 버그가 수정되면 버그가 수정되었다는 답글이 달리고, 빌드 서버에서 새 버전을 바로 받아 볼 수 있기 때문에 테스트에만 전념할 수 있습니다.

인수인계 과정에서 생기는 각종 문제점들도 이 개발팀에서는 다른 세상 이야기일 뿐입니다. 모든 소스 코드의 내용과 변경 사항에 대한 이력은 모두 Subversion으로 관리되기 때문에 따로 소스 코드를 넘겨줄 필요가 없습니다. 단지 담당하고 있는 프로젝트의 저장소 URL만 알려주면 끝입니다. 이전 버전에서 버그가 발생하더라도 Subversion을 이용하면 해당 버전의 소스 코드를 그대로 가져 올 수 있습니다. 또한 모든 소스 코드가 Subversion 서버에서 관리되기 때문에 특정 소스 코드를 분실하는 일도 발생하지 않습니다.

빌드된 파일도 버전별로 보관을 하기 때문에 버그가 보고되면 해당 버전을 빌드 서버에서 받아 곧바로 재현해 볼 수 있습니다. 그리고 자동빌드를 하면서 Subversion 저장소 정보를 심볼(PDB) 파일에 기록해놓았기 때문에, 덤프 파일을 열면 디스어셈블된 코드 대신 Subversion 저장소에서 소스 코드를 가져와 에러가 발생한 부분을 표시해줍니다. 또한 심볼 서버 형태로 심볼(PDB) 파일을 보관하므로 개발자가 따로 심볼(PDB) 파일을 보관할 필요가 없습니다.

빌드 서버에서 자동빌드를 하기 때문에 개발자들은 제품을 빌드하고 테스트 팀에 넘겨줄 때 소요되는 시간을 절약할 수 있습니다. 또한 제품의 모든 파일은 빌드 서버에서 빌드되므로 빌드 서버만 잘 관리하면 바이러스에 감염된 파일이 배포되는 일은 발생하지 않습니다.

여러분들은 어떤 개발팀에서 일하고 싶습니까?

Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/224 관련글 쓰기

댓글을 달아주세요

  1. 2008/11/27 10:32
    댓글 주소 수정/삭제 댓글
    저희회사보다좋은걸요 :) 덜덜

    참, 그런데 제 입장에서는 일이 너무 많아서, 저런 소스 관리툴을 쓰기란 참 힘든 일인거 같습니다.

    아침에 와서 HTML 짜랴, 점심먹고 application 개발 하랴, 테스트 하랴...

    이렇게 일이 진행되더라도 어김없이 외근나가라는 압박과 이상한거 분석하라는 식의 일처리...

    이런 안습한 x레x 회사에서 일하는 분도 많을 거 같은데요, 여기서 저런 툴 집어넣으면 개발자는 매일 야근입니다 ㅠ_ㅠ;

    [추가1] 툴을 집어넣으면 야근 한다는 이유는 툴에서 오는 시간 허비보다는, 이런 툴을 집어넣으면 관리자들은 외근 나간 사람이나, 후임자에게 '업데이트 다 하고 집에가' 라는 막장 멘트를 던지기 때문입니다. :)
    기본적인 의식 자체가 정립되어있지 않은 상황에서 다른 문화권의 툴을 도입하는 건 자살행위나 마찬가지 인 것 같습니다. (orz)
    • 2008/11/27 11:19
      댓글 주소 수정/삭제
      개념없는 관리자라면 정말 OTL이죠
    • 2008/11/29 15:52
      댓글 주소 수정/삭제
      네 개꿈님께서 너무 수퍼맨처럼 일을 하니까요...;
      사실 회사를 위해서 이것저것 다 해주는 건데
      나중에 회사에서는 그걸 당연히 받아들이고
      오히려 시간이 지나면 그정도는 누구나 한다고 생각하게 됩니다 -_-;
      개발자의 그런 처우부터 개선되어야 하겠죠..
      SVN을 쓸 환경 자체를 언급할 수 없는 분위기라면
      정말...할말이 없네요 ㅠ ㅠ
  2. 2008/11/27 09:50
    댓글 주소 수정/삭제 댓글
    사실 실제 코딩 보다, 배포된 제품 유지보수와 운영이 100배는 더 힘들더군요..


    이러한 시스템은 한번만 구축해놓으면 그 이후에는 시간낭비가 많이 줄어듭니다. 단지 시스템을 도입하기 꺼려하는것이 문제지요.


    야근 하고 안하고 하는건 몰려드는 일의 양이 문제라고 생각합니다.


    시스템이 아주 잘 되어 있어도 일이 엄청나게 몰리면 야근하는거고, 시스템이 개판이라도 일이 없으면 그냥 칼퇴하는거죠. :)


    단 시스템이 잘 되어있을 때 일이 몰리면 그나마 삽질과 시간낭비가 많이 줄더군요.
    • 2008/11/29 15:55
      댓글 주소 수정/삭제
      책 저자께서 답을 달아 주셨네요 ㅎㅎ
      일을 해도 해도 끝이 없는건
      그렇게 돌아가는 업무프로세스의 문제라고 생각해요.
  3. 2008/11/27 10:43
    댓글 주소 수정/삭제 댓글
    Visual SVN 은 어떨까?
    SVN은 다 좋은데 서버 셋팅하기가 힘들어서 말이지...
    • 2008/11/29 15:55
      댓글 주소 수정/삭제
      책 저자께서 맹글어놓은 한글판 서버 사용하면 쉬워
      함 찾아봐라
  4. 2008/11/27 11:19
    댓글 주소 수정/삭제 댓글
    이런게 있었군요~~ ㅋㅋ
    획기적이네욤..
    저자께 미안하지만 받기만하고 아직 읽어보지는 못했다는...
    • 2008/11/29 15:56
      댓글 주소 수정/삭제
      ㅋㅋㅋ 저자분께서 속상해 하겠는걸요 ㅎ
  5. 2008/11/27 14:13
    댓글 주소 수정/삭제 댓글
    아니..근데 메인사진이 어디갔습니꽈?ㅋㅋ
    • 2008/11/29 15:56
      댓글 주소 수정/삭제
      그냥 쵸큼 민망해서 없앴습니다 ;
  6. 2008/11/29 22:00
    댓글 주소 수정/삭제 댓글
    저 책 덕분에 개발 프로세스에 대한 시야가 넓어진 느낌입니다.
    저 책의 저자 덕분에 살 맛 납니다. ^^
    • 2008/11/30 14:43
      댓글 주소 수정/삭제
      살 맛 나신다니.. 정말 다행입니다 . ㅋ

BLOG main image
by window31

카테고리

분류 전체보기 (281)
Reverse Engineering (21)
C, C++ (20)
Kernel (8)
Guitar (19)
잡담 (77)
etc (8)
who am i (8)
보안 이야기 (88)
Tools (3)
월간 마이크로소프트웨어/그.. (28)

글 보관함