루비, Leopard를 만나다

October 31st, 2007

Mac OS X 10.5 Leopard가 이번 주에 세상에 나왔다. 300가지의 새로운 기능이라는 문구처럼 정말 많은 부분에서 나아졌다. 다른 부분에 대해서는 더 좋은 글을 해주시는 분들이 많으니, 나는 루비스트의 입장에서 Leopard를 뜯어보겠다. 

 

루비 1.8.6 + 루비젬 + 레일스

Leopard를 설치하게 제일 먼저 해본 일이 터미널을 열어서 ruby -v를 실행해보는 것이었다. :) 꽤 최신 빌드가 설치되어 있는 것을 볼 수 있었다. 게다가 루비젬도 설치되어 있었다. 참고로 루비젬은 필수 라이브러리인데, 배포본에 포함되지 않아서 따로 설치하려면 꽤 불편하다(루비 1.9에는 포함될 예정이다). 

 

더 놀라운 점은 레일스도 이미 설치된 상태라는 점이다. 레일스를 배포본에 포함한 최초의 상용 OS가 아닐까? 내년 RailsConf에서는 윈도우 구경가하기 더 힘들어질 것 같다. 

 

그림_1.png

 

함께 설치된 젬 목록을 한번 살펴보자.

 

그림_8.png

 

레일스뿐 아니라 몽그렐(루비 웹서버), Capistrano(레일스 배포 프레임워크), 루비 오픈ID 라이브러리, Hpricot(HTML 파서) 등의 눈에 띈다. 특히나, 초기에 레일스 개발을 위한 젬이 모두 포함되어 있다. 다음 릴리즈에는 완소 RSpec과 ZenTest도 포함될 수 있기를 기대해본다.

 

그리고 이번에 포함된 루비는 readline 지원을 켠 상태로 빌드된 것이다. 그래서 IRB의 히스토리 기능과 레일스 콘솔등도 사용할 수 있다.

 

참고: 혹시 mysql을 사용한다면 네이티브 바인딩(mysql gem)을 사용하기를 권장한다. 혹시 mysql 젬 설치에 문제가 발생한다면 Troubleshooting 페이지를 참조하기 바란다. mysql.com에서 배포하는 바이너리와 mysql 젬사이에 호환성 문제가 남아있다.

 

루비 코코아

01 코코아와의 만남 - 난수 생성 애플리케이션에서 이전 버전에서 루비 코코아를 설치하는 방법을 이야기한 적 있는데, 글은 쉽게 적혀있지만 만만치않은 작업이었고 시간도 꽤 걸렸다. 그런데 이제 Leopard에서는 루비 코코아가 내장되어 있다. 가장 좋은 점은 Leopard용 애플리케이션을 루비로 개발했을 때 '배포시의 어려움'이란 것이 거의 사라졌다는 점이다. 

 

터미널을 열고 아래 명령을 실행해보자

 

  1. ruby -rosx/cocoa -e "OSX::NSSpeechSynthesizer.alloc.initWithVoice('com.apple.speech.synthesis.voice.Alex').startSpeakingString('Hello, Leopard!');sleep(3)"

 

Leopard에 새로 추가된 Alex의 목소리를 들을 수 있다.

 

XCode 3.0

Leopard와 함께 XCode도 3.0으로 업데이트되었다. 이 버전에는 루비 코코아 코드 탬플릿이 내장되어 있어, 새로운 프로젝트를 시작할 때 선택할 수 있다. 그리고 편집기에서도 루비 지원이 추가되어, 간단한 문법 강조(Syntax Highliting)와 자동 완성 기능의 혜택을 받을 수 있게 되었다. 아래 그림은 실제 자동완성이 일어나는 화면이다.

 

그림_2.png

 

놀라운 변화가 보이는 곳은 바로 UI 디자인 툴인 인터페이스 빌더다. 먼저 완전히 달라진 인터페이스가 심상치 않다. 잠깐 사용해봤을 뿐이지만, 꽤 많이 편해진 것 같다. 특히 아웃렛, 액션을 지정하는 부분에 마우스 오픈쪽 버튼 클릭을 적용해 좀 더 직관적으로 변화했다.

 

그리고 드디어 루비 코드를 자동 생성해준다. 미리 정의한 루비 파일을 인터페이스 빌더로 가져오는 것도 가능하다. 물론 동기화도 지원한다. 인터페이스 빌더에서 가장 아쉬웠던 부분인데, 해결된 것이다.

 

그림_3.png

 

XCode에 대한 자세한 리뷰는 전문가인 Jenix님의 기다려보자 :)

 

Scripting Bridge

이제 개발자에게는 더 어렵다는 애플 스크립트를 배우는 대신 루비를 이용해 기존 애플리케이션을 제어하는 스크립트를 작성할 수 있다. Scripting Bridge 덕분이다.

 

applescript/features/gfx/scriptingbridge.jpg

 

아래 예제는 이 기능을 이용해 현재 iTunes에서 재생중인 곡명을 출력하는 예제이다(그림 및 예제 출처: AppleScript: Scripting Bridge)

 

  1. irb(main):001:0> require 'osx/cocoa'
    => true
    irb(main):002:0> OSX.require_framework('ScriptingBridge')
    => true
    irb(main):003:0> puts OSX::SBApplication.applicationWithBundleIdentifier('com.apple.iTunes').currentTrack.name
  2. 03 Tell Me
    => nil

 

DTrace

DTrace is a comprehensive dynamic tracing framework for the Solaris Operating Environment. DTrace provides a powerful infrastructure to permit administrators, developers, and service personnel to concisely answer arbitrary questions about the behavior of the operating system and user programs.  - Ruby DTrace

 

Joyent의 노력으로 루비 프로그램도 DTrace를 활용해 상태를 추적할 수 있게 되었다. 그리고 Leopard에 이 기능이 추가되었다. Instruments라는 멋져보이는 툴도 함께 제공된다. 루비의 경우는 function-entry, function-return, gc-begin, gc-end, line, object-create-done, object-create-start, object-free, raise, rescue, ruby-probe 등을 확인할 수 있다.

 

아직 DTrace를 유용하게 사용한 경험이 없어서 더 자세한 내용은 적지 못하겠다. 조금 더 써보고 경험담을 정리할 생각이다.

 

지금까지 적은 내용을 한줄로 요약하면: Leopard는 최고의 루비 개발환경이다!

 

 

 

 참고 자료

 

 

 

14 Responses to “루비, Leopard를 만나다”

  1. Jenix Says:
    (myRuby.net) 으악..!! 멋진 루비 레퍼드 리뷰입니다. 짝짝짝 Xcode 뜯어보기에 더 집중을 해야겠습니다 _ ;
  2. “mithrandir”:tisphie.net Says:
    (myRuby.net) 맥북 사줘요 흑흑 (…) 그나저나 요새 (진짜로) 정신이 없어서 아직도 준비 못하고 있어요;; 12월로 미뤄지다가 잘하면 내년이 될지도 (…)
  3. 신군 Says:
    오홋 Scripting Bridge ……………………………………………………. 멋지다. 최고다. 신난다.
  4. 신군 Says:
    그러나 인스톨은 내일..
  5. 아샬 Says:
    우와, 이거 진심으로 맥을 지르지 않으면 안 될 분위기가 되는군요 :)
  6. 꼬루미 Says:
    Java 6 안들어가서 삐졌어요 ㅋ 타임머신덕에 외장하드도 하나 지르고 출혈이 큽니다. 그러나 인스톨은 언제할런지 흑흑 T..T
  7. 꼬루미 Says:
    어라 - 그러고보니 ZenTest 젬이 하는 역할은 무어지요? 이번 컨퍼런스에서 ZenTest라는 회사 사장님이 10가지 테스트 자동화이슈라는 세션을 진행해서 알게된 이름인데 루비젬으로 있네요 ㅎㅎ 단지 같은 이름인지 검색해봐야 겠네요.
  8. 꼬루미 Says:
    작성하고 검색해보니 관련없는 회사와 제품이네요. 낙장불입이군요.
  9. deepblue Says:
    Jenix// Xcode 많이 좋아진 것 같아요~ 설명해주세요 ^^;;
  10. deepblue Says:
    mithrandir// ㅎㅎ 맥북 사도 Leopard 안 쓸꺼잖아요.. 아 같이 준비해요~ 같이 준비해요~
  11. deepblue Says:
    신군// 쪼꼬렛은 언제?
  12. deepblue Says:
    아샬// 그러게요 ^^;
  13. deepblue Says:
    꼬루미// 아 같은 이름의 젬이 있나보군요! 제가 말하는 ZenTest는 루비 테스팅을 도와주는 툴 모음이예요. autotest는 매일 쓰고 있어요~
  14. “humbroll”:humbroll.com Says:
    (myRuby.net) 지금 설치하고 있어요~ ㅎㅎㅎㅎ 맥북프로가 아니라 걱정이지만 그래도.. ㅎㅎ

Leave a Reply

Website

Email