Getting Control with Subversion and Xcode
OSXDEV
Subversion에 대한 지원이 Xcode 2에 내장되는 덕에, Mac OS X의 개발자들은 효율적으로 프로젝트의 버전을 관리하는 파워풀하고 잘 통합된 툴을 가지게 되었다. Subversion에 대해 아직 모른다면, 이제 알아야 할 것이다. 이것은 CVS의 기능을 확장시키기 위해 개발된, 오픈-소스 버전 관리 시스템이며 Mac OS X에서 특히 잘 지원된다. 이 최신버전의 버전 컨트롤 시스템을 사용하면 코딩을 더 효율적이고 효과적으로 할 수 있어, 멋진 어플리케이션에 집중할 수 있게 해준다: 이건 맥 개발자 커뮤니티의 장점이다.
Subversion을 Mac OS X Server 10.4에 전체적으로 설치하려면 Apache 2.0이 필요하고 Mac OS X에서 몇 단계를 또 밟아야 한다. 여기에 나와있는 자세한 설치 과정은 Mac 개발자이 이 훌륭한 도구를 쉽게 사용할 수 있도록 도와준다.
목차 |
[편집] 버전 컨트롤 사용하기
버전 컨트롤 시스템은 프로젝트의 버전들을 유지하고 유기적으로 저장하며 높은 접근성과 공간효율적 환경을 제공한다. 대부분의 시스템에서, 개발자들은 중앙의 코드창고로부터 코드를 받아와서 수정한 후 시스템으로 다시 보내거나, 내용을 변경시킨다. 여러명의 개발자들이 동시에 코드를 변경할 경우, 버전 컨트롤 시스템은 그 버전들을 모두 합쳐서 변경된 모든 부분이 상충되는 부분없이 보존되도록 한다. 그러면 개발자가 직접 충돌하는 부분을 찾아서 시스템에 알려줘야 한다.
[편집] 서브버전의 새 기능
UNIX 시스템의 오픈-소스 버전 컨트롤의 표준은 현재 CVS이지만, Subversion은 CVS가 아직 못하는 기능들을 제공하.고 있는 오픈-소스 버전 컨트롤 시스템이다. 사용가 부담없이 스위칭 할 수 있도록 CVS와 기본 명령어 구조도 동일하다.
1.0버전에서, Subversion은 CVS 가장 최신버전의 기능을 포함하면서, 버전 디렉토리, 이름 바꾸기 그리고 메타데이타와 같은 부가적인 기능들을 제공한다. 버전 1.1은 버전드 심볼릭 링크와 FSFS라고 불리는 새로운 리포지토리 포맷을 지원한다. FSFS는 버클리 데이타베이스(BDB)에 대한 대안으로, 리포지토리에 일반적인 파일로 저장시킴으로서 보다 전통적인 파일 시스템 엑세스를 제공한다. FSFS는 리포지토리에 대한 크로스 플랫폼 접근성, 향상된 안정성, 향상된 보안 그리고 간단한 백업 절차와 같이 BDB에 비해 몇가지 장점을 가지고 있다. FSFS는 1.2버전에서 디폴트 파일시스템으로 선택되어 이는 Subversion의 파일시스템이다. 버전 1.2는 예약체크아웃(파일이 머지되지 않도록 잠그는데 사용되는 기능)과 Web-based Distributed Authoring and Versioning(WebDAV)의 자동-버저닝(auto-versioning)을 완벽히 지원하며, Subversion이 사용자와의 상호작용없이 백그라운드에서 자동으로 실행 허가를 낼 수 있도록 하는 기능이 추가되었다.
[편집] 아파치 2.0 설치하기
이 글에서, 편집과 설정을 위해 서버 사이드에 아파치2.0이 설치되어 있어야 한다는 이야기를 했었다. 디폴트로, Mac OS X Server 10.4는 아파치 1.3 셋업이 함께 포함되어 있다. Subversion 네트웍 리포지터리를 가지기 위해서는 아파치 2.0을 사용해야 한다.
Mac OS X Server v10.4는 아파치 2.0이 /opt/apache2에 미리 인스톨되었지만 설정이 되지 않은 상태로 나온다는 것을 알 수 있을것이다. Subversion과 충돌이 발생할 가능성이 있으므로, 최신버전의Apache 2.0을 다운로드하고 Mac OS X와 Subversion에 맞게 조금 변경해서 컴파일한다.
| NOTE: 이 글을 쓰는 시점에서, 아파치 2.0의 안정된 최신 버전은 2.0.54버전이다 |
패키지를 컴파일하기 위해서는, 시스템에 gcc가 인스톨 되어있어야 한다. Mac OS X Server DVD에 포함되어있는 Xcode Tools나 ADC Member Site에서 다운로드 받을 수 있다(로그인 필요).
아파치 2.0을 컴파일하기 전에, 정상적인 인스톨을 위해 패치와 환경변수들을 셋업해야 한다. 아파치 2.0을 컴파일할때, BDB지원 여부와 같은 인스톨 모듈을 선택할 수 있다.
| NOTE: 파일시스템으로 BDB를 사용하면, BDB를 인스톨한 후 이 도큐멘트의 configure 명령어에서 볼 수 있는 --without-berkeley-db 구문을 빼야 한다. |
Mac OS X Server v 10.4에 아파치 2.0을 인스톨하기 위해선, 다음 단계를 밟아야 한다.
1. Mac OS X에서 터미널을 열어, tar xvfz httpd-2.0.54.tar.gz 으로 패키지를 푼다.
2. 새로 만들어진 디렉토리로 찾아가, 터미널에서 다음 명령을 실행시킨다.
cd httpd-2.0.54
export ac_cv_func_poll=no
3. apr_socket_send 함수를 이용해 srclib/apr/network_io/unix/sendrecv.c에 다음과 같은 변화를 준다.
- Change
do {
rv = write(sock->socketdes, buf, (*len));
} while (rv == -1 && errno == EINTR);
- To
try_write: do {
rv = write(sock->socketdes, buf, (*len));
} while (rv == -1 && errno == EINTR);
("do {" 바로 앞에 "try_write:"를 더했다)
- 다음의 else 구문을 (다음 다섯줄을 지운다):
else {
do {
rv = write(sock->socketdes, buf, (*len));
} while (rv == -1 && errno == EINTR);
}
다음의 두줄로 대체한다.
else goto try_write;
4. configure를 실행시키고, make를 실행시킨 뒤, sudo make install을 실행해서 아파치 2.0 인스톨을 셋업한다.
./configure --enable-mods-shared=most --enable-ssl \
--with-mpm=worker --without-berkeley-db
make
sudo make install
5. mod_dav.h를 위한 디렉토리를 만들고, 다음 터미널 명령을 이용해 모듈을 복사한다.
cd /usr/local/apache2
mkdir -p modules/dav/main
cp include/mod_dav.h modules/dav/main/
위의 명령어들로 아파치 2.0을 당신의 시스템에 컴파일 할 수 있도록 설정한 후, 배포판을 컴파일하고 인스톨 한다.
| NOTE: configure명령을 실행하기 전에 gcc를 인스톨하지 않았다면, 4번째 단계에서 에러가 발생한다. install 명령을 실행하기 위해서 반드시 sudo를 사용해야 한다. |
[편집] 서브버전 설치하기
아파치 2.0을 인스톨 하고 제대로 셋업하고 나면, Subversion인스톨 단계가 바로 이어진다. 여기에서는 configure 스크립트에서 사용하는 Mac OS X 특정 매개변수를 집중조명한다.
Subversion을 인스톨 하기 위해, 다음 단계를 완성한다.
1. Subversion 소스코드를 다운로드 한다(Mac OS X바이너리가 아니다).
| NOTE: 이글의 시점에서, Subversion의 안정된 최신 버전은 1.2.3버전이다(subversion-1.2.3.tar.gz). |
2. Mac OS X에서 터미널을 열고, 패키지의 압축을 푼다.
tar xvfz subversion-1.2.3.tar.gz
cd subversion-1.2.3
3. 배포판을 편집할 수 있도록 설정하기 위해 다음 명령어를 실행한다.
./configure --prefix=/usr/local \
--mandir=/usr/local/share/man --with-ssl \
--with-apxs=/usr/local/apache2/bin/apxs --with-zlib \
--enable-swig-bindings=no --without-berkeley-db \
--with-apr=/usr/local/apache2 \
--with-apr-util=/usr/local/apache2
| NOTE: configure를 실행하기 전에 gcc를 설치하지 않았다면, 여기에서 에러가 날 것이다. |
4. make 명령을 실행시키고, sudo make install 명령을 실행한다.
make
sudo make install
| NOTE: make install 명령을 실행하기 위해 sudo를 사용해야 한다. |
Subversion의 실행파일들은 Mac OS X Server v10.4의 디폴트 패쓰가 아닌 /usr/local/bin에 설치되어 있다. /usr/local/bin을 사용자의 디폴트 폴더에 더하려면, .profile파일을 홈 디렉토리에 만든다(혹은 .profile파일이 이미 있다면 다음 줄을 더한다):
cd ~ echo 'export PATH="$PATH:/usr/local/bin"' >> .profile
[편집] 서브버전을 위한 아파치 2.0 설정
이미 설치되어 동작중인 아파치 1.3 버전과 충돌하지 않도록 아파치 2.0을 설정해야 한다. 아파치 2.0을 포트 8080에 셋업하고, 시동시 실행하도록 설정해 둬서, Mac OS X Server v10.4를 시동할 때마다 실행되도록 한다.
아파치 2,0을 Subversion용으로 설정하려면, 다음 단계를 밟는다:
1. /usr/local/apache2/conf/httpd.conf을 다음과 같이 변경한다:
- 수신포트를 8080으로 바꾼다:
#Listen 80
Listen 8080
- Subversion의 패스 위치를 더한다 (SVN):
<Location /svn>
DAV svn
SVNPath /Users/tuser/Code/SVN # Adjust for your specific path
</Location>
- Modules 섹션의 마지막에 Subversion 모듈을 더한다:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2. 아파치를 시작하기 위해 다음 명령어를 실행한다:
sudo /usr/local/apache2/bin/apachectl start
3. 재시동때마다 아파치 2.0을 시작하도록 스타트업아이템을 만든다:
sudo -s
mkdir /Library/StartupItems # This directory might already exist
ditto /System/Library/StartupItems/Apache /Library/StartupItems/Apache2
mv /Library/StartupItems/Apache2/Apache /Library/StartupItems/Apache2/Apache2
defaults write /Library/StartupItems/Apache2/StartupParameters Provides -array "Apache2"
perl -p -i -e 's/WEBSERVER/APACHE2/g' /Library/StartupItems/Apache2/Apache2
echo "APACHE2=-YES-" >> /etc/hostconfig
4. 브라우저로 http://localhost:8080/svn을 찾아들어가 Subversion의 리포지토리를 브라우즈한다.
[편집] WebSVN 설치하기
WebSVN는 Subversion 리포지토리에 사용하기 쉬운 웹 기반의 인터페이스를 제공한다.(이 글을 쓰는 시점에서, WebSVN의 안정된 최신 버전은 1.61`버전이다[WebSVN_161.tar.gz].)
중요: WebSVN이 동작하려면 PHP가 아파치 모듈로 설치되어 있어야 한다. 자세한 정보는 ADC도큐멘트 PHP on Mac OS X를 보라.
WebSVN을 설치하려면, 다음 단계를 밟는다:
1. Mac OS X에서 터미널을 열고, 패키지의 압축을 푼다.
2. 다음 명령을 이용해 websvn디렉토리로 파일을 옮긴다.
tar xvfz WebSVN_161.tar.gz
mkdir /usr/local/apache2/htdocs/websvn
mv WebSVN/* /usr/local/apache2/htdocs/websvn/.
3. 브라우저로 http://localhost:8080/websvn/index.php을 찾아들어가 Subversion의 리포지토리를 WebSVN으로 브라우즈한다
[편집] Xcode와 서브버전
Subversion에 대한 지원은 Xcode안에 내장되어 있다(버전 1.5 이후).그러나 Subversion의 리포지터리를 만들어 줘야 하며 Xcode내에서 관리 하기 전에 커맨드 라인으로 프로젝트를 Subversion에 불러들여야 한다. Subversion에 대한 자세한 사용법은 Subversion의 개발자가 추천하는 온라인 문서 *Version Control with Subversion>http://svnbook.red-bean.com/*를 보라.
Xcode가 Subversion의 리포지토리에 대한 인터페이스를 가지도록 하고, Subversion의 사용을 시작하기 위해 몇개의 기본적인 Subversion 명령어가 필요하다. 먼저, 선택한 장소에 새로운 리포지터리를 만든다 (여기서는 홈 디렉토리로 /Users/tuser 을 사용하고 프로젝트 이름으로 HelloWorld를 사용할 것이다):
svnadmin create /Users/tuser/Code/SVN
다음으로, Subversion으로 임포트 하기 위해 다음의 임시 디렉토리들을 만든다:
cd/tmp/tmpsvn mkdir HelloWorld mkdir HelloWorld/trunk mkdir HelloWorld/branches mkdir HelloWorld/tags
새 프로젝트를 만들거나 지금 새로 만든 Subversion 프로젝트의 /trunk 디렉토리에 있는 기존의 Xcode 프로젝트를, 다음 명령어들을 이용해 리포지터리로 불러들인다:
cp -r /Users/tuser/Code/Xcode/HelloWorld /tmp/tmpsvn/HelloWorld/trunk/.
svn import /tmp/tmpsvn/Helloworld file:///Users/tuser/Code/SVN \
--message 'Initial HelloWorld Import'
마지막으로, Subversion의 체크아웃을 위해 사용할 디렉토리로 가서(이것은 프로젝트의 활성 카피본이 될 것이다), 프로젝트를 체크아웃한다. 이제 /tmp에 만든 임시 디렉토리를 제거해도 된다. 다음 명령을 사용한다:
cd /Users/tuser/Code/Projects/
svn checkout file:///Users/tuser/Code/SVN HelloWorld
rm -rf /tmp/tmpsvn
이제 당신의 Xcode 프로젝트를 위해 두개의 장소를 가지게 되었다. SVN 디렉토리는 리포지터리를 가지고.(이 데이타를 임의로 편집하면 안됨.) Projects 디렉토리는 프로젝트의 활성본을 가질 것이다.(이것이 소스코드를 수정할 것이다)
이제 Xcode에게 소프트웨어 컨드롤 매니지먼트(SCM)으로 Subversion을 사용할 것이라고 알릴 때이다. 새로 셋업한 Projects/HelloWorld 디렉토리에 있는 프로젝트를 Xcode에서 연다. 툴바에서 Info버튼을 클릭해 프로젝트 정보 윈도우를 불러온다(그림 1).
그림 1: Xcode 메인 스크린
그림 2에 보이는 프로젝트 정보 윈도우에서, SCM 풀다운메뉴에서 Subversion을 선택하고, Enable SCM 체크박스를 활성화 한다.
그림 2: HelloWorld 프로젝트를 위한 정보윈도우
그림 3에서 보이는 것 처럼, Edit을 눌러 Subversion 툴 경로를 정의한다.
그림 3: Subversion 툴 패쓰를 정의하기
프로젝트 정보 윈도우를 닫고, Add to Repository, Commit, Refresh 그리고 Update같은 명령어를 실행시키기 위해 Xcode 메인 화면에서 SCM메뉴를 찾는다(그림 4).
그림 4: 메뉴에서 SCM 명령어들을 실행시키기
그림 5는 이전 버전의 main.c에 Compare With 명령어를 실행한 예이다. HelloWorld 프로그램에 변경한 부분들을 볼 수 있다.
그림 5: main.c의 버전들을 비교
[편집] 결론
이제 커맨드 라인, 웹 브라우저 그리고 Xcode를 이용해 Subversion을 버전 컨트롤로 사용하면서 Mac OS X Server v10.4에서 코드를 개발할 준비가 되었다. Subversion의 첨단 버전 컨트롤 구조에 엑세스하기 위한 세가지 강력한 옵션들은 Mac OS X 개발자들에게 개발, 편집 그리고 다중 작업자들과의 복잡한 프로젝트 관리를 효율적으로 하기 위한 파워와 유연성을 준다.
[편집] 부가정보
- Subversion에 대한 보다 많은 정보는 Subversion의 홈페이지를 방문한다.
- Apache 2.0 대한 보다 많은 정보는 Apache의 홈페이지를 방문한다.
이 문서의 원본은 ADC Home > Tools> Getting Control with Subversion and Xcode 입니다.
번역 : 2006. 10. 21 LingoStar 전문번역.









