게임을 개발하는 프로젝트엔 여러 사람이 동시에 개발을 진행하게 되기 때문에, 프로젝트 관리를 위한
팀 시스템의 도입이 필수입니다.
IMC의 경우 개발 소스관리와 버전 컨트롤을 위해 SVN(Subversion)을 사용하고 있습니다.

SVN을 도입한다는 것은 수십명이 참여하여 하루에도 몇십 몇백개씩 파일이 추가되는 거대한 프로젝트에
거대한 UNDO 버튼을 다는 것과 같은 일이기 때문에, '그라나도 에스파다' 처럼 현재 한국 외 해외 7개국의
각기 다른 버전의 동시 서비스 유지를 위해서는 필히 도입해야 하는 시스템입니다.
지금 와서 되돌아보면 SVN가 없었다면 어떻게 개발했을까 할 생각이 들 정도로, IMC의 프로젝트 관리의
핵심 도구가 되어 있습니다.

최근 타 개발사 관계자들과 대화하던 중에 아직도 SVN을 쓰지 않거나, 심지어는 SourceSafe나 CVS 같은
개발환경조차 쓰지 않는 개발사가 많다는 것을 알게 되어 이 툴에 대해서 완벽하게 알려드릴 수는 없지만,
유용한 점은 함께 나누고자 SVN에 대한 글을 게시하게 되었습니다.

SVN 홈페이지 : http://subversion.tigris.org


일단 SVN이 무엇인지를 알아봅시다.
어떠한 사항을 개발하여 적용할 때 자기가 개발한 사항만 알고 다른 사람이 개발한 사항은 모르고 있다…
이런 상황이 되면 어떻게 될까요? 아마도 업무가 지연되고 마비가 오고… 아마도 이런 상황이 벌어지겠지요?
따라서 여러 개발자가 하나의 프로젝트를 진행함에 있어 통합적인 관리를 할 수 있는 툴이 필요합니다.
그 중에 하나가 SVN이고요.
SVN은 소스에 대한 통합적인 관리 및 서버와 클라이언트 간 원본 등을 유지함으로써 백업이 가능한 기능, 그리고 개발 버전과 유저들에게 배포되는 릴리즈 버전이 서로 섞이지 않고 관리가 가능한 툴이랍니다.




그렇다면 SVN의 장점은 무엇일까요?
SVN은 버전 관리 시스템 중에서 가장 진보된 형태라 생각됩니다. SVN이 다른 여타 버전 관리 시스템 보다 좋은 이유. 한번 알아볼까요.
1. 리비전 별로 파일 백업이 가능하다.
    - 버전별 백업이 가능하여 잘못 수정된 사항에 대해서는 전의 리비전 번호로 되돌려 파일 복원이 가능하다는 것입니다.
      따라서 실수가 있을 경우에도 수정이 매우 빨리 이루어질 수 있어 매우 유용하다 볼 수 있습니다.
2. 개발버전과 배포버전을 섞이지 않고 쉽게 관리할 수 있다.
3. 파일 이름 변경, 이동, 디렉토리 버전 관리도 지원이 가능하다.
4. 여러 사용자가 동시에 커밋을 하더라도 충돌이 일어나지 않는다.
5. 파일 하나당 버전이 붙지 않고, 한번 커밋을 할 때마다 revision 이 올라간다.
- 동시에 한 사용자가 여러 개의 파일을 올릴 지라도 커밋할 시 revision 이 올라가게 됩니다.
따라서 어느 revision 에 어떠한 파일을 커밋했는지 확인하기 용이하지요.
6. 커밋 시에 자동으로 로그를 남길 수 있는 기능이 있다.
- 어떤 개발자가 어떤 파일을 커밋했는지 내용을 알지 못한다면 난감한 경우가 발생하기 쉽겠지요?
그러므로 파일 커밋 시, 내용을 적을 수 있도록
7. 서버 – 클라이언트 양방향 데이터 전송으로 네트워크 소통량을 최소화한다.
8. 트리별, 파일별로 접근 제어가 가능합니다. 접근이 가능한 개발자는 누구라도 수정이 가능하다.




001_2.jpg

이렇게 좋은 툴이!!!!!




이제 SVN을 사용하실 준비가 되셨나요?
SVN 프로그램을 사용하기 위해서는 두개의 파일을 받게 되는데요.
Subvesion 윈도우 버전 파일을 일단 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 의 주소에서 받습니다.
전 가장 최근에 올라온 Svn-1.4.5-setup.exe파일을 받았구요.

002.jpg





그 다음 Tortoise SVN 파일을 받아야합니다. http://tortoisesvn.net/downloads 에서 PC에 맞게 msi파일을 받습니다.
전 TortoiseSVN-1.4.5.10425-win32-svn-1.4.5.msi 를 받았습니다.

003.jpg

두개의 파일을 받았으면 이제 설치를 해봅니다. 대부분 기본 설정으로 놔두고 파일 설치를 완료하였습니다.




자, 이제 본격적으로 SVN을 다뤄봅시다.

- SVN 원본 저장소(Repository)를 만들자.
일단 원본이 되는 파일이 있는 저장소를 만들어야 다른 개발자도 사용을 하겠지요?
우선 서버용으로 사용할 PC를 정합니다.

004.jpg

사내 서버실의 모습. 좋은 머신을 사수하라!




자 이제 아래와 같이 따라해주세요. 시작 → 실행 → cmd 를 친 후 아래와 같이 지정해봅시다.
저는 D 드라이브에 svn 이라는 폴더를 생성하고 그 곳에 저장소를 만들 것입니다.
아래와 같이 D 드라이브로 들어가 svn 폴더로 들어갑니다.
그런 다음 svnadmin create –fs-type fsfs 저장소 이름(임의로 지정해주세요)을 칩니다. 저는 SvnTest 라 저장소명을 정하였고, 이곳에 파일들을 저장할 것입니다.


생성이 제대로 됐는지를 확인하기 위해서 svn checkout file:///D:/svn/SvnTest 를 실행하여, 체크아웃된 리비전 0이라 나오는지 확인합니다.



005.jpg

마지막으로 svnserve –d –r D:Svn(폴더명)을 적은 후 실행하면 저장소가 구동됩니다.
콘솔창을 끄게 되면 저장소가 구동되지 않으니, 그 점 꼭 유의하세요~




* 이 외에도 서버 PC와 웹 페이지와 연동하여 http 주소로 파일을 받으실 수도 있습니다. 저희 회사의 경우에도 아파치 서버와 연동시켜 사용하고 있습니다.






- SVN 사용자에게 권한을 추가하자.

006.jpg

저장소 폴더에 있는 confpasswd 파일을 메모장으로 열어, 맨 아래 부분에 계정과 비밀번호를 넣습니다.
msjee79 가 계정, 1111 이 비밀번호가 됩니다.





007.jpg

위에 빨간 테두리 안을 다음과 같이 고쳐줍니다.
anon-access = none 로 변경합니다.
이 부분은 인증받지 않은 사용자의 경우 읽기를 허용하지 않겠다는 뜻입니다.
또, auth-access = write 로 변경해줍니다. 인증 받은 사용자의 경우 쓰기가 허용됩니다.
마지막으로 realm = 에는 이 저장소의 인증시 나오는 저장소 이름을 적어줍니다.
(#로 주석처리된 부분은 위와 같이 지워주셔야합니다.)





- SVN을 사용해보자.
이제 저장소에 있는 파일들을 받아, 내가 개발한 파일도 올려보고 다른 사람이 올린 파일도 받아봅시다.

008.jpg

파일을 받을 폴더를 생성합니다.



저는 D 드라이브에 QA_Test 라고 생성했습니다.
해당 폴더에서 마우스 오른쪽 클릭을 하면 SVN Checkout 이라는 탭이 나옵니다. 해당 탭을 눌러보세요.





009.jpg

위와 같이 저장소가 있는 주소, 파일을 받을 폴더 주소를 적어줍니다. 아래 최신 리비전에 체크하면 최근까지 적용된 파일을 모두 받을 수 있습니다.





010.jpg

원본 저장소에 저장된 계정과 비밀번호를 적습니다. 체크박스에 체크를 하면 더 이상 계정과 비밀번호를 묻지 않습니다.





011.jpg

현재는 적용된 파일이 없으므로, revision 은 0으로 나오는군요…




자, 그럼 이제 내가 만든 파일을 올려봅시다.

012.jpg

추가하려는 파일을 넣고, 오른쪽 마우스 클릭을 하면 TortoiseSVN 탭이 나옵니다. 해당 탭을 클릭하면 Add 버튼이 있습니다.





013.jpg

Add 박스가 나오고, 새로운 파일을 추가할 수 있습니다.





추가만 했다고 해서 파일이 적용되지는 않습니다. 추가된 파일을 커밋을 해줘야하는데요.

014.jpg

위와 같이 추가된 파일에 마우스 오른쪽 클릭을 하여 SVN Commit 버튼을 클릭해봅시다.

버튼을 클릭하면 아래와 같이 어떤 파일이 커밋되는지와 그 파일에 관련된 로그를 남길 수 있습니다.





015.jpg

016.jpg

커밋이 정상적으로 완료되면 revision 번호가 하나씩 올라가게 됩니다.
배고프다.txt 파일이 정상적으로 커밋되었음을 확인할 수 있습니다.





지금까지 SVN에 대해 기본적인 사항을 알아봤는데요.
이 외에도 SVN은 무궁무진한 기능을 갖고 있습니다. 다음편에서는 본격적으로 SVN의 기능에 대해서 알아보도록 하겠습니다.