루비 컨퍼런스 2006 후기

Posted by 大山 Fri, 27 Oct 2006 19:42:00 GMT

지난 며칠간 루비 컨퍼런스 참석차 미국 덴버에 다녀왔다. 덴버는 나중에 여행만을 위해 다시 찾고 싶을 만큼 무척 아름다운 도시였다는 생각.

다른 컨퍼런스에서는 보통 세션 3-4개가 동시에 진행되기 마련인데, 루비 컨퍼런스는 단일 트랙으로 구성되어 있었다. 참석자 모두가 동일한 경험을 공유하기 위해서라는데, 그것보다도 쉬는 시간에 여유롭게 사람들과 이야기를 나눌 수 있어 좋았다. 컨퍼런스룸이 가로로 길고 좌우 양쪽으로 프로젝터가 설치되어 있어서 그런지, 300명이 넘는 참석자에도 불구하고 비교적 아담한 느낌.

첫날은 타카하시상의 "루비의 역사" 발표와 Evan Phoenix의 Rubinius 발표를 재미있게 들었다. 가장 흥미로웠던 내용은 일본 개발자들이 영어를 잘 못해서 파이썬보다 루비에 관심을 가지게 되었고, 덕분에 루비가 발전할 수 있었다는 점. 이런 경우엔 영어를 못하는 것이 유리할수도 있겠다는 생각이 들었다. Rubinius는 뒤에서 설명.

두번째 날에는 흥미로운 발표가 많았는데, 개인적으로 가장 좋았던 발표는 Nathaniel Talbott의 "Open Classes, Open Companies"였다. Nathaniel은 루비 컨퍼런스 2005의 "Rails: Serving the long tail in 1883 and 2005", 레일스 컨퍼런스 2006의 "Homesteading: A Thriver's Guide"에 이어 역시나 많은 영감을 주는 이야기를 들려주었다. 대략적인 내용은 루비의 동적 특성, 간결성, reflection, 개방성 등을 사업에 그래도 적용하자는 것. 상당히 공감이 가는 내용이었는데, 재미있는 것은 발표 후에 누군가가 그런 형태의 사업은 확장성(Scalability)에 문제가 있지 않겠냐는 질문을 했다는 점이다. 루비를 처음 접하는 사람 중에도 종종 확장성은 어떠냐며 괜한 걱정을 하는 경우가 있지 않은가. 경쟁력있는 사업을 만드는 것이 우선이지 단지 사람수를 늘리는 것이 중요한 것은 아닐텐데 말이다.

또다른 재미있는 발표로는 애플의 개발자인 Laurent Sansonetti의 "Leveraging Mac OS X from Ruby"를 꼽을 수 있다. 이 발표는 Laurent가 개발하고 있는 RubyOSARubyCocoa에 관한 내용이었다. RubyOSA는 기존의 AppleScript를 루비로 대체하는 라이브러리로, 맥 OS X의 GUI 애플리케이션을 루비로 스크립팅할 수 있게 해준다. 예를 들면, 포토샵을 시작하여 어떤 폴더에 있는 이미지를 모두 열고, 이를 특정 사이즈로 리사이징 하는 작업을 모두 루비로 자동화할 수 있다. Laurent는 irb에서 루비 코드만을 사용하여 iTunes를 시작하고, 특정 노래를 플레이하고, 볼륨을 조정하는 데모를 보여주었다. 모두들 환호했던 것은 물론이다. 개인적으로 AppleScript의 신택스에 불만이 많았기에 무척 반가운 소식이었다. 혹시 RubyOSA를 설치하실 분은, 먼저 루비를 1.8.5로 업그레이드 하도록. RubyCocoa는 뒤에서 설명.

가장 논란이 된 발표는 XML의 공동 창시자인 Tim Bray의 "I18n, M17n, Unicode, and all that" 발표였던듯 싶다. 결론만 요약하면, 자신은 썬마이크로시스템즈에서 근무하지만, 최근에 루비 팬이 되었다. 루비의 유니코드 지원은 아직 완전하지 못하다. 어떻게든 루비에서 유니코드 지원이 빨리 이루어졌으면 좋겠다 정도였던 것 같다. Tim의 의도는 아니었겠지만, 그의 발표는 유니코드의 취약점을 잘 드러내기도 했다. Tim은 유니코드 문자열에서, capitalize, upcase, downcase 등의 메소드를 지원하는 것은 위험하다고 주장했다. 영어 알파벳만 놓고 보면 모르지만, 전세계 charset이 모두 포함된 유니코드에서는 대소문자의 구별이 규칙적이지 못하기 때문이라는 것이다. 유니코드는 이처럼 모든 charset을 동시에 다룰 수 있는 장점이 있는 반면, 개별 charset에만 적용되는 메소드는 지원하기가 어중간하다는 단점이 있다. 나는 이런 이유 때문에라도 루비 2.0에서처럼 문자열마다 인코딩을 별도로 지정하는 방식이 모두에게 유니코드를 강요하는 방식보다 더 유연할 것이라고 지적했는데, Tim은 그다지 수긍하고 싶어하지 않는듯. 아무튼 Tim의 발표로 인해 컨퍼런스 내내, capitalize는 위험한 메소드라는 농담이 끊이질 않았다.

둘째날 저녁식사 후에는 Matz의 기조연설이 있었다. Matz는 루비 1.9.1이 2007년 크리스마스에 릴리즈될 것이라고 선언을 했다. 기조연설의 주요 내용은 커뮤니티가 루비 2.0의 설계에 보다 활발하게 참여할 것을 요청하는 것이었다. 각종 제안을 수렴하고 논의하기 위한 별도의 웹 사이트가 곧 만들어질 예정이라고 한다. 새로운 웹 사이트가 만들어지면, 개인적으로도 열심히 참여해야겠다는 생각.

마지막 날에는 코이치상의 Yarv 발표, 그리고 John Lam의 RubyCLR 발표를 관심을 가지고 들었다. 이제 Yarv는 왠만한 루비 프로그램은 다 잘 실행하는 단계가 되었다고 한다. 코이치상은 Yarv에서 레일스가 실행되는 것을 시연하였고, 모듈에 따라 Yarv의 실행속도가 최고 20배까지나 빨라졌다는 벤치마크를 공개하였다.

한가지 흥미로운 점은 루비의 실행환경이 부지기수로 늘어나고 있다는 것. 공식 루비 실행환경인 루비 1.8Yarv 이외에도 JRuby, RubyCLR, Ruby.NET, RubyCocoa, Rubinius 등이 모두 현재 활발하게 개발되고 있는 루비의 실행환경이다. JRuby는 자바로 구현된 루비 실행환경으로 루비에서 자바 클래스를 사용할 수 있도록 해준다. 일종의 루비/자바 브릿지 역할을 한다고도 볼 수 있는데, JRuby의 메인 개발자인 Charles Nutter는 곧 JRuby가 루비 코드를 자바 바이코드로 컴파일하는 기능도 갖추게 될 것이라고 했다. JRuby 프로젝트는 최근에 썬마이크로시스템즈에 인수되기도 했는데, 썬도 자바의 언어적 한계를 인정하고 점차 JVM을 범용 가상머신으로 재포지셔닝하고 있다는 느낌이다.

RubyCLR은 일종의 루비/.NET CLR 브릿지로 루비에서 C# 클래스를 접근할 수 있도록 해준다. RubyCLR을 사용하면, 루비로 윈도우 GUI 프로그래밍을 할 수 있다는 얘기. 컨퍼런스 중에 RubyCLR 프로젝트 역시 마이크로소프트에서 인수한다는 발표가 있었다. 마이크로소프트가 썬의 JRuby 인수에 자극을 받은건 아닐지. :) Ruby.NET은 RubyCLR보다 한걸음 더 나아가 루비 코드를 CLR 바이트코드로 컴파일해주는 독자적인 루비실행환경이다. 마이크로소프트가 Ruby.NET 대신 RubyCLR을 인수한 것은 다소 의문이지만, nohmad님이 답글에서 지적하신대로 Ruby.NET이 대학교 연구실에서 진행하는 프로젝트라 그럴수도 있겠다는 생각이 든다.

RubyCocoa는 루비로 맥 OS X의 Cocoa 클래스를 사용할 수 있게 해주는 루비/Objective-C 브릿지 라이브러리이다. JRuby나 Ruby.NET처럼 독자적인 루비 실행환경은 아니지만, 기존 루비의 실행환경에서 맥 OS X GUI 프로그래밍을 가능하게 해준다는 면에서 개인적으로는 더 선호하는 방식이다. Laurent에 따르면, 애플은 맥 OS 10.5 Leopard를 RubyCocoa와 RubyOSA를 포함한 통합 루비 프레임워크를 번들하여 출시할 예정이라고 한다.

Rubinius는 일종의 대안 루비 실행환경이라고 볼 수 있는데, 코드베이스를 보다 간소화하고, C 코드를 직접 작성하는 대신 루비로 루비 가상머신을 구현한 다음, 루비 코드를 C 코드로 변환하는 방식을 사용하여 개발하고 있다고 한다. 마지막으로 구글 Summer of Code 프로젝트 중에는 핸드폰(Symbian OS)에 루비를 컴파일하는 Ruby-Symbian 프로젝트도 있었다고 한다. 자바, 윈도우, 맥 OS X, 그리고 핸드폰에서 모두 루비를 지원하다니, 상당히 고무적이라는 생각. :)

추가적으로 궁금한 사항은, 답글로 질문주시길.

업데이트: nohmad님이 답글에서 지적하신대로 RubyCLR은 루비 런타임 환경이 아니라, Ruby/.NET CLR 브릿지 라이브러리였습니다. 본문 내용을 이에 맞게 수정합니다.

Posted in  | Tags ,  | 15 comments | no trackbacks

Comments

  1. 1.
    홍민희 said about 9 hours later:

    많은 Objective-C/Cocoa 브릿지들이 Objective-C의 특수한(?) 메세지 구문 때문에 괴상하게 번역되는데, RubyCocoa에서는 어떨지 궁금하군요—라고 적으려는 순간, “아 내가 직접 확인하면 되는 것 가지고”하며 찾아보았습니다. 역시나 [[NSSound alloc] initWithContentsOfFile: path byReference: YES]OSX::NSSound.alloc.initWithContentsOfFile_byReference(path, true)로 번역되었네요. Ruby라면 좀더 비슷하게 번역될 수 있을 것 같았는데요. ㅎㅎ


  2. 2.
    大山 said about 10 hours later:

    @홍민희: 안그래도 Laurent에게 자동으로 인터페이스를 번역하는 대신 Obj-C 클래스마다 루비 Wrapper 클래스를 따로 구현할 생각은 없냐고 물어봐서 앞으로 고려해 보겠다는 답변을 들었습니다. 그 정도만 되면, 루비가 Cocoa 개발을 위한 훌륭한 대안 언어가 될 수 있겠지요.

    만약 루비 Wrapper 클래스가 구현되고 루비 2.0에서 해시 리터럴 양식이 예정대로 바뀌면, 아마 다음과 같이 될겁니다.

    OSX::NSSound.new(file: path, by_reference: true)

    여기에 루비에서 by_reference의 디폴트 값을 true로 설정하면, 더욱 간소화시킬 수 있겠죠. :)

    OSX::NSSound.new(file: path)

    맥 OS X 10.5 Leopard에서 아예 루비 프레임워크를 구성하겠다니, 충분히 가능한 일이라고 봅니다. RubyOSA 1.0이 릴리즈되면 Laurent를 귀찮게 굴어봐야 겠네요. ㅎㅎ


  3. 3.
    홍민희 said about 12 hours later:

    아, 그렇게만 된다면 정말 좋을 것 같습니다! 게다가 인자 순서도 바꿀 수 있으니 Objective-C의 Smalltalk 스타일 메세지 구문보다 더 융통성이 높겠군요.

    생각해보니 PyObjC도 키워드 인자를 이용해서 NSSound(file=path, byReference=true) 같이 가능할텐데, 그렇게 하지 않는군요.


  4. 4.
    김진영 said about 13 hours later:

    Ubiquitous Ruby가 되는 건가요? 잘 다녀오셨다니 기쁘네요. 최근에 실험실 플젝에 루비를 밀어보려고 하는데, 더 느리게 구현하기 어렵다는 루비 인터프리터 대신에 대안으로 사용할만한게 많이 생긴 것 같군요. 현재 유닉스용으로 전반적으로 가장 좋은 성능을 내는 구현은 Yarv인가요?


  5. 5.
    nohmad said about 14 hours later:

    와! RailsConf에 이어 RubyConf에도 참석하셨군요! 부럽습니다. ㅜㅜ Laurent Sansonetti씨가 애플에서 일하고 있었군요. Ruby-Gnome2 메일링에서 보던 사람인데 재미있습니다.

    MS에서 Ruby.NET이 아닌 RubyCLR 개발자를 고용한 것은 Ruby.NET은 학교 연구실에서 만들고 있는 거라 인수하기가 힘들어서 그런 것 같습니다. :) RubyCLR은 언어 구현이라기보다는 MS의 닷넷 프레임워크로의 브릿지일 뿐이기 때문에, 완전한 닷넷 CLI--Ruby.NET은 모노에서도 컴파일됩니다-- 상에서의 독자적인 루비 구현을 목표로 하는 Ruby.NET과는 비교하기 힘든 것 같습니다.

    어쨌든 썬, 애플, MS 등 굵직한 회사들이 모두 루비를 지원하려 노력하고 있다니 감개무량입니다. :)


  6. 6.
    大山 said about 18 hours later:

    @김진영: 성능으론 계속 Yarv가 가장 뛰어날듯. 다만 아직은 안정성 문제도 있고 해서 그냥 1.8.5를 쓰는게 나을꺼야. 정 최적화 작업이 필요한 부분이 있으면 C 모듈로 개발하면 되고. 예를 들면, 현재의 Yarv는 아직 GC가 작동을 안한다는.. ㅋㅋ

    @nohmad: 예, 운좋게 등록을 해서 다녀왔습니다. :)

    말씀처럼 RubyCLR은 단순한 Ruby/.NET CLR 브릿지가 맞습니다. John Lam의 발표에서 데모를 봤었는데 며칠 지나서 제가 헷갈렸었네요. :(

    루비가 과연 "One language to rule them all."이 될 수 있을까요? ㅎㅎ


  7. 7.
    엽우 said about 21 hours later:

    다 좋은데 루비 1.9.1 일 2007년 크리스마스라면 너무 많이 남았네요... -_ㅜ


  8. 8.
    大山 said 1 day later:

    @엽우: 1.9.1 Stable이 크리스마스인 거니까 너무 낙담하지 않으셔도.. ;)

    Yarv의 현재 trunk를 설치해 봤는데, 지금도 스피디하게 잘 돌아갑니다~


  9. 9.
    에이콘 said 3 days later:

    모두들 기술적인 코멘트를 남기시는데 안부인사를 남기려니 대략 뻘쭘~합니다. ^^; 늘 열심히 하시는 대산님께 기! 한번 불어넣고 갑니다~~


  10. 10.
    joonhwan said 3 days later:

    글을 읽다가 일전에 rubykr 에 scalability 에 대해서 질문했던 것 때문에 뜨끔했습니다 :) 좋은 글 감사합니다.


  11. 11.
    大山 said 4 days later:

    @에이콘: 감사합니다~ :)

    @joonhwan: 에고, 죄송합니다.. ^^;;


  12. 12.
    강대권 said 5 days later:

    잘 지내시죠? 대산님^^ 간만에 왔네요... 요즘 플젝때매 정신이 하나두 없슴다ㅠ.ㅠ;;

    님 덕분에 루비콘에 대해 잘 알게되었네요..^^

    저두 기!! 불어넣구 갑니다.. 기!!


  13. 13.
    大山 said 5 days later:

    @강대권: 대권님 오랜만이네요. 말씀 감사하구요, 프로젝트 잘 마무리하시길~ :)


  14. 14.
    abraxsus said about 1 month later:

    좋은글 감사합니다. 유익한 글이었읍니다. :-) 가끔 놀려오겠읍니다..ㅋㅋ


  15. 15.
    大山 said about 1 month later:

    @abraxsus: 말씀 감사합니다. 종종 뵙기를~ :)


Trackbacks

Use the following link to trackback from your own site:
http://beyond.daesan.com/articles/trackback/4489

Comments are disabled