DNA 포럼 API 서비스 모음 DNA Lens

RailsConf2007 둘째날: DHH 키노트

May 20th, 2007 by dante

키노트중

RailsConf2007 둘째날입니다. 기대되는 키노트와 세션이 몰려있는 날이라서 흥분됩니다. 오프닝과 키노트를 들으러 일찌감치 식사를 마치고, 앞에서 3번째 줄에 앉았습니다. 맨 앞줄에 쟁쟁한 분들이 앉아 있고, DHH가 제 바로 앞의 앞자리에 앉아있습니다. 뒷모습마저 멋지군요.

오프닝: Chad Fowler

Chad Fowler

Chad Fowler는 레일스 커뮤니티의 성공을 자축하면서, 그 주된 성공의 요인으로 레일스 커뮤니티의 훌륭한 정신을 꼽았습니다. 레일스 커뮤니티는 뛰어난 생산성의 루비와 레일스로 실질적으로 세상을 바꾸어왔다고 말합니다. 초창기의 루비컨퍼런스에서도 필요하다고 생각한 기능을 그 자리에서 구현해내어 컨퍼런스 기간중에 완성해내는 실행력을 보여주었으며, 그런 실용적인 생산성을 바탕으로 계속해서 우리가 직접 세상에 변화를 보여주자고 말합니다.

키노트: David Heinemeier Hansson

DHH

Rich Kilmer의 소개로 DHH(David Heinemeier Hansson)의 키노트가 시작됩니다. 올해에는 어떤 내용으로 한 획을 그을까 기대하며 들었습니다. 먼저 레일스의 성공과 그 증거를 보이며 자축했습니다. (다른데서 보는 시각은 어떤지 모르겠지만, 레일스 컨퍼런스의 분위기는 이미 성공을 자축하는 분위기입니다)

우선 작년의 레일스 컨퍼런스에서 소개한 ActiveResource의 실험이 성공했다고 선언했으며, 더이상 ActiveResource를 쓰지 않을 이유가 없다고 말합니다. 조금더 개선한 모습의 ActiveResource 사용방법을 라이브코딩으로 보여주었습니다. 라이브코딩은 자칫하면 지루해지거나 중단될 수 있는데, 아주 부드럽고 재미있게 진행했습니다. 중간에 살짝 막히는 부분에서는 귀여운 모습의 재치를 발휘하기도 했습니다.

이어서 Rails 2.0의 아홉가지 새로운 주요기능을 발표했습니다. 현재 최신 안정버전인 Rails 1.2.3기준에서는 새롭지만, 이미 현재 Rails Edge버전 에서 95% 이상 돌고 있는 실질적인 기능입니다.

debugger

레일스는 개발서버에 “breakpoint”를 걸어놓고 “script/breakpointer” 스크립트로 연결해서 (내부적으로 drb사용) 디버깅할 수 있습니다. 2.0에서는 debugger가 도입되고, 이는 개발서버가 debugger문을 만나면, 서버 콘솔에 바로 rdb디버거가 열려서, 디버깅 세션을 시작할 수 있습니다. 기존의 디버깅 작업도 놀랍도록 유용하고 편리하다고 생각했는데, debugger는 한발 더 나아가는군요. 이 유용한 기능은 짧은 글로 설명할 수 없음이 아쉽습니다.

HTTP 성능개선

HTTP 성능개선 관련해 두가지 기능이 추가되었습니다.

첫번째로, js와 css파일 하나로 합치는 기능입니다.

개발시에는 자바스크립트나 스타일시트를 여러개의 파일로 나누어 관리하다가, 실서비스에 배포할 때에 하나의 파일로 합쳐서 배포하는등의 작업을 하는 경우가 많을텐데요, javascript_include_tag와 stylesheet_link_tag 헬퍼메소드에 하나로 합쳐서 캐싱처리해주는 기능이 추가되었습니다.

<%= javascript_include_tag :all, :cache => true %>
<%= stylesheet_link_tag :all, :cache => true %>

“/javascripts/*.js” 와 “/stylsheets/*.css” 가 “/javascripts/all.js”와 “/stylesheets/all.css”로 합쳐져 캐싱처리됩니다.

즉, 배포 작업시 하나의 파일로 합치는 스크립트 처리등의 불편한 작업이 필요 없어집니다.

두번째로는, 자바스크립트나 스타일시트나 이미지파일등의 asset서버를 위한 편의기능입니다.

웹브라우저에서 같은 호스트명의 웹서버에게 최대 한번에 두개까지의 HTTP connection을 열어서 사용합니다. (이거 HTTP 스펙에 있는 내용인가요?). 한페이지를 로딩해는데 js, css파일이나 이미지 파일등 동시에 여러파일을 받아갈 수 있도록 하기 위해, 호스트명을 다르게 처리하는 경우가 있습니다.

예를들어, 물리적으로 하나의 서버라고 하더라도 (실제로 독립적인 서버일 수도 있겠습니다만)

http://fs0.cool.daum.net/stylesheets/cool.css
http://fs1.cool.daum.net/javascripts/fantastic.js
http://fs2.cool.daum.net/images/so_smart.png
http://fs3.cool.daum.net/images/happy_railing.jpg

위의 URL에서처럼 호스트명을 다르게 처리할 수 있는데, 이럴 때 편리하게 쓸 수 있도록

config.action_controller.asset_host = “http://fs%d.cool.daum.net”

처럼 선언해 놓으면, 뷰(view)에서 해당 리소스의 url을 만들 때, hash값을 4로 나눈 나머지로, fs0 ~ fs3까지 나누어 출력해주어서, 클라이언트가 골고루 요청할 수 있도록 해줍니다.

예를 들면, 아래의 헬퍼메소드(helper method)가

<%= image_tag “so_smart.png” %>
<%= image_tag “happy_railing.png” %>

아래의 결과를 보이는거죠.

<img src=”http://fs1.cool.daum.net/images/so_smart.png” />
<img src=”http://fs3.cool.daum.net/images/happy_railing.png” />

이 역시 별것 아니지만, 편리한 기능입니다.

쿼리 캐쉬 (Query Cache)

ActiveRecord에 쿼리캐쉬가 추가되었는데,

ActiveRecord::Base.cache do … end

위의 블럭에 묶어서 사용한다고 합니다. 어디에 캐시데이타를 관리하며 어떤 로직으로 캐싱데이타를 expire하는지는 자료가 나오는대로 자세히 봐야겠습니다.

action.mime_type.renderer

ActiveController의 respond_to 처리시, HTTP 클라이언트가 요청한 mime-type에 따라 결과의 content-type을 기본지정하고, 템플릿파일에 사용할 렌더러(renderer)를 명시적으로 표시하는 파일명을 사용합니다.

views/people/index.html.erb
views/peopel/index.xml.builder
views/people/index.rss.erb
views/people/index.atom.builder

ERb나, XML builder 렌더러를 명시적으로 지정해주는 것입니다. 참고로 기존에는 rhtml, rxml이라고 썼습니다.

간단한 초기화 설정환경

레일스 초기화시에 initializers 디렉토리의 모든 루비파일을 읽어들입니다. 별도로 초기화 코드를 넣는 불편함 없이 파일만 준비해 놓으면 됩니다. Convention over Configuration의 영역은 점점 넓어지고 있습니다.

섹시 마이그레이션 (Sexy Migration)

데이타베이스 스키마 생성/변경작업에 매력적인 액티브마이그레이션(ActiveMigration)의 DSL(Domain-Specific Languate)구문이 더 섹시(sexy)하게 바뀌었습니다.

person 모델을 위해 people 테이블을 만드는데 integer타입의 account_id 컬럼과 datetime타입의 created_at 컬럼을 추가한다고 하면,

기존의 마이그레이션 코드는 아래와 같고

create_table :people do |t|
   t.column :account_id, :integer
   t.column :created_at, :datetime
end

섹시 마이그레이션 코드는 아래처럼 바뀝니다.

create_table :people do |t|
   t.integer :acount_id
   t.datetime :created_at
end

어차피 create_table 블럭 안에서는 컬럼을 정의하는 일이 전부니까 보다 표현적인 DSL로 처리하겠다는 맘에드는 모양이긴 합니다만, 내용보다 이름이 더 거창하군요. ^^

HTTP 인증처리

액션컨트롤러(ActionController)에서 HTTP 인증(authentication)을 처리하기 편리한 기능이 들어갑니다. 사실 HTTP인증은 사용자 웹브라우저를 위해서는 거의 쓰이지 않지만, HTTP기반의 API를 위해서는 꽤 유용하게 사용할 수 있습니다. 추가된 기능해서는 클라이언트가 요청한 mime-type에 따라 다른 인증루틴을 태우기 편리한 기능도 있습니다.

그외에도 MIT 라이센스 기본 지정, Spring cleaning이라는 주제로 추가 기능을 설명하며 키노트 발표를 마치자, 열화와 같은 성원의 박수갈채를 받았습니다.

마무리

DHH가 발표중에 말했듯이, Rails 2.0은 완전히 새로운 환상(발표중에는 유니콘에 비유)이라기 보다는, 끊임 없이 빠르게 발전하는 레일스의 모습 그대로이자 현실인거 같습니다.

귀국하면, 지금 개발중인 프로젝트를 Edge버전으로 해보자고 팀원들과 얘기해봐야겠습니다. ^^

“RailsConf2007 둘째날: DHH 키노트”에 대한 여러분의 생각 - 3 개

  1. 테이_ble:

    잘읽었습니다~

  2. Daum 개발자 네트워크 » Blog Archive » RailsConf2007 둘째날: “Clean Code”:

    […] « RailsConf2007 둘째날: DHH 키노트 […]

  3. taskin:

    저도~~ 잘읽었습니다~

답글을 남겨 주세요