기타언어/Ruby2013.11.02 23:38



Ruby와 관련된 작업을 하게 되면 YAML이라는 표멧과 마주하게 된다. 특히 Ruby on Rails에서의 그 쓰임는 정말 다양하다. 설정파일과 데스트 더미 데이터를 표현할 때도 이 YAML을 이용한다.

이쯤되면 YAML이 Ruby만을 위한 표멧이 아닌가 생각을 하게 된다. 자바스크립트의 데이터를 표현하기위해서 JSON 포멧이 만들어진 것처럼 생각을 하게 된다.

하지만 사실은 YAML는 ruby와 크게 관련은 없다. 즉, Ruby를 위해서 특별히 만들어진 것이 아니라는 말이다. 그럼 YAML은 뭘까?

이 문서는 YAML에 대해서 알아보고 그 쓰임에 대해서 다루어 볼 생각이다. 그리고 YAML를 Ruby에서 다루는 방법도 알아볼 것이다.

YAML이란?

YAML는 `YAML Ain’t Markup Language’의 약자이다. 컴퓨터 분야에서는 종종 이름 자체가 정의에 들어가는 기법을 사용하는데 YAML도 그런 식으로 만들었다. 하지만 원래의 뜻은 따로있었다.

`Yet Another Markup Language’( 또 다른 마크업 언어 )가 원래의 뜻이였다. 하지만 마크업이 아닌 데이터가 중심이라는 목적에 충실하기 위해서 말을 바꾸었다고 한다. (참고: YAML in Wikipedia)

YAML는 사람이 읽기 쉽도록 디자인되었다. C, Perl, Python 그리고 XML등의 데이터 표현 방식에서 영향을 받아서 만들어졌다. 처음 YAML는 2001년 클라크 에반스( Clark Evans )가 처음 제안되었다. 이후에 다른 동려들과 스펙을 확정하면서 세상에 나오게 된다.

YAML의 기본 아이디어는 데이터를 리스트, 해쉬 그리고 스칼라 데이터로 표현한다는 것이다. 자세한 방법은 이 글을 마지막 부분에 YAML 표현방법에서 다룰 것이다.

YAML는 Ruby에서 사용하기

현재는 1.2 버전까지 스펙이 공개되었다. 각 언어들은 이 스펙에 따라서 라이브러리를 만들어 공개하고 있다. YAML을 사용하기위해서 적당한 라이브러리를 선택해서 사용하면 된다.

  • (위키피디아 YAML의 Implementations 항목)[http://en.wikipedia.org/wiki/YAML#Implementations]

Ruby에서 YAML를 쉽게 사용할 수 있다. 라이브러리가 기본 라이브러리에 포함되어 있기 때문에 간단히 다음과 같이 사용할 수 있다.

YAML포멧 파일을 Ruby로 로드

Ruby로 파일을 읽기 위해서는 yaml 모듈들 로드해야 한다. 이 모듈에 load 함수를 통해서 파일을 읽어서 객체로 변환할 수 있다.

require "yaml"
data = YAML::load(File.open('<yaml 파일명>'))
puts data.inspect

위 코드는 yaml 파일을 읽어 객체를 만들어 출력하는 코드이다.

Ruby Object를 YAML 저장하기

Ruby에서 대부분은 YAML를 읽어서 사용하는 방법으로 주로 사용한다. 하지만 YAML포멧으로 저장하는 방법도 알아보자.

require 'yaml'
data = { :a => 'b'}
File.new('sss.yml','w').write(data.to_yaml)

데이터를 YAML로 변환하기 위해서 간단한 to_yaml 함수를 사용할 수 있다. to_yaml를 사용하기 위해서 yaml 모듈을 먼저 로드해야 한다.

  • 참고: (YAML 모듈)[http://ruby-doc.org/stdlib–1.9.3/libdoc/yaml/rdoc/YAML.html]

YAML 표현법

이제 YAML로 데이터를 표현하는 방법을 알아보자. YAML는 주로 설정이나 Rails에서 테스트 데이터를 표현하기 위한 용도로 사용한다. 결국 YAML과 관련해서 주로 하게 되는 작업은 YAML 문서를 만들거나 수정하는 것이다.

YAML 표현법으로 간단히 몇가지만 살펴보자.

리스트 표현 방법

데이터를 리스트 방식으로 표현하기 위해서는 `-’를 이용한다.

# in YAML 
- apple 
- banana 
- carrot

# in Ruby
['apple', 'banana', 'carrot']

중복된 리스트는 다음과 같이 표현한다. 내부 리스트는 `-’를 표시하고 이후에 추가한 리스트를 기록한다. 이때 공백을 더 추가해야 한다.

# in YAML
- fruit
-
  - apple
  - banana

# in Ruby
["fruit", ["apple", "banana"]]

해쉬 표현 방법 ——

해쉬 데이터는 키, 값으로 데이터를 표현하는 것으로 Ruby에서는 Hash 객체를 사용한다.

# in YAML
foo: whatever 
bar: stuff

# in Ruby
{ 'foo' => 'whatever', 'bar' => 'stuff' }


# in YAML
foo: whatever 
bar: 
  fruit: apple 
  name: steve 
  sport: baseball

# in Ruby
{ 'foo' => 'whatever',
  'bar' => { 
     'fruit' => 'apple',
     'name' => 'steve',
     'sport' => 'baseball' 
  } 
}

스칼라 데이터 표현

스칼라는 단순 데이터를 말한다. 문자열이나 숫자들로 이런 데이터는 기존의 사용하던 것과 동일하게 표현한다.

 # in YAML
 - My little toe is broken in two places;
 - I'm crazy to have skied this way;

 # in Ruby
 [
   "My little toe is broken in two places;", 
   "I'm crazy to have skied this way;"
 ]

Ruby에서 쓰이는 YAML 표현들

Ruby의 라이브러리는 Ruby의 객체를 표현하기 위한 방법을 제공해주고 있다. YAML로 특정 클래스의 객체로 생성할 수 있다. 다음 예제로 방법을 알아보자.

# in YAML
normal range: !ruby/range 10..20 
exclusive range: !ruby/range 11...20

# in Ruby
{ 'normal range' => (10..20), 
  'exclusive range' => (11...20), 
}

위 예제는 해쉬의 값으로 range 객체를 설정한 것이다. 위 예제처럼 특정 객체로 데이터를 생성하기 위해서는 `!ruby/’를 사용해서 Ruby의 특정 객체의 데이터임을 표시해야 한다.

마무리

지금까지 YAML에 대해서 알아보았다. YAML는 그 쓰임이 다양하다. 특히나 Rails를 사용하고 있다면 YAML는 필수이다. YAML는 쉽게 사용할 수 있다. 간단한 에디터로 파일을 열어서 수정할 수 있다.

YAML에 대한 더 자세한 자료들은 참고 자료를 확인하기 바란다. 공부 방법은 예제를 위주로 살펴보면 쉽게 원하는 데이터를 표현할 수 있는 방법을 찾을 것이다.

참고


'기타언어 > Ruby' 카테고리의 다른 글

YAML과 사용방법  (0) 2013.11.02
[rails#2] 꼭 알아야 하는 Rails 명령들  (4) 2013.08.02
[Rail#1] Rails 연재 시작하며.  (1) 2013.04.27
Nginx를 사용하여 rails를 동작시키기  (1) 2013.04.16
맥에는 Ruby On Rails 설치  (3) 2013.01.27
Posted by icarus icarusforbook