블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2009.08.24 18:54

[ SVN/Perl/Inotify ] 고객 후렌들리하게 SVN 운용법 - 자동커밋/업데이트

  A 라는 회사는 B 사의 웹서비스를 운영하면서 밥벌이를 하고 있다. 그러니 B 회사는 A 회사에게 "너흰 우리때문에 밥먹고 사는 거잖아" 라며 거만해 한다. A 회사는 꾸벅꾸벅 말도 잘 듣고 있다.

  A 회사의 J 군은 최근에 B 회사의 일을 중간에 떠맡았다.
  B 회사의 서비스는 흔히말하는 MVC 구조로 이래저래 잘도 관리되고 있는 형국이다.
  거기에 소스코드 관리도 SVN 을 쓰면서... 코드또한 별시리 문제가 없이 관리되고 있었다.

  어느날 B 사의 디자이너에게 전화가 와서, SSSS 라는 페이지가 이상하다는 얘기를 듣고 원인 파악에 나섰다. SSSS 페이지에 표시되어야 할 배너가 표시되지 않고 있다는 뭐 그런 얘기였다. "단순한 화면 표시 어쩌고 저쩌고 라면 그냥 니가 하면되잖아" 라고 소리치고 싶은 J군은 템플릿 파일을 훑어봤지만 그딴 거 없었다.
 하지만 B 사의 디자이너는 <이제껏 나왔었다. 갑자기 안나온다! 시스템 문제가 있는 거 아니냐?> -- 대략 이런 러쉬를 걸어오기 시작했다.

  이쯤에서 J군은 B 사의 웹서비스의 치명적인 맹점을 알게되었다.

  1. B 사의 디자이너는 PHP 코드따위 만질 일 없다.
  2. 템플릿이라면 때에따라서 유연하게 바뀌어야 하니, 템플릿 파일은 FTP 로 올린다.
  3. FTP 로 올라온 템플릿 파일은 이전 파일이 뭐든 간에 일단 덮어씌우고 본다.
  4. B 사의 디자이너는 가끔 템플릿 파일에 {php} {/php} 라는 것도 해놓았다.
  5. B 사의 디자이너는 SVN 을 모른다.
  6. B 사의 디자이너는 백업이라는 행위의 중요성을 실감하지 못했다.

  즉, 이제껏 B 사의 디자이너가 작업한 것들은 백업/소스코드 관리 가 이뤄지지 않은 상태였다.
  그러니 로고가 어찌되었는지에 대한 상황파악은 어려운 상태!
  SVN 좀 쓰면 안되겠니? 라고 해도... 그런 거 배울 시간이 없다는 적절한 핑계로 넘어가 주신다.

  그래서 서버에서 디자이너가 FTP 로 파일을 올리면, 그대로 커밋 => Product 업데이트 를 자동으로 수행해야 한다.

 ________________________

 미션은 대략 위의 상황과 같습니다.
 FTP 로 올라오는 파일의 변경 이력을 실시간으로 파악해서, 그것을 바로 커밋하고, Product 환경에서 자동으로 업데이트 해주는 것입니다.
  서버의 환경은 Linux(CentOS) 이며, 커널 버젼은 2.6 이상입니다.
  리눅스 커널 2.6 부터는 Inotify 라는 것이 생겼습니다. 시스템 상의 특정 파일/디렉토리의 생성/변경을 파악할 수 있는 기능이죠. :-)

  Perl 구현으로는 Linux::Inotify 가 있습니다. 그리고 이것을 래핑한 File::ChangeNotify 라는 모듈을 사용하기로 했습니다. (Mooose++)

# svn-auto-commit-update.pl
use strict;
use warnings;
use File::ChangeNotify;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ @ARGV ],
);

while ( my @events = $watcher->wait_for_events() ) {
    my @files;
    for my $event ( @events ) {
        my $path = $event->path;

        # filter 한다면 filter 처리 (.swp 등의 파일은 커밋필요없음. 혹은 디자이너의 파일 백업 스타일(index.html => index.html.090822)를 고려) 
       
        # $event->type 에는 (create/modify/delete/unknown) 이 있으니, 각자 맞는 걸 쓰면 되겠죠?
        if ($event->type eq 'create') {
            system("svn","add", $path);
        }
        # ... delete 라든가의 경우도 삭샥샥
        push @files, $path;
    }
    system("svn","commit",@files,"-m YYMMDD,, fucking designer's templates");
    system("svn", "update", "/path/path2/product/template/");
}

  실행은
perl svn-auto-commit-update.pl [해당 디렉토리]
  로 실행하면 됩니다.

  물론 아직 제대로 안써봤습니다. 그냥 이러면 안될까 해서 그냥 써봤을 뿐입니다;;
  제 맘대로 서비스 정책과 운용룰을 여차저차 할 수 없으니ㅜㅜ
  뭐 권한이 어쩌니, 디렉토리 구성이 어쩌니, 파일 경로가 어쩌니 자질구레한 건 생략합니다.

  Linux Inotify 에 대한 얘기는 좀 오래된 얘기고... 실제로 이것을 어떻게 사용하느냐 하는 건 잘 모르겠지만, 아마 이런 곳에도 사용될 수 있지 않을까 합니다.

  최근 일본의 Fi*** 라는 사진공유 서비스는 디렉토리를 지정해서 거기에 파일을 올리면 자동으로 업로드되는 툴을 만들어 놨습니다. 뭐 위의 코드와는 달리 리눅스 이외의 여러 OS 도 고려한 툴이겠지만요. (Mac 에서 밖에 테스트 안해봤습니다)
   (이것도 Inotify 를 통해서 Flickr 나 Picasa 에 자동으로 올라가도록 해보고 나중에 블로깅을 해볼 수 있다면 해보지요 :-) )

    그리고 rsync 대신에 이렇게 미러링하는 것은 어떠냐? 라는 얘기로 최근에 본 위키페이지도 있습니다.

 - http://trac.mizzy.org/public/wiki/InotifyAndMakuosan

    참고가 되었으면 합니다.
신고
IT/Tips 2008.07.11 09:07

[ 버젼관리 ] SVK - 로컬에서 맘껏 커밋때리기

 올해 초(2008. 2. 22)부터 perldoc 의 번역을 계속 해오고 있습니다.
 구글코드에서 저장소 하나 받아가지고 거기에다가 열심히 커밋을 하고 있구요.
 현재 리비젼이 300번을 돌파하는 기염을 토하고 있습니다(Ownership 가진 제가 이런 말해도 될런지..;;).

 번역은 주로 지하철을 타고 오고가는 출퇴근 시간에 하고 있습니다. 한번 타면 20분 정도 운좋으면 앉아서 열심히 키보드 두드릴 수 있죠. emacs 에서 열심히 두드리고, 회사에서 인터넷 선 꼽자마자 일단은 커밋을 하고는 합니다.

 여기서 제가 든 생각이...

  "인터넷 안들어와도 로컬에서 작업하고 커밋할 수는 없을까?"

 그래서 눈을 뜬 것이 SVK 였습니다.
 (사실 집의 서버에 SVK 를 깔려다가 삑사리 맞아서 그냥 놔두고 있고, 사실 항상 인터넷 선이 꼽힌 서버에게 SVK 의 필요성은 그리 없었습니다.)

 Mac 용 SVK 패키지를 제공해주기 때문에 간단하게 인스톨할 수 있었습니다.

 그리고 구글의 저장소를 제 MacBook 에 미러링하고...
 
svk mirror http://perldoc-kr.googlecode.com/perldoc-kr/trunk //mirror/perldoc-kr/trunk
svk sync


 그 미러링한 것을 브랜치만들어서...
svk cp //mirror/perldoc-kr/trunk //mirror/perldoc-kr/branches/local/
svk checkout //mirror/perldoc-kr/branches/local perldoc-kr


 그 브랜치에서 작업하고, 작업한 것은 인터넷이 안들어와도 차곡차곡 커밋되게 된다는 것입니다.
 svk ci blahblah

 대량 커밋도 순식간에 슥삭 끝나곤 하니까 참 좋더군요(어차피 로컬 미러에 대고 하니까요...)

 그렇게 차곡차곡 쌓인 분량을 또 한번에 밀어넣는 재미도 쏠쏠하더군요.
 svk push --verbatim

 거기에 브랜치에서 저장소의 최근 리비젼도 그대로 받아올 수 있으니...
svk pull


 안그래도 올 9월에 한국에 갈텐데... 그때가 아마 회사가 바쁠 시점이라 일을 들고 갈 듯 싶어서...
 집에 인터넷이 끊겼는데 어쩜 좋지... 하는 마당에 이런 수단이 생겨서 기쁩니다(기쁜 일인지 모르겠지만;;).

 SVK 를 만든 C.L.Kao 도 지난 YAPC::Asia 2008 에서 봤었고, 그때 했던
 "Your Freesoft will be running at our company" 라고 했던 약속도 지키게 되는 것이죠.
 (사실은 슬라이드에 대고 했지만..;;)

사용자 삽입 이미지
( 근데 svk 로 커밋했을 때-- 사실은 svk push--는 저렇게 별표가 쳐지는데... 왜 그럴까요?)
신고
TOTAL 483,455 TODAY 106

티스토리 툴바