RoR vs. GaG

파이선으로 시작한 한동안의 방황은 결국 다시 자바로 돌아왔다.

자바서버쪽에 Spring, Hibernate 따위 복잡한 도구들이 있는데, 아무리 잘 써볼라고 해도, XML 로 귀찮게 하거나, SQL 대신 HQL 을 들이밀거나 해서 안쓰고 있었다.

Groovy and Grails 는 이런 복잡한 녀석들을 Groovy 라는 언어를 이용해서 간단하게 뛰어넘고 있다. Groovy는 상당히 유연한 언어인데, Groovy 가 없었다면, 당연히 Grails 도 없었을 것 같다.

국내에서는 Groovy 관련한 리소스가 별로없는데, 사실 세계적으로도 별로 없다. 다만, 자바기반이니까, 스크립트 언어니까, 이리저리 건드려보면 대강 돌아가게는 할 수 있었다.

파이선으로 간단한 웹용 사진관리기를 CGI로 만들어보고, twisted로 옮기고, 다시 루비 CGI 로 포팅했다가, Ruby on Rails 로 포팅해보았다. Ruby on Rails 는 빠른 시간안에 MVC 가 분리된 아름다운 결과물을 만들어 주었다. 게다가 파이선보다 문법도 깔끔해보였다. (사실 파이선 문법에 익숙해졌다가 루비문법을 보고있으면 쓸데없는 타이핑이 있다, 라는 생각도 든다. 어쨌든)

별 문제만 없었다면, 나도 RoR 의 광팬이 될 상황이었는데, 썸네일 생성좀 부드럽게 하라고 격려하는 뜻으로 쓰레드를 생성해 주었더니 글쎄… 서버가 죽어버렸다.

지금 보면 코드자체에 문제가 있는게 보이지만 (쓰레드를 꽤 많이 만들었다), 그래도, webrick 서버가 죽어버리는 걸 보니, 정이 똑 떨어졌다. mongrel_rails 도 역시 동일한 코드를 만나면 죽어버렸다.

스크립트인 주제에 코드를 잘못짰다고 서버가 죽어버린다면, 모험심을 발휘하는 의미가 없잖아. 젠장.

하지만, 한번 맛본 RoR 의 구성을 잊기 힘들었다. 찾으라 그러면 찾아진다.

자바상에 여러가지 스크립트 언어들 (Jython, JRuby, 등등등) 이 구현되어있는 것은 전부터 관심있게 보고 있었다. 그리고, 자바의 바이트코드를 충실히 지원하기로 하고 있는 Groovy 라는 언어에 대해서도 약간 들어봤었다.

그리고, 결국은 루비 온 레일즈의 자바버전 짝퉁. Groovy and Grails 를 찾아냈다. (종교전쟁이 벌어지고 있는 게시판들을 한참이나 들여다본 끝에 찾았다. 휴…)

이 녀석의 내부에는 한번씩 써볼까 했다가 포기한 Hibernate, Spring 등등등등 이 들어있고, 그녀석이 지져지든 볶아지든 나랑은 상관없도록 잘 감싸주고 있었다.

RoR을 테스트할 때처럼 간편하고, 잘 짜여져있다는 느낌을 받았다. 다만, 그 기반이 JVM 이라는 점만 틀리다. 그러니까, 참으로, 마음에 드는 구성이 아닐 수 없었다. 흐…

하지만,

Groovy 는 아직 1.0 파이널이 나오지 않았고, Grails 는 무려.. 0.3.1 이 안정버전이란다. 이걸 뭘 믿고 쓴단말인가. 자바플랫폼 자체는 이미 안정화된 녀석이니까, 그 위에서 뭘돌리든 서버가 죽는 사태는 없겠지, 안심해보지만, 그래도, 레퍼런스로 삼을 녀석이 없다는 것은 큰 단점이었다. 사실 이 부분 때문에 거의 포기할 뻔 했는데. (그래서… 다시 서블릿?)

더 뒤져보니 프로젝트 리더들이 쓴 가이드북이 출판준비중이고, 이거 미리볼수 있도록 ebook 으로 살 수 있었다. 법인카드를 가져다 Groovy 한권, Grails 도 한권 질렀다.

그리고, 현재까지 한 일주일 테스트했다. 결과는 대 만족. 앞으로 웹서비스 관련해서 Groovy and Grails 책이 열권쯤은 나올것 갈다. 이게 진짜 … 웹개발자들의 성배(Grail)가 아닐까?

grails : http://grails.codehaus.org/

groovy : http://groovy.codehaus.org/

P.S. “루비가 대부분의 사이트에 사용하기에는 부족함이 없이 충분히 빠르다.” 라고 말하는 사람들의 심리가 이해가는 면도 있지만, 나는 테스트코드를 돌리는 내내.. 고민했다.

이게… 충분히 빠르다는 거야?

P.S.처음에는 파이선 이미지처리에 메모리릭이 있는 것 같았다. 그 다음에는 자바의 ImageIO 에 메모리릭이 있다는 리포트를 보고 기겁했다. 하지만, 어이없게도, sysctl 의 vm.swappiness = 62 로 문제는 해결되었다. 파이선은 그렇게 허술한 언어가 아니었다. 자바의 버그퇴치 능력도 그렇고.. 리눅스만 여전히 어렵다.

P.S. 파이선코드를 루비로 포팅하는건 30분정도 걸렸다. 약간의 시간은 콜론 “:” 때문이었고, 대부분의 시간은 “elsif” 때문이었다. elseif 가 아니었다.

P.S. 쪽팔리지만, 문제의 루비코드는…

threads << Thread.new(file) { |file|
    img = MiniMagick::Image.from_file('/home/xxx/'+@params["board"]+"/"+file)
    img.resize "126"
    img.write('/home/xxx/'+@params["board"]+"/T_"+file)
}

P.S. 국내에서 Groovy 를 쓴곳은 네오위즈밖에 없다. 어디 더 있을까나? 국내 최초 Grails 라고하고 싶지만, 확신하기가 힘드네..

그건 그렇고, Groovy 사이트에는 한글이 꽤 많이 올라와있다. 누굴까. 그 사람은…?

이상.