메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

소스 코드 공유를 위한 패턴

한빛미디어

|

2005-03-29

|

by HANBIT

14,297

저자: 이현창
출처: IT CookBook, C++ 프로그래밍 입문 : 초보자를 위한 객체지향 프로그래밍 현장의 목소리 중에서

학창시절에 만드는 프로그램들은 대개 혼자서 만들어보는 것들이 대부분이다. 반면에 회사에서 진행하는 프로젝트는 적어도 4~5명 이상의 개발자들이 모여서 작업하기 때문에 혼자서 만드는 때와는 다르게 신경써야 할 것들이 많다. 그 중에 가장 쉽게 예상할 수 있는 부분이 여러명이 같은 소스 코드를 함께 다루어야 한다는 점이다.

쉽게 생각한다면, 파일 서버에 소스 코드를 올려두고 필요한 파일에 접근해서 소스 코드를 수정하는 방법을 사용할 수도 있겠지만 같은 파일을 동시에 접근해서 고치기라도 하면 누군가 한 명의 작업 내용은 덮어 써져서(Overwrite) 모조리 잃어버리게 된다.

다행히도 버전 관리 시스템(Version Control System)을 이용하면 이런 문제점을 해결할 수 있다. 이름을 들어본 이도 있겠지만 유명한 버전 관리 시스템으로는 마이크로소프트 비주얼 소스세이프(VSS), 컨커런트 버전 시스템(CVS), 서브버전(SVN) 등이 있다.

여기서는 이러한 버전 관리 시스템을 사용하는 두 가지 패턴에 대해서 알아보자. 개발자가 있는 회사라면 어느 곳이라도 버전 관리 시스템을 사용하고 있으니 신경써서 잘 읽어두면 훗날 꼭 도움이 될 것이다.

우선 패턴에 상관없이 동일한 부분부터 보자. 버전 관리 시스템을 사용할 때는 전용의 서버 머신을 두는 것이 일반적인데, 서버 머신이라고 해서 대단할 것은 없고 그저 메인 소스 코드를 보관하는 창고의 역할을 하는 컴퓨터일 뿐이다. 소스 코드가 서버 머신에서 관리되기 때문에 소스 코드를 편집할 때는 다음과 같은 방식으로 해야 한다.

1. 작업할 소스 코드를 서버 머신으로부터 자신의 컴퓨터로 복사해온다.
2. 복사해온 소스 코드를 가지고 작업을 한다.
3. 작업한 내용을 서버 머신의 소스 코드에 적용한다.

물론 이것이 전부라고하면 앞서 말했던 것처럼 동시성의 문제를 피할 수 없다. 그렇기 때문에 버전 관리 시스템의 힘을 빌려서 다음의 두 가지 패턴 중에 한 가지를 사용해야 한다.

Lock – Modify – Unlock 패턴

이 패턴은 아주 간단한데 도서관에서 책을 빌리는 것과 유사하다. 도서관에 비유한다면 Lock-Modify-Unlock 대신에 대출-독서-반납 이라고 표현할 수 있을 것이다. 같은 소스 코드를 공유하는 개발자들 간에 이 패턴을 사용하기로 약속했다면, 개발자가 할 일은 아주 간단하다.

1. 작업할 소스 파일들을 복사해 오면서 잠근다. (Lock)
2. 복사해온 소스 코드를 가지고 작업을 한다. (Modify)
3. 작업한 소스 코드를 서버 머신의 소스 코드에 덮어 쓰면서 잠금을 푼다. (Unlock)

1단계에서 내가 파일을 잠그면 다른 동료들이 이 파일들을 수정할 수 없기 때문에, 2단계에서 마음껏 소스 코드를 수정할 수 있다. 마찬가지의 이유로 자신 외에는 소스 코드를 수정한 사람이 없을 것이므로 3단계에서 서버 머신의 소스 코드를 자신의 것으로 덮어 써버리면 된다.

이 패턴은 어느 한 순간에 한 명의 개발자만 소스 코드를 수정하는 것을 보장함으로써 동시성의 문제를 해결한다. 물론 내가 작업할 파일만 잠궈두는 것이기 때문에, 나머지 파일들에 대해서는 누구라도 작업 할 수 있다.

하지만 내가 수정하려고 하는 파일을 다른 사람이 이미 잠궈놓은 상태라면 어떻게 해야 할까? 방법은 두 가지다. 기다리거나, 그 사람에게 풀어달라고 요청할 수 있다. 내가 빌리려는 책을 다른 사람이 이미 대출해간 상황과 같다고 보면 된다. 그리고 이 점이 이 패턴의 가장 큰 단점이기도 하다.

Copy-Modify-Merge 패턴

이 패턴은 또 다른 전략으로 동시성의 문제를 해결하고 있는데, 잠금과 같은 개념이 없어서 같은 파일이라 할지라도 여러 명이 동시에 수정할 수 있다. 이 패턴을 사용하기로 약속했다면 다음과 같은 식으로 작업할 수 있다.

1. 작업할 소스 코드를 복사해 온다. (Copy)
2. 복사해온 소스 코드를 가지고 작업을 한다. (Modify)
3. 작업한 소스 코드와 서버 머신의 소스 코드를 병합한다. (Merge)

앞에서 본 Lock-Modify-Unlock 패턴과는 다르게 2단계에서 나 혼자만 소스 코드를 수정한다는 보장이 없기 때문에, 3단계에서 소스 코드를 단순히 덮어 써버리는 대신에 병합할 필요가 있다. 이렇게 하면 내가 1~2 단계를 수행하는 사이에, 다른 동료가 서버 머신의 소스 코드를 변경했다고 하더라도 그 동료가 수정한 내용과 내가 수정한 내용이 모두 남아있게 된다.

이 패턴을 사용하면 다른 동료의 작업이 끝날 때까지 기다릴 필요가 없어서 좋다. 그리고 거의 대부분의 경우에 버전 관리 시스템이 자동으로 병합작업을 해주기 때문에 별도의 노력이 필요하지 않다. 하지만 같은 파일의 같은 부분을 동시에 수정한 경우에는 자동으로 병합하는 것이 불가능하기 때문에, 둘이 머리를 맞대고 소스 코드를 봐 가면서 수작업으로 일일이 병합을 시켜주어야 한다. 그리고 이 점이 이 패턴의 가장 큰 단점이다.

인기 있는 버전 관리 시스템

비주얼스튜디오를 사용하는 개발팀의 경우에는 거의 대부분 VSS를 사용하는데, 비주얼스튜디오에서 직접 지원이 되어 사용이 매우 편리하기 때문이다. 두 가지 패턴 모두 사용이 가능하지만 Copy-Modify-Merge 패턴으로 사용하는 경우 가끔씩 서버 머신의 소스 코드가 손상되는 경우가 있다.

그 밖의 개발팀에서는 CVS를 많이 사용한다. 대부분의 오픈 소스 프로젝트들이 CVS를 사용하기 때문에, CVS의 간단한 사용법 정도만 알아두어도 오픈 소스 프로젝트의 소스 코드를 편리하게 받아올 수 있다. CVS는 보통 Copy-Modify-Merge 패턴으로 사용한다.

SVN은 CVS의 단점을 보완해서 만든 것으로 기본적인 사용법은 CVS와 큰 차이가 없지만 내부적으로는 많이 차이점을 가지고 있다. VSS와 CVS가 오랫동안 사용되어온 믿을 만한 버전 관리 시스템이라 하면, SVN은 강력하고 편리한 기능을 바탕으로 이제 막 떠오르고 있는 버전 관리 시스템이라고 볼 수 있다.

버전 관리 시스템은 회사마다 다른 것을 사용하고 있기 때문에 여러분이 비주얼스튜디오를 사용한 개발만 한다고 하더라도 세 가지 버전 관리 시스템을 한 번씩 사용해 볼 필요가 있다.

버전 관리 시스템의 또 다른 기능

버전 관리 시스템에는 소스 코드의 공유를 지원해주는 기능에 더해서 두 가지 더 큰 기능이 있다. 하나는 그 이름 그대로 소스 코드의 버전을 관리해주는 기능이다. 쉽게 말해서, 언제라도 옛날 버전의 소스 코드를 꺼내서 볼 수 있다는 뜻이다. 여러분도 프로그램을 만들다가 소스 코드를 날려버리거나 너무 지저분해져서 되돌릴 수 없는 경우를 당해본 적이 있을텐데, 버전 관리 시스템을 사용해왔다면 언제라도 예전 버전의 소스 코드를 꺼내서 다시 작업을 할 수 있다.

한 가지 더, 버전 관리 시스템 내부적으로 여러 버전의 소스 코드를 효율적으로 압축해서 보관하기 때문에 소스 코드 백업 용도로만 사용한다고 하더라도 하드 디스크 공간을 많이 절약할 수 있다.

마지막 당부의 말씀. 여러분 혼자서 만들어보는 프로그램이라 하더라도 버전 관리 시스템을 사용해서 소스 파일을 관리해 보자. 버전 관리 시스템은 소스 코드에 대한 보험이다.

[참고자료]

1) VSS 홈페이지 : http://msdn.microsoft.com/vstudio/previous/ssafe/
2) CVS 홈페이지 : http://www.cvshome.org/
3) SVN 홈페이지 : http://subversion.tigris.org/
메인 메뉴에 Subversion Book 을 누르면 무료 e-book을 볼 수 있는데, 설치부터 사용까지 상세하게 설명이 되어 있다. 이 글에서 설명한 두 패턴의 이름을 이 책에서 빌려왔다.
TAG :
댓글 입력
자료실

최근 본 책0