루비 세미나 후기

Posted by 大山 Sun, 26 Nov 2006 17:42:00 GMT

어제는 첫 루비 세미나 모임오픈마루 회의실에서 열렸다. 첫 발표를 맡으신 Ias님은 JRuby에 대한 상세한 내용을 다루어 주셨다. 특히 JRuby의 설정, 사용법, 용도 등과 관련한 내용을 많이 짚어주셔서, JRuby 사용을 염두에 두고 있는 분들에게 많은 도움이 되었을듯.

두번째 발표는 정목님Capistrano 발표였는데, 깔끔한 프레젼테이션 스킬이 돋보이는 발표였다. Capistrano는 레일스 Deployment를 자동화시켜주는 툴인데, 덕분에 Capistrano를 사용하는 과정 전체를 잘 들여다 볼 수 있었다.

세번째 발표는 내가 준비한 루비 메타 프로그래밍이었다. 메타 프로그래밍은 루비에서 런타임에 동적으로 메소드를 추가하는 프로그래밍 기법으로, 레일스 등에서 널리 응용되고 있는 기능이다.

예를 들어, 다음처럼 Base 클래스에 'my_attr_accessor'이란 클래스 메소드가 정의되어 있다고 가정해보자.

class Base
  def self.my_attr_accessor(str)
    class_eval "def #{str}; @#{str}; end"
    class_eval "def #{str}=(value); @#{str}=value; end"
  end
end
 

위에서 'my_attr_accessor' 클래스 메소드는 'class_eval' 메소드를 호출하여 문자열로 작성된 루비 코드를 실행시킴을 알 수 있다. 이 때문에 Base 클래스를 상속받는 모든 클래스는 단지 'my_attr_accessor' 메소드를 호출함으로써 특정 인스턴스 변수에 대한 접근자 메소드를 동적으로 정의할 수 있다. 즉, 다음 두개의 Person 클래스 정의는 논리적으로 동일하다.

class Person < Base
  my_attr_accessor "name"
end

class Person
  def name
    @name
  end
  def name=(value)
    @name=value
  end
end
 

실제로 루비에는 'my_attr_accessor'와 비슷한 기능을 하는 'attr_accessor'라는 메소드가 이미 정의되어 있어 새로운 클래스를 정의할때 사용할 수 있다.

막상 발표를 끝내고 보니 구체적인 예를 더 준비하지 못한게 아쉬웠는데, 마침 deepblue님루비를 즐겨요 발표가 내용적으로 이어지는 발표가 되어 좋았다. 이 발표는 과연 '루비스러운 코드는 무엇인가'에 관한 내용이었는데, 다소 형이상적일수도 있는 이 물음에 deepblue님은 다음과 같은 답을 제시했다.

루비스러운 코드는 개발자가 고민한 시간이 묻어있는 사람 냄새나는 코드입니다.

위의 구절에서도 deepblue님의 고민과 사람 냄새가 느껴지는 듯. :)

다섯번째 발표는 seradin님의 Groovy/Grails에 관한 내용이었다. seradin님의 세련된 말솜씨가 돋보이는 발표였는데, 덕분에 Groovy/Grails에 대한 내용을 쉽게 파악할 수 있어 좋았다. Groovy는 자바의 스크립팅 언어 지원 정책과 관련해서도 유심히 지켜봐야할 언어일듯 싶다.

아쉽게도 저녁에 다른 약속이 잡혀있어 끝까지 참석하지는 못했지만, 다른 분들의 후기와 발표자료를 읽어보니 모두 유익하고 흥미로운 발표였던 것 같다.

다소 아쉬웠던 점은 아무래도 발표가 중심이다보니 토론이 쉽게 이루어지지는 않는 면이 있었다. 다음부터는 세미나 주제를 두어개로 고정해서, 조금 더 토론 중심적인 모임을 가져보면 어떨까하는 생각도 든다.

Posted in  | Tags , , ,  | 11 comments | no trackbacks

Comments

  1. 1.
    codian said about 9 hours later:

    메타프로그래밍 발표 좋았습니다.

    제 발표때 대산님 의견을 좀 들어보고 싶었는데 먼저 가시는 바람에 아쉽게 됬습니다. 다음에도 기회가 있겠죠 뭐 :)


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

    @codian: 안그래도 개발하고 계신 것을 꼭 보고싶었는데 그렇게 되었네요.. 다음번에 꼭 보여주세요! :)


  3. 3.
    정목 said about 12 hours later:

    안그래도 메타프로그래밍이랑 DSL에 대해서 대충 어렴풋하게 알고 있었는데, 이번에 확실하게 감을 잡았습니다. :) 직접 짜기는 쉽지 않겠지만, 그래도 루비의 이런 기능을 알고 있는 것이 루비의 매력을 알아가는데 큰 도움이 되는 것 같아요. 좋은 발표 감사합니다~ :)


  4. 4.
    大山 said about 13 hours later:

    @정목: Capistrano를 다시금 들여다보고 있는데, 지금보니 상당히 재밌네요. 정목님의 발표 덕분인 것 같습니다. 저도 좋은 발표 감사합니다~ :)


  5. 5.
    JasonPA said about 20 hours later:

    DSL 에 대한 얘기는 마틴파울러 아저씨의글 -> 김창준님의 세미나에 이어서 세번째 들어본 주제인데요, 언제나 많은 얘기꺼리를 쏟아낼 수 있는 내용인 것 같습니다. 개념적인 것들보다 역시 보여주는걸 좋아하는 편인데, 이런이런 정말 참신한 셈플 예제 코드는 정말 루비스러웠습니다. ^^ 다시 생각해도 재미나네요.


  6. 6.
    deepblue said about 20 hours later:

    미션 임파서블 예제는 다시 봐도 명작이야! 너무 센스있는 코드였어. ^^

    토론에 대해서는 다음 모임 전에 한번 온라인이든 오프라인이든 같이 한번 고민해보자구.


  7. 7.
    세라딘 said about 21 hours later:

    저 역시도 메타프로그래밍에 대해 다시 한번 생각해 보게 되었습니다. 다음번에는 잘 준비해서 알려드리도록 해보겠습니다. ^^


  8. 8.
    wookay said about 21 hours later:

    그때 말한 ActiveSupport의 returning 코드는 다음과 같은데 class Object def returning v yield v; v end end

    ary = returning [1,2] do |a| a << 3 end puts ary

    저렇게 객체에 대한 블럭을 사용하는 리터닝 메서드를 사용하는 것이 메타프로그래밍인가 물어봤던 것. 후후.


  9. 9.
    大山 said 1 day later:

    @JasonPA: 앞으로도 메타프로그래밍 관련해서 많은 말씀 나눌 수 있었으면 좋겠습니다~ :)

    @deepblue: 에구, 그날 이것저것 정신이 없어서 많이 횡설수설한 느낌일세. 세미나 준비하느라 수고 많으셨고, 조만간 또 논의해보자구~ :)

    @세라딘: Groovy/Grails에 대한 멋진 설명 감사했습니다. 발표자료 없이도 말솜씨가 너무 좋으세요. ^^ 다음에도 좋은 이야기 많이 들려주세요~

    @wookay: 음, 무언가 상당히 동적인 코드인듯. 조만간 RC에서 또 보자구~ :)


  10. 10.
    시금치 said 13 days later:

    심플하면서도 동적인 코드를 구현할 수 있는 프로그래밍 언어를 찾고 있었습니다. 그런데 예전에 C언어를 좀 배운 것 빼고는 완전히 문외한이라 걱정하고 있었거든요.. 교양과목으로 들었던 수업에서 나온 Lisp를 여기서 이름이나마 다시 듣게 되니 정말 반갑네요. 거기서 한층 발전된 루비라는 프로그래밍 언어에 관심이 생겼어요. 좋은 정보 정말 감사드립니다~~ ^0^


  11. 11.
    大山 said 13 days later:

    시금치님 반갑습니다~ :)


Trackbacks

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

Comments are disabled