Subversion 을 이용한 웹개발 환경 구축 및 삽질 몇가지

550 visualizzazioni
Passa al primo messaggio da leggere

yongbin

da leggere,
20 dic 2006, 21:32:3820/12/06
a sysadm...@googlegroups.com
SE스터디와는 약간 off topic이지만 최근 팔자에없는 PHP 웹개발을 하고 있는데
개발규모가 지금까지 혼자 장난삼아 만들었던 페이지들보다는 꽤 규모가 크고
수정이많은데다 혼자가 아니라  디자이너 한명과 작업하고 있어서 애초부터 소스 저장소쪽을 고려하고있었는데
결국은 일정에 치여서 프로젝트가 거의 끝나고 어제 오늘 사이에 저장소 구축을 완료했습니다
일반적인 svn 저장소로 개발서버를 세팅할때 참고하실만한 내용이 될것 같아서 정리해봤습니다
(사실은 삽질한 내용이 조금 있어서)

1. 구조 및 환경

1) /www/project.com/public_html        => 실재 서비스되고있는 실재 project의 apache document root
2) /www/test.project.com/public_html    => 개발이 진행되고 있는 테스트서버 apache document root
3) /home/svn/project            => Subversion 저장소

대략 이런식의 상황이고 개발환경은 개발자(저)와 디자이너가 서버(FreeBSD)에 실재 login계정을 가지고 있고 (같은 그룹)
svn저장소에 접근은 svn+ssh 프로토콜로만 허용한뒤 주로 SSH 터미널로 작업하는 저는 keychain과
svn 명령을 이용해서 작업중이고(vim에 svn plugin은 한참 익히고 있는중입니다) 주로 윈도우즈 환경을 이용하는
디자이너에게는 puttygen을 이용해 서버에 있는 비밀키를 putty포맷으로 변환하고 , putty agent에 등록시킨뒤(passphrase 필수!)
tortoisesvn 에 마찬가지로 svn+ssh 프로토콜로 연결하도록 하고 plink를 경로를 잡아주고 작업환경을 꾸몄습니다
(조금 느리긴하지만 한번 받고나면 그뒤로는 크게 데이터가 오고갈일이 없어서...) 여기까지는 일반적인
subversion + svn+ssh 사용하는 방식이기때문에 크게 특이한점은 없습니다

프로세스는 작업자가 소스를 수정해서 commit하면 3) svn 저장소에 내용이 commit 되면 저장소 hooks/post-commit script를 통해
2) test.project.com에 바로 update(svn up) 하도록 설정을 하고 어느정도 변경이 취합되어서 서비스에 반영할 정도가 되면
관리자(저)가 서비스를 내리고 svn 통해 1) 실 서비스 document root를 update하고 테스트 서버와 달라지는 파일 (주로 DB설정) 만 수정해주는
스크립트를 돌리고 다시 서비스를 시작하는 방식입니다.

2. 삽질 (1) - hooks/post-commit 삽질

이 삽질은 전에도 몇번 한적이 있는데 subversion에서는 저장소에 어떤 이벤트가 생기는 포인트마다 특정 스크립트를 돌릴수 있도록 hook라는 놈이 있는데
저장소 아래에 hooks라는 디렉토리를보면 템플릿파일들이 있고  그 파일들을 이용해서 저장소에 특정 시점마다 이벤트를 줄수 있습니다
post-commit,post-lock,post-unlockstart-commit 등 시점-엑션 으로 세분화 되어있고 (주로 쓰는건 post-commit이고 저도 사용해본 시점은
post-commit밖에 없습니다) 주로 많이 하는 설정들이 post-commit 쪽으로 이메일통지(저장소에 변경발생시 diff내용을 개발자 그룹메일로 전송)
이나, RSS Feed제공(마찬가지로 개발변경사항을 RSS피드로 제공 등이 있습니다  (http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/)

이런 설정을 할때 가장 중요한점은!! 템플릿 파일에도 친절하게 설명이 되어있지만 svn 이 해당 스크립트를 실행할때 export되어있는 환경변수를
전부 날리기때문에 전혀 생각지 못한곳에서 문제가 발생할수 있다는 점입니다 저도 PATH환경정보가 날아간다는걸 알고 있었기 때문에

/usr/local/bin/svn update /www/test.project.com/public_html/

이렇게 설정을 해줬는데 계속 커밋이 안되는 악몽(지난번에 메일통지기능을 사용할때도 한시간이상 해맸는데;; ) 이 다시 시작.. 결국 한참을 찾다가 KLDP에 어느분의 글을 보고 찾아간 링크( http://subversion.tigris.org/faq.html#hook-debugging) 에서 답을 찾았습니다.  

env - ./post-commit ( env에 - 옵션을 주면 환경설정을 다 날리고 실행을 하더군요 -0- )

해본결과 전혀 엉뚱하게 로케일관련해서 소스와 주석에 들어간 한글을 svn 이 처리못해서 에러가 나서 update를 못하고 있었습니다. 결국 아래와같이 로케일
설정을넣어주고 저장한뒤 잘 되고 있습니다.

export LANG='ko_KR.eucKR'
export LC_CTYPE='ko_KR.eucKR'
export LC_ALL='ko_KR.eucKR'

/usr/local/bin/svn update /www/test.precombat.com/public_html/

3. 삽질 (2) - 공통저장소 update 삽질

이제 commit 하면 바로 테스트 서버로 update도 되고 모든게 잘 돌아간다고 생각하고 있을때 또한가지 문제가 생겼습니다.
디자이너가 이미지파일을 수정하고 tortoisesvn 으로 update를 했는데 테스트서버에 반영이 안되는것이었습니다. 이번에도 해당 계정으로 로그인해서
post-commit 스크립트를 돌려본결과 webroot 아래에 .svn (svn저장소 관련 설정이 들어가는 파일)에 lock 파일 쓰기권한이 없다는것이었습니다
곰곰히 생각해보니... webroot에 checkout해놓은 소스는 제가 checkout한건데 그 작업사본에 대해서 디자이너 계정으로 제가 update명령을 날리니까
update가 안되는게 당연했습니다. 원인은 찾았는데 해결방법이 없어서 고민하다가 또 결국 KLDP에서 전혀다른 글을 읽다가 힌트를 찾아서 해결했습니다

링크( http://svnbook.red-bean.com/en/1.1/ch06s05.html )

결국 svn 을 umask 설정을 주고 실재 svn binary를 실행하는 script로 대체하고 정상적으로 사용할수 있엇습니다


4. 결론

둘다 사실 별문제 아니기도 하고 아는사람은 다 아는 내용이겠지만 모르면 찾아보고 삽질할수도 있는 내용이기에 한번 주저리 주저리 정리해봤습니다
일단은 의도한대로 잘 돌아가네요~

ps. 이 프로젝트때문에 12월 내내 금토일 회사에서 작업을해서 회사에서 5분거리에서 있었던 지난번 모임도 참석을 못했습니다 ㅠ ㅠ
    ( 다녀오신분들 어떠셨는지 궁금하네요 ! )
    역시 개발은 개발하던사람이 해야한다는 단순한 진리를 뼈져리게 느끼는 씁쓸한 연말입니다 아무튼 다가오는 2007년에도 SE스터디 모든분들 행복하시고
    내년에는 좀더 활발한 SE 스터디가 되었으면 좋겠습니다~

- 참고 링크 -

 * http://www.pyrasis.com/main/Subversion-HOWTO
 * http://svnbook.red-bean.com/
 * http://subversion.tigris.org/faq.html

yongbin

da leggere,
20 dic 2006, 21:41:2820/12/06
a sysadm...@googlegroups.com
<올려놓고 보니 줄바꿈이 엉망이라 불편하실것 할것 같아 정리해서 다시 올립니다 죄송합니다 (_ _) >


SE스터디와는 약간 off topic이지만 최근 팔자에없는 PHP 웹개발을 하고 있는데 개발규모가 지금까지 혼자 장난삼아 만들었던 페이지들보다는 꽤 규모가 크고 수정이많은데다 혼자가 아니라  디자이너 한명과 작업하고 있어서 애초부터 소스 저장소쪽을 고려하고있었는데 결국은 일정에 치여서 프로젝트가 거의 끝나고 어제 오늘 사이에 저장소 구축을 완료했습니다 일반적인 svn 저장소로 개발서버를 세팅할때 참고하실만한 내용이 될것 같아서 정리해봤습니다 (사실은 삽질한 내용이 조금 있어서)

1. 구조 및 환경

1) /www/project.com/public_html        => 실재 서비스되고있는 실재 project의 apache document root
2) /www/test.project.com/public
_html    => 개발이 진행되고 있는 테스트서버 apache document root
3) /home/svn/project            => Subversion 저장소

대략 이런식의 상황이고 개발환경은 개발자(저)와 디자이너가 서버(FreeBSD)에 실재 login계정을 가지고 있고 (같은 그룹) svn저장소에 접근은 svn+ssh 프로토콜로만 허용한뒤 주로 SSH 터미널로 작업하는 저는 keychain과 svn 명령을 이용해서 작업중이고(vim에 svn plugin은 한참 익히고 있는중입니다) 주로 윈도우즈 환경을 이용하는 디자이너에게는 puttygen을 이용해 서버에 있는 비밀키를 putty포맷으로 변환하고 , putty agent에 등록시킨뒤(passphrase 필수!) tortoisesvn 에 마찬가지로 svn+ssh 프로토콜로 연결하도록 하고 plink를 경로를 잡아주고 작업환경을 꾸몄습니다 (조금 느리긴하지만 한번 받고나면 그뒤로는 크게 데이터가 오고갈일이 없어서...) 여기까지는 일반적인 subversion + svn+ssh 사용하는 방식이기때문에 크게 특이한점은 없습니다

프로세스는 작업자가 소스를 수정해서 commit하면 3) svn 저장소에 내용이 commit 되면 저장소 hooks/post-commit script를 통해 2) test.project.com에 바로 update(svn up) 하도록 설정을 하고 어느정도 변경이 취합되어서 서비스에 반영할 정도가 되면 관리자(저)가 서비스를 내리고 svn 통해 1) 실 서비스 document root를 update하고 테스트 서버와 달라지는 파일 (주로 DB설정) 만 수정해주는 스크립트를 돌리고 다시 서비스를 시작하는 방식입니다.

2. 삽질 (1) - hooks/post-commit 삽질

이 삽질은 전에도 몇번 한적이 있는데 subversion에서는 저장소에 어떤 이벤트가 생기는 포인트마다 특정 스크립트를 돌릴수 있도록 hook라는 놈이 있는데 저장소 아래에 hooks라는 디렉토리를보면 템플릿파일들이 있고  그 파일들을 이용해서 저장소에 특정 시점마다 이벤트를 줄수 있습니다 post-commit,post-lock,post-unlockstart-commit 등 시점-엑션 으로 세분화 되어있고 (주로 쓰는건 post-commit이고 저도 사용해본 시점은 post-commit밖에 없습니다) 주로 많이 하는 설정들이 post-commit 쪽으로 이메일통지(저장소에 변경발생시 diff내용을 개발자 그룹메일로 전송) 이나, RSS Feed제공(마찬가지로 개발변경사항을 RSS피드로 제공 등이 있습니다  ( http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/)

이 런 설정을 할때 가장 중요한점은!! 템플릿 파일에도 친절하게 설명이 되어있지만 svn 이 해당 스크립트를 실행할때 export되어있는 환경변수를 전부 날리기때문에 전혀 생각지 못한곳에서 문제가 발생할수 있다는 점입니다 저도 PATH환경정보가 날아간다는걸 알고 있었기 때문에

/usr/local/bin/svn update /www/test.project.com/public_html/

이렇게 설정을 해줬는데 계속 커밋이 안되는 악몽(지난번에 메일통지기능을 사용할때도 한시간이상 해맸는데;; ) 이 다시 시작.. 결국 한참을 찾다가 KLDP에 어느분의 글을 보고 찾아간 링크( http://subversion.tigris.org/faq.html#hook-debugging) 에서 답을 찾았습니다.  

env - ./post-commit ( env에 - 옵션을 주면 환경설정을 다 날리고 실행을 하더군요 -0- )

해본결과 전혀 엉뚱하게 로케일관련해서 소스와 주석에 들어간 한글을 svn 이 처리못해서 에러가 나서 update를 못하고 있었습니다. 결국 아래와같이 로케일
설정을넣어주고 저장한뒤 잘 되고 있습니다.

export LANG='ko_KR.eucKR'
export LC_CTYPE='ko_KR.eucKR'
export LC_ALL='ko_KR.eucKR'

/usr/local/bin/svn update /www/test.precombat.com/public_html/

3. 삽질 (2) - 공통저장소 update 삽질

이제 commit 하면 바로 테스트 서버로 update도 되고 모든게 잘 돌아간다고 생각하고 있을때 또한가지 문제가 생겼습니다.  디자이너가 이미지파일을 수정하고 tortoisesvn 으로 update를 했는데 테스트서버에 반영이 안되는것이었습니다. 이번에도 해당 계정으로 로그인해서 post-commit 스크립트를 돌려본결과 webroot 아래에 .svn (svn저장소 관련 설정이 들어가는 파일)에 lock 파일 쓰기권한이 없다는것이었습니다 곰곰히 생각해보니... webroot에 checkout해놓은 소스는 제가 checkout한건데 그 작업사본에 대해서 디자이너 계정으로 제가 update명령을 날리니까 update가 안되는게 당연했습니다. 원인은 찾았는데 해결방법이 없어서 고민하다가 또 결국 KLDP에서 전혀다른 글을 읽다가 힌트를 찾아서 해결했습니다

링크( http://svnbook.red-bean.com/en/1.1/ch06s05.html )

결국 svn 을 umask 설정을 주고 실재 svn binary를 실행하는 script로 대체하고 정상적으로 사용할수 있엇습니다


4. 결론

둘다 사실 별문제 아니기도 하고 아는사람은 다 아는 내용이겠지만 모르면 찾아보고 삽질할수도 있는 내용이기에 한번 주저리 주저리 정리해봤습니다 일단은 의도한대로 잘 돌아가네요~

ps. 이 프로젝트때문에 12월 내내 금토일 회사에서 작업을해서 회사에서 5분거리에서 있었던 지난번 모임도 참석을 못했습니다 ㅠ ㅠ ( 다녀오신분들 어떠셨는지 궁금하네요 ! ) 역시 개발은 개발하던사람이 해야한다는 단순한 진리를 뼈져리게 느끼는 씁쓸한 연말입니다 아무튼 다가오는 2007년에도 SE스터디 모든분들 행복하시고 내년에는 좀더 활발한 SE 스터디가 되었으면 좋겠습니다~

- 참고 링크 -

 * http://www.pyrasis.com/main/Subversion-HOWTO
 * http://svnbook.red-bean.com/
 * http://subversion.tigris.org/faq.html


2006/12/21, yongbin <super...@gmail.com>:
Rispondi a tutti
Rispondi all'autore
Inoltra
0 nuovi messaggi