Sunday, April 26, 2009

Perl 스크립트 개발의 개발부 방식과 운영부 방식

제가 "지금" 하고 있는 호스팅 가상화에 대한 API부분을 하고 있습니다.
"지금"이라는 것은, 원래 하는 일은 아니라는 의미입니다.

웹에이전시에서 여러가지 OS와 여러가지 Language로 작업을 해오다 일본 회사로 전직했는데,
최근 불경기 영향으로 회사에서는 파견사원들을 쓰지 않고, 필요한 Skill을 가지고 있는 사원들을 그때 그때 팀을 재편성해서(소속은 그대로이고, 업무지원형식으로) 작업을 하는 방식으로 진행중입니다.
이러다 보니, 깊이는 옅어지고, 손을 대본 것은 많고 하는 상황이 되어 어떤것이 나의 Speciality인지 잘 모르게 되어버렸습니다.

그중에서 어떤 일을 담당하고 있느냐면,
이 회사의 호스팅부는 Viruozzo라는 가상화 소스프웨어를 이용해 OS를 가상화해 호스팅합니다.
한대의 서버에 약 100대정도의 OS의 가상화가 가능하다는군요. 쉽게 말씀드리면 한대의 서버에 100개의 VMware나 VirtualPC를 동작시키는 셈입니다.

이중에서 제가 맡은 일은, 가상시스템을 생성해서, 관리하고, 파괴하는 일련의 API를 웹, Zend방식(SOAP방식이 아닌)의 API를 만드는 일입니다.
Request를 받아 DB(MySql)에 기록하고, LDAP에 도메인생성이나, 메일계정생성을 호출하는 perl을 system call하고, 가상서버의 Quota를 제어하고,
가상서버에 메일계정을 만든다던지, Ftp서비스를 세운다던지, 심지어는 phpadmin, wiki, MovableType까지 만드는(실제로는 그런 perl script를 call해서 결과만 돌려줍니다) 그러한 부분을 작업하고 있습니다.

개발 환경으로는, 작업언어는 Perl, 웹인터페이스는 HTML::Template 모듈, MySql의 UDF를 사용합니다.
아. 그리고 Python으로 된 Func라고 하는 Tool을 사용하는 Python 스크립트 작업도 약간 참여합니다.
역시 Perl에서 System Call하는 스크립트죠.

이 일을 하게되어, 2001년도를 마지막으로 손댔던 Perl을 다시 만지게 되었습니다.
그 당시는 CGI.pm사용해서 웹을 작성하는 정도로, 다른 언어에의 동경이 많았는데, 지금 다시 사용하게되어보니, Perl이 굉장히 훌륭하네요. (왜 그때는 미처 몰랐지)
특히 Groovy와 비교해 가며 작업하면 재미있습니다. Groovy OneLiner

Perl을 선택한 것은 제가 아닙니다. 여기는 시스템본부 아래에 운영부와 개발부가 있는데, 저는 개발부 소속입니다. 이 작업은 운영부의 책임으로 제작되는 것이고, 저는 여기에 지원을 나와있는 거죠.
운영부이니 Perl이나 Vi와 같은 유닉스 시스템 작업을 잘 하는 사람들이 많습니다.

그런데 이 운영부의 특징이랄까 개발자의 입장에서 보면, 조금 안타까운 점이 있습니다. 객체지향적인 코드보다는 절차지향적인 방식으로 진행하는 경우가 많고,
파일을 분리하는 것보다 하나로 뭉쳐서 개발하는 방식이라던지 하는 부분이 그렇습니다.
하긴, 예전에 어떤 소스를 보면, 300메가정도되는 펄스크립트 파일을 pperl로 돌리더군요. (vi가 가장 손에 익을 에디터라면 나라도 하나의 파일로, ctags정도를 사용해서 하는 것이 편할 것 같군요.)
또 최근에는 Perl도 SQL::Library를 사용해서 SQL과 Perl을 분리하는 것이 가능한 것 같습니다. 이를 사용하고자 하면, "꼭 사용할 필요가 있느냐"라고 얘기하는 군요.
객체로 나누어 하면, 이해해야하는 범위를 캡슐화 하기 좋고, 단위 테스트에 좋다라는 개발자의 입장과
유지보수시의 Simplicity를 우선하고, cron으로 실행할때라던지와 스크립트언어이기 때문에 퍼포먼스를 먼저 생각하는 admin의 입장이 서로 드러나는 부분인 것 같습니다.

만약 운영부에서 python이나 ruby를 시스템관리 언어로 사용한다면 제 의도가 많이 반영될 지 모르겠습니다만, 아직까지는 시스템 관리 언어로 perl이 압도적입니다.
이러한 의미에서 Perl6가 매우 기대되네요. Perl VM이라니, IL을 사용하는 지는 잘 모르겠습니다만, 사용한다면 ruby나 java를 IL로 컴파일 하는 것도 가능할까요?
재미있을 것 같습니다. :-)

2 comments:

aero's blog said...

재미있는 작업하시는 군요. Perl은 요즘 Moose를 기반으로 한 Modern Perl로 다시 태어나고 있지요 http://blog.timbunce.org/2009/04/27/examples-of-modern-perl/

Unknown said...

아. aero님 찾아주셔서 영광입니다.
가르쳐주신 url, reader에 등록해두고 살펴보겠습니다.
감사합니다.