블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2011.07.25 22:02

[ Perl/TRunner ] Selenium Core + Plack -> Smolder

TRunner
View more presentations from Jeen Lee

2011/07/15 - [IT/Perl] - [ Perl/Smolder ] Web-based Continuous Integration Smoke Server

 지난번 Smolder 에 이어서 회사 사내 세미나에서 발표했던 TRunner 입니다.
 TRunner 는 뭐 특별한 게 아니라 이미 기존에 있던 모든 것들을 뭉뚱그려놓은 것입니다.

 기본적으로 Dancer 상에서 Selenium Core 에서 사용하는 기본적인 js 스태틱 파일들을 올려놓은 상태에서, Selenium Core 의 테스트 결과를 Smolder 로 날릴 수 있게끔 하는 것입니다.

  이때 Smolder 는 TAP 형식만을 받으니, Selenium Core 의 테스트 결과를 이래저래 슥샥슥샥 만지작거릴 필요도 있기도 하죠. :-)

  Selenium Core 의 정적인 기능을 동적인 페이지 위에 올리고, 필요한 부분에는 selenium-core.js 를 직접 만지며 수정도 하구요.

  Selenium IDE 에서 뽑아내는 Test Suite/Case 세트를 TRunner 용으로 YAML 로 바꿔서 읽어들이게끔 하구요.

  기본적인 아이디어는 용사장(a.k.a @y0ngbin) 으로부터 얻어서 구현하고... 기본기능 구현 뒤 미비한 점은 @aanoaa , @y0ngbin  두 분이 추가로 조정해주셨습니다.

  하고자 하는 것은 간단하게 Plack::Builder 를 통해서 어떤 Plack 기반의 웹어플이면 쉽게 Selenium Core 와 이 결과를 전송해서 Smolder 로 꾸준히 관리할 수 있게끔하는 그런 것이죠.

 
  보통 서버 프로그램들의 지속적인 유닛테스트처럼 브라우저단의 UI 나 기타 js 움직임등에 대해서도 지속적으로 체크해서 관리하자라는 게 모토입니다.

  각 브라우저/ OS 는 Selenium Core 의 결과 전송시의 Request Header 의 UserAgent 를 통해서 확인할 수 있으니, 이걸 Smolder 의 Platform / Architecture 로 대입시켜보는 것입니다.

  순수한 Silex Product 라서 다른 곳에서 쉽게 사용했으면 좋겠는데(Perl 쓰는...)... 
신고
IT/Perl 2011.05.26 23:25

[ Perl / CocProxy ] 소심한 웹개발자/디자이너들에게 내미는 착한 손길?

  사실 CocProxy 는 2008년쯤에 Ruby계열에서 Buzz였었습니다.

  CocProxy 는 브라우저 프록시를 통해서 공개된 특정 페이지의 css/image/js 등을 로컬파일로 대체할 수 있습니다.

 
  위의 그림처럼 다음의 메인화면의 로고가 네이버 로고로 되어있죠.
  이것은 네이버로고를 로컬에 다운받아서 다음의 로고파일의 URL 의 파일이름으로 변환하고, CocProxy 의 루트디렉토리에 위치시킵니다. 그리고 브라우저의 프록시를 localhost 의 CocProxy 포트로 맞춰주는 것으로 위의 결과를 얻을 수 있게 되는 것입니다.

  간단한 설명을 위해서 위와 같은 짓을 저질렀지만, CocProxy는 css, js, html 등도 대체가 가능하기 때문에...

  1. 고객의 웹페이지를 띄워줬습니다.
  2. 고객이 특정 부분이 이상하다고 막 뭐라고 그럽니다.
  3. 디자이너에게 작업의뢰를 합니다.
  4. 디자이너가 고쳤다고 html, css, js, image 세트로 막 넘깁니다.
  5. css 를 보니까 경로설정이 아주 지맘대로이거나, 브라우저 체크도 엉망입니다.
  6. 공개전에 일일이 경로를 바꿔주고 약간 손질을 합니다.
  7. diff 를 확인하며 OK 라면 그대로 올려버립니다.
  8. 인간은 실수를 하지만, 고객담당은 그저 빨리 일 끝냈다고 좋아라 한다고 고객에게 전화해서 다 했어요 합니다.
  9. 근데 고객이 봤는데 뭐가 이상하답니다.
  10. 디자이너한테 넘겼는데, 자기가 준 건 문제가 없다고 막 우깁니다.
  11. 뭐지 뭐지 하면서 망설이는데, 방금 경로를 바꿔줄 때 뭔가 문제가 생긴 것을 끙끙거리다가 알게됩니다.
  12. 아무튼 그렇게해서 수정하고 올리고 한고비 넘깁니다.

 이 경우 디자이너의 브라우저 프록시를 CocProxy 로 넘겨주고 손댈 부분을 바로 공개된 상태로 확인할 수 있지않을까요? 뭐 아무튼 극단적인 예이지만... 물론 CocProxy 가 사용될 만한 장면은 이외에도 여러가지가 있겠죠.

  Plack::App::CocProxy 를 설치함으로 cocproxy 라는 커맨드를 사용할 수 있게됩니다. 기본적으로 그 커맨드를 사용한 디렉토리가 CocProxy 루트가 됩니다. 

  - Plack::App::CocProxy
 
  Perl 뿐만 아니라 이미 Ruby 버젼도 있구요, Nginx 구현도 최근에 이야기가 나오는 걸로보니 나온 걸로 보입니다.
 
  생각해보니 CocProxy 뿐만 아니라, dotjs 같은 것도 javascript 애호가 분들에게 어필할 수 있을 지 모르겠군요.

  - http://defunkt.io/dotjs/

신고
이 장소를 Daum지도에서 확인해보세요.
서울특별시 강동구 천호제2동 | 서울 강동구 천호동 442-34 (올림픽로 667)
도움말 Daum 지도
IT/Perl 2010.01.04 13:06

[ Perl ] Catalyst + Plack + Apache

  최근에야 듣보 Web App Framework 에서 Catalyst 로 완전히 옮기게 되었습니다. 개발속도는 안 써봐서 그런지, 좀 느린 감은 있었지만, 기존에 해오던 대로 쓰니까 크게 차이는 없어서 무난히 개발을 할 수 있었습니다. 
  예전에는 FastCGI 띄우고, Apache 에서 mod_fastcgi  붙여서 서버 띄우곤 했는데, 최근에 Server::Starter 가 Plack 에 붙어줘서(Plack::Server::Standalone::Prefork::Server::Starter) mod_proxy 를 써서 Apache 에 접붙이기를 하고 있습니다. 

 왜 Server::Starter 냐? 
  기존의 웹 어플에서는 코드 수정이 이뤄질때마다 서버를 다시 띄워야 되며, 이때의 작은 downtime 이 발생하게 되지만, Server::Starter 를 사용하면  downtime 없이 웹 어플의 재기동이 가능하게 된다는 것입니다. 

  대충 이런 형식입니다. 

  |Apache|  -----  |Plack(::Server::Standalone::Prefork::Server::Starter)| --- |Catalyst|

  우선 사전준비로써,
  Apache 가 있고, mod_proxy 를 사용가능하며, 

  CPAN 모듈로는 
  PSGI 
  Plack 
  Server::Starter 
  Plack::Server::Standalone::Prefork::Server::Starter 
  등이 필요합니다. 
   그리고 물론 WebApp 도 있어야 되겠죠? 여기에서는 Catalyst 를 사용합니다.  Catalyst에서 Plack 엔진을 사용하려면 Catalyst::Engine::PSGI 가 있어야 합니다. 
 
  모든 준비가 끝났다면 우선 Plack 용 .psgi 스크립트를 작성합니다.
 * app.psgi
use Plack::Builder;
use Zzoo::Web;
Zzoo::Web->setup_engine('PSGI');
my $app = sub { Zzoo::Web->new->run(@_) };
builder { 
   enable "Auth::Basic", authenticator => sub {
      my ($user, $pass) = @_;
      return $user eq 'pass' && $pass eq 'word';
   };
   $app;
};
  Auth::Basic 은 접속시 기본인증을 거치게 해줍니다. 

  Plack::Builder 를 통해서 여러가지 MiddleWare 를 사용할 수 있는데, Auth::Basic 이 그 대표적인 예 중 하나입니다. 
  이런 Middleware 는 Plack::Middleware::* 라는 네임스페이스를 가지며 이외에도 다양하고 유용한 미들웨어들이 존재합니다. 

  Apache 설정은 아래와 같습니다. 
 /etc/apache2/site-available/blahblah.blah.blah
<VirtualHost *:80>
   ServerAdmin  who@am.i
   ServerName    your.server.com
   <Location />
      Order allow, deny
      Allow from all
      ProxyPass http://localhost:5000/
   </Location>
</VirtualHost>

  Server::Stater 스크립트를 통해서 Plack을 기동합니다.
  
$ start_server --port=5000 -- plackup -s Standalone::Prefork::Server::Starter --max-workers 3 -a app.psgi  

  그리고는 해당 서버에 접속해서 동작을 확인합니다.  
  --max-workers 옵션으로 서버 기동시의 Prefork 되는 워커(프로세스)의 갯수를 지정할 수 있습니다.
  -s 옵션으로 Plack Server 를 지정합니다. Plack::Server::* 의 네임스페이스를 가지는 모듈이 이에 해당합니다. 
  -a 옵션으로 psgi 스크립트를 지정합니다. 
  그외 여러가지 옵션이 있지만 여기에서는 생략하겠습니다. 

  이렇게 기동한 프로세스는 
$ killall -HUP start_server
  을 통해서 앞에서 말한 downtime 이 없는 서버재기동이 가능하게 됩니다. 

  여러모로 설명을 생략해버렸지만, Plack 에 대해서는 차후에 천천히 처음부터 차근차근 소개해볼까 합니다.

  참고자료
신고

'IT > Perl' 카테고리의 다른 글

[ Perl ] Twitter Steam + IRC = Twit2IRC  (2) 2010.01.04
[ Perl ] Catalyst + Plack + Apache  (0) 2010.01.04
[ Perl ] Cafe Crawler  (0) 2010.01.03
Rakudo Perl 6 development release #24 ("Seoul")  (1) 2009.12.18
TOTAL 473,370 TODAY 187

티스토리 툴바