[RailsConf 2일째] 리소스로 세상을 바꿀 레일스 2.0

레일스 컨퍼런스(RailsConf) 2일째입니다. 어제는 준비운동이었고, 본 경기는 오늘이 시작입니다. 설레는 마음으로 행사장에 도착하니, 정말 많은 사람들이 있더군요. 무려 1,600명입니다. 41명이 모여서 했던 최초의 RubyConf를 생각해보면, 정말 엄청난 발전입니다. 학교에서는 맨 뒷자리부터 찾았는데, 여기 오니 앞으로 뛰쳐나가고 싶은 마음이 가득합니다. :) 조금 서두른 덕에 3번째 줄 중앙에 앉을 수 있었는데, 바로 앞 자리에 DHH, PragDave, David Black, Chad Fowler, Rich Kilmer 등 유명 인물들(?)이 이야기를 나누고 있었습니다. 좋아하던 가수를 만나는 팬의 마음이 이해가 되더군요. 하하~ 얼른 달려가 Dave와 이야기도 나누고, 사진도 찍었습니다(Dave는 제가 번역한 책 프로그래밍 루비의 저자이기도 합니다). DHH에게 스프링노트를 보여주고 싶었는데, 아쉽게도 너무 바쁘더군요. 다음 기회를 노려야겠습니다.

 

198/503593131_76e69e8c41_m.jpg

 

챠드 파울러의 짧지만 감동적인 오프닝이 이어졌습니다. 루비(레일스) 컨퍼런스는 발표자와 청중으로 나뉜 그런 강연회가 아니라, 아이디어를 서로 나누고 또 그 문제를 그 자리에서 해결하기도 하는 '변화'의 장이라는 말을 하더군요. 루비의 표준 패키지 관리자인 루비젬도 RubyConf 행사장에서 처음 만들어졌습니다. 루비 커뮤니티에 바라는 바를 이야기합니다. 우리가 가진 힘(Power), 열정(Passion), 명석함(Smart)으로 산업 전반을 바꾸고, 세계를 바꾸자고 하는군요. 그리고 변화가 일어나는 장소인 이 컨퍼런스 장에서 지금 시작하자고 하는군요. 멋집니다. 아웃사이더가 되지 않을까 약간 우려하던 저에게도 용기를 주는군요. 세상을 바꾸기 위해 기술뿐 아니라 마음도 나누는데, 서버가 힘들어할 정도로 많은 기부가 이뤄지고 있습니다.

 

레일스의 현재

리치 킬머의 소개로 DHH가 단상에 나타났습니다. 지구상에서 가장 섹시한 해커라는데, 제가 봐도 그런 것 같습니다. DHH가 레일스로 돈을 벌고 있는 개발자 손을 들어보라고 하네요. 정말 많더군요(저도 손을 번쩍 들었습니다). 루비 컨퍼런스에서 레일스를 아는 사람이 3명이었던 시절부터 3년도 지나지 않아 이 정도가 되었으니, 레일스의 성공을 따로 설명할 필요도 없어 보입니다.

 

189/503984317_e597952be4_m.jpg

 

성공 요인의 하나로 플러그인을 들었습니다. 레일스 플러그인은 개발자의 참여, 오픈 소스의 힘을 보여줍니다. 최초의 플러그인은 루비 코드 다섯 줄로 이뤄진 초라한 모습이었지만, 현재는 수백 개의 플러그인이 나와있고, 그 중 일부는 레일스 코어에 포함되기도 했습니다. 멋진 일이네요.

 

레일스를 지원하고 나선 IDE가 많이 나오는 것도 고무적입니다. Textmate, Aptana, Komodo, NetBeans, CodeGear 등 참 많습니다. 일부는 이 곳에 부스를 만들고 데모하고 있어서 조금씩 구경했는데 너무 멋진 모습들이었습니다. 자바 수준의 툴 지원도 먼 이야기가 아닌 것 같습니다.

 

루비/레일스를 다루는 책도 무척 많았습니다. Agile Web Development with Rails가 처음 나온다고 들었을 때는 이해가 안될 정도로 무모해 보였는데, 현재는 도서 시장의 규모만 보면 SQL 수준이고, 여타 경쟁(?) 언어를 뛰어넘었다고 하는군요. 국내에서도 올해 들어 많은 책들이 나오고 있지요. 2년 전에 출판사를 찾아가 루비 책을 출판하자고 설득을 했던 기억이 나는데, 참 재미있습니다.

 

A Peak at Rails 2.0

작년 RailsConf에서 World of Resources라는 멋진 발표 이후로 레일스는 많은 변화를 이뤄냈습니다. 리소스(여기서는 REST의 레일스 구현체라는 의미로 이해하시면 됩니다)가 자연스럽게 녹아있는 Rails 1.2가 발표되었고, 리소스 클라이언트인 액티브리소스는 정식 젬으로 배포되었습니다.

 

228/503574487_9afcbffadf_m.jpg

 

오늘 DHH의 키노트 중심 주제였던 Rails 2.0(후속 버전)에서도 이런 흐름은 이어지고, 더 자연스러운(주장이 강한) 모습으로 레일스와 결합할 것 같습니다. 그 중심에 있는 것이 바로 어제 소개한 Simply Helpful 플러그인이었는데, 최근 레일스 트렁크에 병합되면서 레일스 2.0 개발이 탄력을 받고 있습니다. 이 플러그인은 더 강한 관례(Convention)로 루비 객체를 리소스 표현법으로 변환시킵니다. 예를 들면, form_for person_path(@deepblue), :id => 'edit_person_1'  이라고 쓰는 대신 form_for @deepblue 라고만 쓰면 되는 것이지요. 이렇게 되면 @deepblue가 new_record인지 아닌지에 따라 각각 update(PUT)를 호출할지, create(POST)를 호출할지 자연스럽게 결정됩니다. 이것은 하나의 예일 뿐이고, 리소스에 대한 '통합된 접근(Universal Access)'을 보다 쉽고 빠르게 얻기 위한 방법으로 다양한 관례를 도입하고 있습니다. 이것이 제가 이해한 레일스 2.0의 핵심입니다.

 

레일스는 특히나 주장이 강한(opinionated) 소프트웨어입니다. 그 주장이 관례라는 이름으로 표현되고 있으며, 일부에게는 거부감으로 다가가고 또 다른 일부에게는 '생산성'으로 느껴지는 것 같습니다. 레일스 2.0은 더 큰 목소리로 Rails Way를 외칠 것 같습니다. 받아들이는 입장에서는 장단을 따져서 장점만 취하는 것도 좋은 전략입니다. 레일스의 주장이 마음에 들지 않는다면 레일스를 무시하거나, 더 나은 방법을 구현(플러그인으로)해서 공개하고 목소리를 내면 됩니다. 레일스는 오픈 소스 소프트웨어이기 때문입니다. 어쨌든 레일스 2.0에는 WebService가 구성 요소에서 빠지고, 스캐폴딩도 리소스 기반으로 바뀝니다. Ajax는 여전히 잘 지원할 것이고, OpenID와 ATOM도 든든한 우군이 될 것입니다.

 

제가 다행스럽게 생각하는 점은 레일스 2.0이 괴물(DHH의 표현에 따르면 유니콘)이 되지 않았다는 것입니다. 레일스 개발팀은 모든 것을 한번에 바꾸려는 어리석은 판단을 하지 않았습니다. 현재 상태에서 조금만 더 개선하고, 그 개선을 꾸준히 이어가는 방법을 택했습니다(사실 프로그래밍을 하다 보면 말처럼 쉽지 않은 선택입니다). 언제 릴리즈될지 아무도 모르는 루비2보다 훨씬 나은 선택입니다.

 

이번 키노트에서는 DHH가 새로운 레일스 방식으로 AddressBook을 만드는 라이브코딩 데모를 시도했습니다. 얼마 전 세미나에서 라이브코딩이 얼마나 힘든 일인지 뼈저리게 느껴서인지, DHH의 실수가 오히려 자연스럽게 보입니다. 그나저나 실수를 하고서 괴성(?)을 지르는 DHH의 모습이 너무 귀엽더군요. 하하.

 

이어지는 발표는 레일스 2.0에서 개선되거나 변경되는 내용을 9가지 항목으로 공개했습니다. 재미있는 점은 여기서 소개한 내용 대부분이 이미 사용할 수 있는 것이고, 그 중 일부는 스프링노트 서비스에 적용되어 있기도 합니다. 제가 가끔씩 EdgeRails에서 일어나는 의미 있는 변화들을 혼잣말처럼 중얼거리곤 하는데, 그것들이 발표 내용이었습니다. 크게 새로울 것은 없었지만, 레일스는 점점 진화하고 있구나라는 생각을 새삼 하면서 자기계발에 힘써야겠다는 딴생각을 한 제 모습이 좀 우습기도 하네요 ^^

 

오늘 DHH의 키노트를 들으며 여전히 레일스와 레일스 커뮤니티는 '건강'하다는 느낌을 받았습니다. 그리고 이런 모습 때문이라도 레일스의 도입이 확산될 것이라는 확신을 갖게 되었습니다.

 

Doing REST Right

이어서 Scott Raymond가 해온 REST에 대한 생각을 공유하는 세션을 들었습니다. 먼저 REST의 개념탑재가 시작되었습니다. 레일스 개발자들을 위해 레일스 개발자들이 오해하기 쉬운 사실들을 먼저 주의시키더군요. REST는 예쁜 URL도, CRUD도, respond_to도, map.resources도, HTTP도, 프로토콜도, 아키텍쳐도 아니라고 했습니다. 그러면서 REST를 웹에 적용할 수 있는 아키텍쳐 스타일이라고 규정하며, 통신 이론과 웹 아키텍쳐 중간에 있다고 설명했습니다. 일종의 가이드라인이라고 해도 괜찮은 표현인 것 같습니다. 그렇다면 리소스는 무엇일까요? 리소스는 Identification(주소), Interaction(작은 메서드 셋), Content(데이터)를 가진 객체입니다.

 

222/504191513_5ac5c5330f_m.jpg

 

그러면서 실제 REST를 믿고 따르며, 개발하다 보면 자연스럽게 하게 되는 고민들에 대해 같이 생각해보는 시간을 가졌습니다. 저도 많이 고민도 하고, 질문도 받았던 부분이었는데 정리가 되는 것 같아 매우 유익했습니다.

 

몇 가지 예를 들면, 여러 개의 리소스를 한꺼번에 업데이트하고자 하면 어떻게 하느냐는 질문이 있었습니다. 스프링노트의 목록 페이지에서 페이지 리소스들을 선택해고 한꺼번에 삭제하는 등의 메서드를 호출하는 경우를 떠올리면 됩니다. 이 경우 범위(Scoping)으로 해결할 수 있습니다. 선택된 리소스들을 하나의 범위로 이름을 주고, 그 범위 리소스의 삭제 리소스를 호출하는 방식입니다. 리소스의 일부만 수정하는 경우도 마찬가지로 범위 문제입니다. 트랜잭션도 마찬가지입니다.

 

가장 많이 받는 질문은 내가 만드는 애플리케이션은 매우 특별해서 GET/POST/PUT/DELETE로는 표현할 수 없다라는 것인데, 답은 명확합니다. 틀렸을 것이 분명합니다. 특별한 것은 없습니다. 모델을 찾아내서 규정해야 합니다. 물론 그렇게 해서 다소 비효율적인 코드가 될지도 모릅니다. 하지만 그보다는 리소스에 대한 공통된 접근법(Universal Access)가 더 훌륭한 가치입니다. 어디든 트레이드-오프는 있기 마련이니까요.

 

안정성(Reliability)를 위해 2단계 커밋(Two Phase Commit)을 제안하는 것도 인상적이었습니다. POST는 상태를 갖는 위험한 메서드이기 때문에, 그 전에 먼저 POST를 해보고 신선한(fresh) URL을 얻어서, 그 URL에 커밋하라는 것이지요. 동시성을 위해 ETag를 사용하라는 것도 괜찮은 아이디어로 보였습니다.

 

또 하나 재미있었던 것은 레일스가 REST를 추구하면서 잘못하고 있는 점을 꼬집은 것입니다. Identification(URL)에 컨텐트의 종류(예를 들면 1.xml)을 포함시킨 것은 일종의 UI를 강제한 것이라는 것입니다. 동감하는 부분입니다. 또 하나 지적한 것은, ActiveResouce#to_xml이 만들어내는 출처 불명 데이터입니다. 새로운 모델을 매번 정의하고 DB를 투명하게 노출하는 방법보다는 이미 잘 알려진 컨텐트 유형을 쓰는 것이 나은 접근이라는 것입니다. 사실 스프링노트도 이 부분을 지적해주신 kayflow님 덕분에, 널리 쓰이는 더블린 코어를 일부 따르도록 용어(속성)을 수정한 바 있습니다. 이런 목소리가 늘어나면 레일스는 또 한번 성장하겠지요. 저도 그 목소리의 하나가 돼야겠다는 생각이 많이 듭니다. REST에서 취약한 통지(Notification)에 대해서는 현재처럼 폴링하는 것보다는 콜백을 등록하는 모델이 있었으면 좋겠고, 레일스 커뮤니티에서 이 부분에 리더십을 발휘하면 어떨까라는 의견도 냈습니다.

 

평소에 가지고 있던 REST에 대한 생각이 조금 정리된 정말 유익한 개념탑재 세션이었습니다.

 

그 외의 세션들

그 외에서 인상적인 세션이 많았습니다. 특히나 UncleBob으로 더 유명한 로터브 마틴의 Clean Code 세션은 '열정' 그 자체였습니다. 그의 강의를 듣고 있다는 사실만으로도 새로 태어나는 기분이 들고, Uncle Bob의 에너지가 저에게까지 쭈욱 전달되는 느낌이었습니다. 더 많은 사람들이 그의 강의를 듣고 Clean Code를 위해 노력했으면 좋겠습니다. 우주 평화를 위해서라도. 여기 저기 뛰어다니면서 강의하는 모습이 생각나서 웃음이 납니다. 역시 Uncle Bob!

 

202/503608760_fabb1314fe_m.jpg

 

제가 루비세미나에서 잠깐 소개했던 Heckle을 여기서 다시 만나니 굉장히 반갑더군요. 작년에 연극으로 인기를 끌었던 Adam Key의 유머는 여전했습니다(이번에는 유명한 Identification 2.0 발표를 패러디해서 세션장을 웃음바다로 만들었습니다).

 

Steven Smith는 레일스가 엔터프라이지를 위해 준비되었는가에 대한 질문에 '엔터프라이즈는 레일스를 위해 준비되었느냐'며 되물었습니다. RailsConf니까 가능한 발표들이었겠지만, 엔터프라이즈에도 변화의 바람은 필요하겠죠.

 

Avi Bryant는 30년 후의 루비라는 주제로 키노트 발표를 했습니다. 문자는 달라도 발음은 똑 같은 인도의 언어를 예로 들면서, 스몰톡과 루비는 다르지 않다고 했습니다. 스몰톡은 외계의 기술이 아니라는 것이지요. 그러면서 스몰톡이 이미 이루어놓은 훌륭한 기술들을 레일스 커뮤니티에서 참고하고, 이를 통해 영감을 얻어야 한다고 했습니다. RailsConf에 와서 스몰톡 좀 배우라고 발표를 한 용감한 Avi의 말을 완전히 믿고 따르는 분위기는 아니었지만, 그래도 많은 아이디어를 얻었습니다. 루비나 레일스의 발전 방향을 조금은 본 것 같은 느낌도 듭니다. 그가 던져준 먹이들은 귀국해서 하나씩 곱씹어볼 생각입니다. 멋진 발표와 데모였습니다.

 

190/504096000_40e4e00b75_m.jpg

 

마지막으로 저는 100% 이해하지 못했지만, Ze Frank의 다들 완전 뒤집어지더군요. 유쾌한 캐릭터더군요. 길고 긴 하루였지만, 이 자리에 있어서 행복합니다. 12시간씩 걸려서 이국땅에 와 있는 보람이 있습니다. 컨퍼런스가 끝나지 말았으면 좋겠다는 생각까지 드는 건 저의 오버일까요? 아, 컨퍼런스 정리에는 스프링노트가 최고입니다. 가끔 옆에 앉아있는 사람에게 이거 한국에서 레일스로 만든 위키야, 멋지지~라며 자랑도 할 수 있어서 재미있었습니다. 스프링노트팀 여러분 파이팅!

 

내일은 또 어떤 생각들을 흡수할 수 있을지 기대됩니다.

 

201/504177168_be859d5ed5_m.jpg

 

- deepblue