최근에 맥북을 구매해서 아이폰 개발 작업을 하고 있는데 맥에서 Subversion을 사용하는 환경이 그리 좋지 않다는 것을 알게 되었습니다. 그래서 맥에서 Subversion을 제대로 활용하기 위한 글을 적어보려고 합니다.
Subversion 자체에 대해서는 블로그의 다른 글들을 보시기 바랍니다.
일단 Xcode에는 기본적인 Subversion연동 기능이 포함되어 있습니다. 그런데 막상 써보면 기존에 TortoiseSVN의 뛰어난 기능과 성능에 익숙한 사람들은 불만스럽기 짝이 없습니다. 그래서 맥에서 Subversion을 쓰기 위한 방법을 비교해보도록 하겠습니다.
- Xcode 기본 기능
- 유/무료 맥용 SVN Client 사용 - Syncro, Diffly
- 터미널
- 가상머신 + TortoiseSVN
Subversion 서버는 이미 구축되어 있다고 가정합니다. Subversion서버가 아직 구축되지 않았다면 제
책을 참조하여 Subversion을 구축하시기 바랍니다. 또는
Google Code를 이용하는 방법도 있습니다. Google Code를 이용하면 소스코드가 공개가 되니 소스코드를 공개해도 되는 경우라면 Google Code를 이용하면 편리할 것입니다.
사실 Xcode의 기본 Subversion연동 기능은 그렇게 편리하지 않습니다. 그래도 사용법에 대해서 잠시 알아보죠.
우선 Xcode의 Preferences의 SCM항목에서 이미 구축된 Repository를 등록해야 합니다. 그래야 Xcode에서 해당 Repository와 Xcode 프로젝트를 연결 할 수 있습니다.
그리고 Xcode>SCM>Repositories에서 해당 Repository의 디렉터리를 만들어야 합니다.
위 그림과 같이 branches, tags, trunk로 나누면 됩니다. 디렉터리를 어떻게 나누냐 하는 이슈는 전략이 필요한 항목이므로 신중하게 판단해야 합니다.
소스코드를 서버에 등록하기 전에 먼저 설정할 것이 있습니다. Subversion에 등록되면 안되는 파일을 설정해야 합니다. ~/.subversion/config파일을 열면 global-ignores 항목이 있습니다. 여기에 등록되면 안되는 파일의 패턴을 적어주면 됩니다. 저는 일단 build 디렉터리만 등록되지 않도록 했습니다. 그외에도 빌드시 생기는 임시 파일들이 있거나 하면 그 패턴을 등록해서 Subversion에 등록되지 않도록 해야 합니다.
그리고 Import 메뉴를 이용해서 Mac에 저장되어 있는 소스코드를 모두 Subversion 서버에 등록합니다.
이제 서버의 소스코드를 내려 받아야 하는데, 기존에 소스코드가 있던 디렉터리에는 내려 받을 수 없으니 소스코드의 디렉터리를 임시로 바꿔놓고 Check out을 통해서 소스코드를 내려받습니다. 소스코드를 내려 받았다고 해서 Xcode와 바로 연결되지는 않습니다. Xcode연동 기능을 사용하지 않을 거라면 여기까지만 하면 되지만 Xcode와 연동해서 사용하려고 하면 Xcode Project와 Subversion repository를 연결해 줘야 합니다.
Xcode에서 Check out하여 내려 받은 프로젝트를 Open하고 Project info를 보면 우상단에 "Configure Roots & SCM..."이 있습니다.
그 버틑을 클릭하면 이미 등록한 리파지토리중에서 본 프로젝트와 연결한 리파지토리를 선택하도록 되어 있습니다. 간단하게 고르면 됩니다.
그리고 Groups & Files에서 마우스 오른쪽 버튼을 눌러서 SCM을 선택하면 SCM과 연동 상태를 확인할 수 있습니다.
이제 Xcode의 SCM 메뉴를 통해서 소스코드를 관리할 수 있게 됩니다.
기본적으로 소스코드를 Check out하고 Commit하고 Tag, brach까지 이 기능을 이용해서 할 수 있도록 되어 있습니다. 하지만 제가 간략하게 본 바로는 Conflict를 해결하고 Merge를 하는 등의 협업이 필요한 작업은 지원이안되는 것 같더군요. 혹시 제가 모르는 방법이 있다면 알려주세요.
그래서 이럴 때는 다른 솔루션들을 추가로 사용해야 하겠더군요.
Syncro, Diffly등 몇몇 유/무료 SVN Client가 있습니다. 하지만 이 부분은 제가 Evaluation을 해보지 않았습니다. 추후 써보게 되면 내용을 보강하도록 하지요.
Command line에서 SVN을 사용할 수 있다면 Windows, Linux, Mac 어느 OS에서든지 동일하게 SVN을 사용할 수 있습니다. SVN의 모든 기능은 Command line에서 사용할 수 있도록 되어 있습니다. 단지 Merge등의 몇몇기능이 GUI환경에서 더 편한 것 뿐입니다. Mac에서도 Command line 명령어를 이용하여 SVN을 사용할 수 있습니다.
마지막으로 제가 최종적으로 선택한 방법은 TortoiseSVN을 이용하는 방법입니다.
Windows에서 TortoiseSVN을 오랫동안 사용한 개발자라면 그 편리함을 잊지 못할 겁니다.
저는 Parallels Desktop에 Windows7을 설치한 다음에 TortoiseSVN을 사용하고 있습니다.
Mac의 모든 디렉터리가 Windows에서 접근 가능하니 Windows에서 사용하는 것과 거의 동일하게 TortoiseSVN을 사용할 수 있습니다. 이렇게 하여 Windows에서 사용하던 Merge tool도 그대로 쓸 수 있게 되었습니다.
Windows에서 TortoiseSVN을 사용할 경우는 Mac에서 SVN을 설정하는 것과 별도로 Windows에서 SVN을 설정해줘야 합니다. C:\Users\{사용자ID}\AppData\Roaming\Subversion\config 파일을 열어서 아까와 같이 global-ignores를 설정하면 됩니다.
저는 기본적인 SVN Commit기능만 쓸때는 Xcode기본 기능을 사용하고 브랜치, 태그, 머지 기능을 사용할 때는 Tortoise SVN을 사용하고 있습니다. 또한 개발자가 여러명이라면 그냥 TortoiseSVN을 사용하는 것도 좋을 것 같습니다.
이상으로 Mac에서 Subversion을 사용하는 방법을 알아봤습니다. Subversion을 제대로 사용하는 방법은 완전히 별개 이슈이니 제 책과 블로그의 다른 글들을 참고하세요.
수정하거나 덧붙일 내용이 있으면 댓글 남겨 주세요.
전규현님 덕분에 개발에있어 다른 시각으로 접근하는 시야를 갖게되었습니다 감사합니다.
svn사용이익숙해지면 Git도 한번 사용해봐야겠네요
오산돌구님 안녕하세요.
그렇게 생각해주시니 고맙습니다. 개발자분들이 좀더 좋은 환경에서 일하게 되는 것이 제 바람입니다.
안녕하세요. rss추가 해놓고 맨날 눈팅 하던중 주옥 같은 글을 발견 하였네요.
감사합니다. ^^
안녕하세요. 이승철님
반갑습니다.
음.. 문득 다른분들은 svn 서버를 어떻게 구성해서 사용하는지가 궁금해지네요
http / https / svn / svn+ssh 이런 여러가지 설정방법이 있다 보니 말이죠 ^^;
안녕하세요. 구차니님
SVN 서버를 구성하는 방법은 간단하기도 하지만, 제대로 하려면 매우 복잡합니다.
1. 말씀하신 것과 같이 Protocol을 정해야 합니다.
2. Repository를 어떻게 나눌 것인지 정해야 합니다.
3. Repository 내의 디렉터리를 어떻게 구축해야 하는지 정해야 합니다.
4. 각 Repository내의 디렉터리에서 권한을 어떻게 부여해야 할지 정해야 합니다.
이 중에서 가장 어려운 것이 2,3번입니다. 특히 3번은 잘못 구축하는 경우가 태반이고, 한번 잘못 구축하면 다시 복구하는 것은 대단히 어렵습니다.
디렉터리의 구조는 빌드 스크립트와 연관이 있어서 다시 고치는데는 대단히 노력과 비용이 듭니다.
디렉터리 구조는 회사마다 다르며 잘못 구축하면 비효율성이 계속되며 비용을 지불해야 합니다.
제대로 디렉터리를 구축하려면 SVN의 사용방법도 제대로 알아야 하고 회사의 미래 개발 전략도 어느정도 이해를 해야 가능합니다.
이중에서 1번인 프로토콜은 꽤 쉬운 편입니다. 왜냐하면 나중에 요구사항이 바뀌면 바꾸기가 쉽기 때문입니다.
SVN은 기본적으로 자체서버에서 svn://을 지원합니다. 그리고 웹서버와 연동해서 http:// https://를 지원합니다.
그리고 ssh에 svn을 얹어서 쓸 수도 있습니다.
웹브라우저로 보기도 원하는지? 철저한 보안을 원하는지? 편리하고 간단하게 쓰고 싶은지? 속도가 매우 중요한지?에 따라서 정하면 됩니다.
저도 개인 피씨에 보관하던 사람이었죠 ㅎㅎ
블로그 글 덕분에 버전 시스템을 알게 되었고, 설치하여 프로젝트에 많은 도움이 되고 있습니다.
하지만, 스포츠에 비유한다면, 이제 겨우 기초 체력을 갖추기 시작한 거라 해야 할까요
진짜 경쟁은 지금부터겠죠
여하튼 앞으로도 좋은 글 많이 부탁 드립니다.
안녕하세요. csj님
맞습니다. 기본적인 시스템을 갖추지 않고 개발을 하는 것은 사냥을 맨몸으로 하는 것과 같습니다. 창이나 활, 총을 갖춰야죠.
이제 무기는 생겼습니다. 무기를 갖추는 것은 시간이 얼마 안걸립니다. 하지만 무기를 잘 쓰는데는 시간이 좀 걸립니다.
또한 사냥을 더 잘하려면 무기를 잘 쓰는 방법 뿐만 아니라 자연을 이해야 하고 동물의 습성등 다른 기술들도 필요하고 팀웍도 필요합니다.
이제 기초를 갖추신 겁니다. 비록 요소기술이 뛰어나다고 해도 소프트웨어 공학에서 다루는 프로세스, 툴, 분석, 리뷰, 설계 등의 실력을 갖추지 않으면 소프트웨어를 개발하기가 점점 어려워 집니다.
앞으로 좋은 정보를 많이 공유하도록 하죠.
전규현님 안녕하세요. 이번주에 git에 대해서 팀내 발표를 하게 되었습니다.
제가 어떻게 하는지에 따라서 팀내 적용을 할지 말지 정하는 상황입니다.
현재 팀내 분위기는 git을 사용하기 위해 배우는 비용과 git 사용함으로써 생기는 이득을 따져서 적용해보자~ 하는분위기입니다.
근데 한가지 문제점은 제가 git이나 svn을 사용하는데 저 혼자만 사용해서 여럿이 사용할때의 이점을 제대로 깨닫지 못한 상태입니다. 그저이론적으로만 알고있죠. . .
사용하면서 어떤 예로 이득을 보는지 알고싶습니다. 아직 처음 단계라 경험이 부족해이런 질문 드린거 죄송합니다;;
오산돌구님 안녕하세요.
제가 쓴 "소프트웨어 개발의 모든 것"의 개정판에 중앙집중식SCM과 분산SCM의 비교가 있으니 참조하시면 좋을 것 같습니다.
특별히 분산 관리의 목적이 아니라면 SVN이 더 관리하기 편합니다.
서로 연동도 되니 필요에 따라서 연동해서 사용하는 방법도 있습니다.