지난주 Rails 4.2의 첫 번째 베타 버전이 발표되었고, 이미 그 완성도가 인상적이라는 평가를 받고 있습니다. ActiveJob, Web Console, Adequate Record, 외래 키(Foreign Key) 지원 같은 새로운 기능들을 직접 앱에 활용할 수 있다는 점에서 기대감이 큽니다.
하지만 Rails의 진짜 매력은 바로 디테일에 있습니다. 조금만 깊이 들여다보면 잘 홍보되지 않았지만, 일상적인 Rails 개발 작업을 한층 편안하게 만들어 주는 숨은 기능들을 발견할 수 있습니다.
설정 파일 손쉽게 불러오기
솔직히 말하면 제가 약간 편향되어 있을지도 모릅니다. 하지만 설정 파일을 불러올 수 있는 내장 방식이 생겼다는 사실은 정말 반가운 변화입니다.
Rails 4.2에 새로 추가된 config_for는 여러분이 기대하는 그대로 동작합니다:
development:
host: localhost
port: 6379
test:
host: localhost
port: 6379
production:
host: redis-production
port: 6379
irb(main):001:0> Rails.application.config_for(:redis)
=> {"host"=>"localhost", "port"=>6379}
즉, config_for(:redis)를 호출하면 Rails 앱 내의 config/redis.yml 파일을 찾아 파싱한 뒤, 현재 RAILS_ENV 환경에 맞는 올바른 설정값을 반환합니다.
심지어 YAML 안에 ERB 코드까지 넣을 수 있습니다:
development:
host: localhost
port: <%= ENV['REDIS_PORT'] %>
test:
host: localhost
port: <%= ENV['REDIS_PORT'] %>
production:
host: redis-production
port: <%= ENV['REDIS_PORT'] %>
$ REDIS_PORT=6380 bin/rails c
Loading development environment (Rails 4.2.0.beta1)
irb(main):001:0> Rails.application.config_for(:redis)
=> {"host"=>"localhost", "port"=>6380}
앱에서 다양한 서비스를 설정해야 하는 경우가 많다면, 이 기능 하나만으로도 초기화(initializer) 코드가 훨씬 깔끔하고 읽기 쉬워질 것입니다.
앱 부트스트랩하기
대부분의 Rails 앱은 실제로 사용해 보기 전에 몇 가지 명령어를 먼저 실행해야 합니다. 거의 비어 있는 상태의 Rails 앱이라도 부팅 전에는 데이터베이스를 미리 준비해야 하죠.
그래서 Rails는 언제나처럼 "설정보다 관례(Convention over Configuration)" 원칙을 따라, 초기 설정 코드를 위한 전용 공간인 bin/setup을 마련했습니다.
기본으로 제공되는 스크립트만으로도 충분히 훌륭합니다. 게다가 bin/setup은 앱을 시작하기 위해 필요한 나머지 코드들을 담아두는 자연스러운 위치이기도 합니다.
이제 이것이 표준 관례가 되었으니, 이미 만들어 둔 부트스트랩 스크립트가 있다면 파일명을 bin/setup으로 바꿔주세요. 그러면 앱을 사용하는 사람들이 훨씬 쉽게 시작할 수 있습니다.
bin/setup 덕분에 새 Rails 앱을 생성할 때마다 고민해야 할 결정이 하나 줄어듭니다. 그리고 git pull 후에 bin/setup을 실행하는 습관이 들면, 새 프로젝트마다 rake db:setup을 실행해야 한다는 사실을 굳이 기억할 필요조차 없어집니다.
해시 값 변환하기
Ruby에 내장되어 있으면 좋겠다고 자주 느꼈던 기능입니다. 해시에 transform_values를 호출하면 해시의 각 값에 map을 적용하는 것과 같은 효과를 내며, 원래 키와 변경된 값을 연결한 새로운 해시를 반환합니다:
h = {a: 1, b: 2, c: 3}
h.transform_values { |v| v * 2 } # => {a: 2, b: 4, c: 6}
매우 단순한 기능이지만, 의외로 실무에서 자주 유용하게 쓰입니다.
보너스: 더 많은 설정 옵션!
Rails 4.2는 자신만의 전역 설정을 정의할 수 있는 간단한 방법도 제공합니다:
Rails.application.config.x.some_configuration_key = "Some Value"
Rails.application.config.x.some_configuration_key # => "Some Value"
Rails.configuration.x.some_configuration_key # => "Some Value"
특히 config_for와 함께 사용하면 그 진가가 드러납니다:
app_config = Rails.application.config_for(:app)
Rails.application.config.x.block_phone_calls = app_config["block_phone_calls"]
아직 더 남아 있습니다!
Rails 4.2는 훌륭한 릴리스가 될 준비가 된 것으로 보입니다. 하지만 Rails를 매일 사용하는 즐거움을 만들어 주는 것은 바로 이런 사소한 개선점들이죠. 아직 확인하지 않으셨다면 4.2 릴리스 노트를 가볍게 훑어보면서, 또 어떤 유용한 개선 사항이 숨어 있는지 직접 찾아보시길 추천합니다.
(혹시 멋진 기능을 발견하셨다면, 혼자만 알고 계시지 말고 여기에 공유해 주세요. 우리 모두 함께 새로운 것을 배울 수 있으니까요!)