블로그 이미지
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 2008.05.19 14:02

Ubuntu 8.04(Hardy Heron) 이 도착했습니다 :-)

YAPC::Asia 2008 이틀동안은 회사에 가지 않았는데, 오늘 출근해보니까, Ubuntu 가 도착했더군요 :-)

사용자 삽입 이미지

개봉직전!


ubuntu desktop 이랑 server 두 장을 신청했더랍니다.
폭신폭신한 봉투가 Ubuntu CD를 아주 잘 보호해줬군요.

사용자 삽입 이미지

그림이 바뀌었네요


 대략 이렇습니다 :^)

 YAPC가 끝나고서 회사 돌아와보니, 흠.. 일하기 싫어졌는데, 솔직히 몸이 많이 근질근질하기는 합니다.

일상으로의 귀환~ 열심히 키보드 토닥토닥 거려야 되겠네요.

이쯤에서 반전을 넣으면... :: 전 Ubuntu를 사용하지 않습니다.;; CentOS를 쓰고 있거든요.

나중에 쓰겠죠 뭐.;
신고
IT/Tips 2008.03.27 22:19

터미널 2.0 혹은 Partty! 혹은 ttyrec

사용자 삽입 이미지

이제는 터미널도 공유하자꾸나...


Web 2.0의 광풍이 해외를 몰아치고 있는 요즘에 노짱은 민주주의 2.0을 외치고...

일본은 터미널 2.0을 외치고(쿨럭 이건 제가 맘대로) 있습니다.

공유 / 개방 이라는 기치하에 FTA 요즘은 터미널도 공유하는 시대가 온 것이죠.

백문이 불여일견... 일단 왜 대단하다고 느끼는 지 한번 붙여보겠습니다.


 이정도면 좀 짱일까요?

 http://www.partty.org/


Mac, Linux, Windows 전부 지원하고 있으니.. 관심있으신 분들은 한번 해보시는 것도 좋을 듯 합니다.

자기가 하고 있는 Geek하거나... 좀 특별한 작업이나... 교육용 자료나...

뭐든지 일단 만들고 공유하는 정신... 역시 좋습니다.. >_<b

이런 비슷한 것이라고 해야할까요?

예전에 ttyrec 라고...
터미널을 녹화(?)하는 툴도 있었고, 이를 바탕으로 해서 웹서비스도 나온 것으로 알고 있습니다. 웹서비스 링크는 못찾겠네요..

사용자 삽입 이미지

ttyrec : 터미널을 녹화 재생하는 툴


 ttyrec 부터 처음 exit 까지가 녹화된 것이고

 ttyplay ttyrecord 이후로는 녹화된 것을 재생하는 것입니다.
 
 이걸 어따쓰냐고 하신다면 그냥 웃지요. 뭐... 리눅스를 공부하는 입문자나...

 HOW-TO 같은 Tip을 제공하실때 tty 로 녹화를 샥샥하면... 저같은 뉴비에게는 도움이 되겠죠?
 
 뭐 예를 들면 "아파치 섭 올리기", "MySQL 설정" 같은 걸 tty로 예를 보여주면 보는 쪽에서도

 이해가 빠를 것이라고 생각합니다. (제 착각이려나요..)

 Perl 모듈로도 있네요... Term::Ttyrec 과연.. Mr. Miyagawa!

 쓰기에는 귀차니즘을 느끼겠지만... 어떤 Tip을 저런 식으로 제공 받는 다는 것은 기쁜 일이죠.

  아무튼 공유 / 개방... FTA 빼고는 만세입니다!
신고
TOTAL 462,432 TODAY 22

티스토리 툴바