레일스 컨퍼런스에서 돌아온 지 일주일 정도 지났습니다. 팀에 복귀해서 가장 먼저 한 일은 스프링노트의 배포(deployment) 프로세스를 바꾸는 일과 테스트 코드들을 점검하는 것이었습니다. Getting Real Numbers라는 세션에서 Julian Boot가 간단한 모니터링과 테스팅 프레임워크를 만들었던 모습이 떠오릅니다. '현재보다 조금만 더 좋은 것'을 추구하다 보면 언젠가는 원하는 목표에 도달할 수 있다는 것은 이번 컨퍼런스에서 배운 교훈 중 하나입니다. 당연한 이야기지만 막상 실천에 옮기기는 힘든 것이지요. 그래서 잊기 전에 스프링노트의 배포 프로세스를 조금 더 좋게 만들고, 테스트를 조금 더 말끔하게 정리했습니다.

컨퍼런스 마지막 날에 재미있는 일이 있었습니다. Rails Security라는 세션에 들어갔는데, 글쎄 시작 시간 5분이 지나도 발표자가 나타나지 않았습니다. 이 세션은 빈 강의실에 급하게 편성된 것이었는데 사고를 치는군요. 웅성거리고 있는데, 한 사람이 '어제 Open Mic 세션 즐거웠는데, 우리 또 하면 어때요?'라고 소리를 치더군요. 그리고 즉석에서 발표자들이 줄을 서서 이야기를 했습니다. 정말 한 시간 금방 가더군요. 끝나고 나서 웬만한 세션보다 훨씬 좋았다면서 다 같이 박수를 쳤습니다. 색다른 경험이었습니다. 맨 처음에는 Mongrel 개발자 Zed Shaw가 나와서 Utu를 소개했습니다. 그 외에도 8명 정도가 더 발표했는데, 가장 인상적이었던 것은 erlang을 이용해 mongrel 클러스터를 구성한 프로젝트였습니다. 너무 간편하게 mongrel 서버들을 넣고 빼고 하는 모습이 인상적이었습니다. 개발한지 2달 되었다고 하던데, 나중에 공개되면 재미있을 것 같습니다.
The Rails Way
마지막 날 가장 재미있었던 세션은 누가 뭐래도 Jamis Buck과 koz가 진행한 The Rails Way였습니다. 어떻게 하면 레일스 코드를 루비스럽게 잘 작성할까 하는 고민을 함께 나누는 시간이었습니다. 사실 레일스 개발자들은 꽤 오랫동안 루비를 개발한 사람들이고, 레일스 코드는 꽤 쓰여진 루비 예제이기도 합니다. 저는 루비를 배우려면 레일스 코드를 읽으라고 권하기도 합니다. 세션은 두 명이 번갈아 가면서 이럴 때는 이런 이유로 이렇게 하는 것이 좋겠습니다 라고 설명하는 식으로 진행되었습니다.
예를 들면 Skinny Controller Fat Model(컨트롤러에는 최소한의 코드만 두고, 로직은 모델에 둔다)을 추천하면서 이 편이 테스트하기도 쉽고 유지 비용도 적다고 설명했습니다. Association을 조금만 활용해도 코드의 모양이 얼마나 좋아지는지, with_option, returning등 액티브서포트가 제공하는 문법 사탕(Syntactic Sugar)이 가지는 의미 등도 재미있었습니다. 자세한 발표 내용들은 발표자들이 운영하는 블로그에 올라오고 있으니 레일스 개발자라면 꼭 읽어보면 좋겠네요.
제가 생각하는 좋은 루비 코드는 짧고 함축적인 코드가 아니라 읽고 쉽게 이해할 수 있는 코드입니다. 확장이 쉽고, 문법이 유연한 루비의 장점을 살리면 약간의 노력으로 정말 읽기 편한 코드를 만들 수 있습니다. 예를 들어, 오늘이라는 날짜를 시간으로 표현할 때(5월 30일 0시 0분) Time.now.to_date.to_time이라고 쓰는 것보다 Time.now.beginning_of_day라고 쓰는 것을 선호합니다. 기능적으로도 같고, 정말 작은 차이겠지만 이런 사소한 차이들이 모여서 생산성이 되는 것이지요. 이런 생각이 잘 표현된 것이 루비의 테스팅 프레임워크인 RSpec인데 이 프로젝트는 명세서(문서)의 역할을 할 수 있는 코드를 추구합니다.

떠오르는 기대주 JRuby
JRuby는 자바 가상 머신(JVM) 위에서 동작하는 루비입니다. 기존의 C루비(또는 마츠루비)와는 별개로 루비 언어를 새로 구현하는 프로젝트들이 여럿 있는데 그 중 가장 높은 완성도를 보이고 있습니다. 이날 데모에서 기존 루비보다 더 나은 성능으로 레일스 애플리케이션을 돌리는 모습을 볼 수 있었습니다. 그리고 war 파일을 만들어 간단하게 GlassFish에 배포하는 모습을 보니, JRuby가 가진 가능성이 바로 와 닿더군요. JRuby를 사용하면 루비 코드에서 루비 라이브러리는 물론, 자바 라이브러리들까지 함께 사용할 수 있습니다. 그리고 이렇게 만들어진 애플리케이션을 JVM 위에서 돌릴 수 있습니다. 자바와 루비의 장점을 모두 취해 새로운 가치를 만들어낼 수 있을 것 같습니다.

ThoughtWorks에서는 다음달에 내놓을 예정인 Mingle이라는 프로젝트 관리 애플리케이션에 JRuby와 레일스를 사용합니다. JRuby가 아직 1.0은 아니지만(마지막 조율 중), 이미 쓸 수 있는 수준이라는 이야기지요. 오픈마루에서도 모 프로젝트에서 JRuby와 레일스를 사용하는 것을 검토 중입니다. 앞으로 무척 흥미로운 일들이 많이 일어날 것 같습니다. 더 자세한 내용은 MountainWest 루비 컨퍼런스 발표자료를 보시면 도움이 될 것 같습니다.
Rails is LOVE

컨퍼런스의 마지막을 장식한 것은 Dave Thomas의 키노트였습니다. 자신의 관점으로 컨퍼런스 전체를 유쾌하게 정리해주는 모습이 인상적이었습니다. 그리고 일전에 Avi Bryant나 Tim Bray가 그랬던 것처럼 커뮤니티에 숙제를 던져주더군요. 레일스 커뮤니티는 자신들이 만든 카고 컬트(Cargo Cult)에 빠져있는 것이 아닌가라는 말을 했습니다. 루비나 레일스는 툴일 뿐이고, REST는 테크닉일 뿐이라는 것이지요. 그리고 PC가 나온 이래로 우리의 기술이란 것도 반복해서 돌고 도는 것일 뿐이고, 이 사이클을 깨고 뭔가를 해내는 것이 숙제를 던졌습니다. 또 하나, 객체 지향 프로그래밍에 대한 이야기가 인상적이었습니다. 현재 우리가 루비를 사용하는 모습은 '객체(Object)' 지향이 아니라 '클래스(Class)'지향이 아니냐 라며, 프로토타입 기반 언어인 self나 javascript에서 배울 점이 많다고 했습니다. 사실 루비에도 프로토타입적인 특징이 약간 있고(개인적으로는 객체지향언어와 프로토타입 언어의 중간쯤 된다고 생각합니다), 개발자가 쓰기 나름인 면도 있습니다. 이런 자극을 받은 레일스 커뮤니티가 어떤 방향성을 갖게 될지 무척 궁금하네요.

위 사진은 Dave가 키노트 도중 보여준 것인데, 레일스 로고를 두개 붙여서 하트를 만들었습니다. 컨퍼런스 내내 친절하고 발전적인 커뮤니티의 모습을 느낄 수 있었는데, 그 모습이 이미지에 표현된 것 같습니다. 이번 컨퍼런스 최고 유행어였던 Orthopraxy, Change the World, Donation 같은 것이 떠오르네요.
이상으로 레일스 컨퍼런스 체험수기를 마치겠습니다. 개인적으로는 많은 자극을 받을 수 있는 시간들이었습니다. 국내에서도 이런 즐거운 루비 컨퍼런스가 열릴 수 있게 되는 그 날을 기대해봅니다.
추천 리소스
끝으로, 여기에 가시면 이번 컨퍼런스의 발표자료를 받아서 보실 수 있습니다. 간단한 루비 프로그램으로 자료를 한번에 내려 받을 수도 있으니, 참고하세요. 제가 개인적으로 읽어볼 만하다고 생각하는 자료를 소개하면서 글을 마치겠습니다.
- DHH의 키노트 - Rails 2.0의 방향성을 볼 수 있습니다.
- Scott Raymond의 Doing REST Right - REST의 본질을 생각하게 합니다.
- 로버트 마틴의 Clean Code - 자료만으로 현장의 열띤 분위기가 전달될지 잘 모르겠지만, 발표는 최고였습니다.
그리고 자바스크립트 개발에 대한 좋은 발표도 많았습니다.
- Thomsd Fuchs(Scriptaculous 개발자)의 Is javascript Overrated? Or: How I Stopeed Worrying and Put Prototype and script.acuo.us to Full Use
- Nick Merwin의 Scriptaculous Inside Out
- Dan Webb의 The Mysteries of JavaScript-Fu
Rails Deployment 환경이 궁금하다면, 이 자료를 참고하세요.
- Scaling a Rails Application from the Bottom Up
- Harnessing Capistrano
- Exploring Virtual Clusters for Rails Development and Deployment
- Xen and the Art of Rails Deployment
- Memcaching Rails
- JRuby on Rails: A Taste of Honey
마지막으로 레일스를 좀 더 잘 쓰기 위한 고민들입니다.
- The Rails Way
- When V is for Vexing: Patterns to DRY Up Your Views
- The Dark Art of Developing Plugins
- RSpec BOF Presentation
꽤 많군요. Have Fun and Do Good!
- deepblue
이 글은 스프링노트에서 작성되었습니다.














Trackback
트랙백 주소 :: http://www.openmaru.com/trackback/140
Comment
잘 읽었습니다! 매번 상세하게 정리해주셔서 감사합니다. (2007.05.31 00:45)
저도 잘읽었습니다. ^^ (2007.05.31 08:35)
한국말을 잘 읽지못해도, 잘 읽었습니다!
The Rails Way 좋아하셔서 기쁩니다. Review을 잘 써주셔서 감사합니다! (2007.06.01 13:52)
wow! I was really surprised when I saw your name here. Thanks for visiting our blog and commenting on my post esp. "in Korean" (your Korean is even perfect!
.
I loved your presentation at the conference and I visit your blog pretty often. I am your "big" fan. :D well. I appreciate your comment once again. Thanks (2007.06.01 15:05)