ERuby
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
eRuby는 `<%`와 `%>` 구분자 안에 루비 코드를 포함하여 웹 템플릿을 동적으로 생성하는 기술이다. 표현식, 실행, 주석 태그를 포함한 다양한 태그를 지원하며, HTML 파일 내에서 루비 코드를 실행하고, PHP와 유사한 방식으로 작동한다. ERB, Erubis, Erubi, Ember 등 여러 구현체가 존재하며, 각각 속도, 기능, 태그 지원 방식에 차이가 있다.
더 읽어볼만한 페이지
- 루비 (프로그래밍 언어) - 마츠모토 유키히로
마츠모토 유키히로는 루비 프로그래밍 언어를 창시하고 주요 개발자로 활동하며 MRI, mruby, streem 등 다양한 프로그래밍 언어 및 관련 기술 개발에 기여한 인물로, 오픈소스 소프트웨어 커뮤니티에 대한 공헌과 루비 온 레일즈의 성공으로 세계적인 인정을 받았다. - 루비 (프로그래밍 언어) - 루비포지
루비포지는 루비 센트럴이 운영하며 오픈 소스 루비 언어 관련 홍보를 지원하는 웹사이트였으나, 2014년 5월 15일에 서비스가 종료되었다. - 자유 라이브러리 - Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. - 자유 라이브러리 - SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다.
| ERuby - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 장르 | 템플릿 엔진 |
| 라이선스 | BSD 2-Clause License |
| 프로그래밍 언어 | Ruby |
| 개발 | |
| 저장소 | GitHub 저장소 |
| 출시 | |
| 최신 버전 | 1.0.5 |
| 출시일 | 2004년 12월 14일 |
| 기타 | |
2. 사용법
eRuby는 <%와 %> 구분자 쌍 안에 루비 코드를 포함하여 사용할 수 있게 해준다. 이렇게 포함된 코드 블록은 제자리에서 평가되어 그 결과로 대체된다. eRuby는 웹 페이지뿐만 아니라 XML, RSS 피드 등 구조화된 텍스트 파일을 만드는 데에도 사용될 수 있다. eRuby는 템플릿을 기반으로 정적 파일을 동적으로 생성하며, 이 기능은 ERB 라이브러리에서 찾을 수 있다.[2]
과거 Ruby에서 CGI 등을 작성할 때 HTML 부분을 기술하려면 `print` (혹은 `puts`)를 사용해야 했다. 그러나 HTML 태그를 쓸 때마다 `print` 문을 기술하는 것은 매우 번거롭고, 수정 시에도 많은 노력이 필요했다. 또한 이 방식으로는 CGI나 WEB 애플리케이션을 만들 때 프로그래머와 WEB 디자이너의 분리가 어렵고, Dreamweaver 등의 WEB 오서링 툴 이용도 불가능했다.
이러한 문제를 해결하기 위해 고안된 것이 HTML 내장형 처리계인 PHP와 비슷한 문법으로, HTML에 Ruby 문을 내장하는 구현 방식이다. 이것이 바로 eRuby이다. HTML 파일 안에 `<%...%>` (혹은 `<%=...%>`) 기호로 둘러싸인 공간이 있으면, 그 부분을 Ruby 코드로 인식한다. (`<%=...%>`는 `<% print ... %>`의 생략형이다)
```html
<% Ruby 코드1 %>
<% Ruby 코드2 %>
<% Ruby 코드3 %>
```
위와 같이 `<%...%>`로 기술된 부분에서 Ruby 명령이 실행 가능하다. 그 외의 장소에서는 일반적인 HTML 문이 표시되며, PHP와 비슷한 기술이 가능하다.
2. 1. 표현식 태그
`<%= %>` 태그는 표현식을 묶는 데 사용된다. 이 태그는 HTML 여는 태그 구분 기호로 시작하고 등호(=)가 뒤따르며, 닫는 태그 구분자로 끝난다. 템플릿이 렌더링될 때 이 코드는 해당 코드 실행 결과로 대체된다. 평가된 결과가 문자열이 아니면 렌더링 전에 문자열로 변환된다. 예를 들면 다음과 같다.```ruby
require 'erb'
x = 500
template = ERB.new("The value of x is: <%= x %>")
puts template.result(binding)
```
결과는 다음과 같다.
```text
The value of x is: 500
```[1]
HTML 파일 안에서 `<%...%>` (또는 `<%=...%>`, `<%=...%>`는 `<% print ... %>`의 생략형이다) 기호로 둘러싸인 부분은 Ruby 코드가 쓰인 부분으로 인식된다.
```html
<% Ruby 코드1 %>
<% Ruby 코드2 %>
<% Ruby 코드3 %>
```
위와 같이 `<%...%>`로 기술된 부분에서 Ruby 명령이 실행 가능하다. 그 외의 부분에서는 일반적인 HTML 문이 표시되며, PHP와 비슷한 기술이 가능하다.
2. 2. 실행 태그
`<% %>` 태그는 루비 코드를 실행하지만, 결과를 출력하지 않는다. 이 태그로 둘러싸인 코드를 스크립틀릿이라고 한다. `<% end %>` 태그는 기능 블록의 끝을 나타낸다.[3]예시:
```rhtml
- 목록 항목
<% 4.times do %>
<% end %>
```
위의 예시에서 "목록 항목" 텍스트는 네 번 출력된다. 스크립틀릿은 자체적으로 텍스트를 생성하지 않고, 포함된 문장을 여러 번 실행하게 한다.
HTML 파일 안에 `<%...%>` (혹은 `<%=...%>`, `<%=...%>`는 `<% print ... %>`의 생략형이다) 기호로 둘러싸인 부분은 Ruby 코드로 인식되어 실행된다. 그 외의 부분에서는 일반적인 HTML 문이 표시된다. 이는 PHP와 비슷한 기술 방식이다.
2. 3. 주석 태그
`< %# %>`는 주석을 추가하는 태그이다. 주석 태그의 내용은 출력 시 렌더링되지 않는다.[4] 이러한 태그는 열린 태그 구분 기호, 해시 기호, 닫힌 태그 구분 기호로 시작한다.[4]```html
<%# ruby code %>
```
이는 Ruby의 주석과 동일하다. `#` 뒤의 모든 Ruby 코드는 무시되며 아무것도 생성하지 않는다.[4]
2. 4. 기타 태그
`#{}`는 문자열 내에서 변수 값을 치환하는 데 사용된다. 이는 Perl, PHP 등에서도 유사하게 사용되는 방식이다.[1]eRuby에서 줄바꿈은 닫는 태그 구분자 앞에 하이픈(`-`)을 추가하여 억제할 수 있다. 예를 들어 다음과 같다.
```erb
<% 2.times do -%>
<%= @name %>
<% end -%>
```
위 코드에서 `@name`의 값은 같은 줄에 두 번 출력된다.[1][2]
3. 구현체
eRuby는 HTML에 Ruby 문을 내장하는 구현 방식으로, PHP와 비슷하다. 과거 Ruby에서 CGI 등을 작성할 때 HTML 부분을 `print`나 `puts`로 기술해야 했는데, 이는 매우 번거롭고 수정도 어려웠다. 또한 프로그래머와 WEB 디자이너 간 분업이 어렵고, Dreamweaver 같은 WEB 오서링 툴 사용도 불가능했다. 이러한 문제를 해결하고자 eRuby가 고안되었다.
eRuby는 다양한 구현체가 존재한다.
- ERB: 루비 표준 라이브러리이다.
- [https://github.com/kwatch/erubis Erubis]: ERB보다 빠르며, Ruby on Rails 5.0까지 채용되었다.
- [https://github.com/jeremyevans/erubi Erubi]: Erubis보다 빠르며, Ruby on Rails 5.1 이후 채용되었다.[8]
3. 1. ERB
'''ERB'''는 루비 프로그래밍 언어로 작성되어 루비 표준 라이브러리에 포함된 eRuby의 구현체이다.[5]ERB 객체를 사용하여 코드 조각을 실행하여 템플릿을 생성할 수 있다. 다음은 간단한 예시이다.
```ruby
require 'erb'
x = 400
simple_template = "x의 값은: <%= x %>."
renderer = ERB.new(simple_template)
puts output = renderer.result(binding)
```
결과는 "x의 값은: 400" 이다.
위의 코드는 x 변수가 선언되기 전에 템플릿을 정의해도 정상적으로 작동한다. 이는 ERB 객체를 사용하는 주된 이유 중 하나로, 주어진 시점에 존재하지 않을 수 있는 변수와 메서드를 ''바인딩''하여 템플릿을 미리 작성할 수 있기 때문이다. 템플릿은 ERB 객체에서 `result`가 호출될 때만 처리된다.
ERB는 객체의 인스턴스 메서드 및 인스턴스 변수에 접근하기 위해 ''binding'' 객체를 사용한다. 클래스의 메서드 내에서 메서드와 변수에 접근하는 것은 쉽지만, 다른 클래스의 변수에 접근하려면 해당 클래스가 공개 메서드를 통해 바인딩 객체를 노출해야 한다.[5][3]
Ruby의 표준 첨부 라이브러리인 ERB 외에도, 다른 ERB 구현이 존재한다.
- [https://github.com/kwatch/erubis Erubis]: ERB보다 빠른 속도를 특징으로 한다. Ruby on Rails 5.0까지 채용되었다.
- [https://github.com/jeremyevans/erubi Erubi]: Erubis보다 빠른 속도를 특징으로 한다. Ruby on Rails 5.1 이후 채용되었다.[8]
3. 1. 1. ERB.new() 메서드
`ERB.new(template, trim_mode=nil, eoutvar='_erbout')` 형태로 사용한다.`ERB.new` 메서드는 추가적으로 두 개의 매개변수를 더 받을 수 있다.
두 번째 매개변수는 안전 수준을 지정하며, 숫자(최대값 = 4)를 지정하여 템플릿을 다른 스레드에서 실행할 수 있도록 한다. 숫자의 값은 안전 수준을 결정하며, 최대 격리 수준에서는 바인딩 객체가 신뢰할 수 있는 것으로 표시되지 않으면 ERB가 이를 사용할 수 없다.[2][3]
세 번째 매개변수는 선택적 수정자로, 출력에 줄 바꿈을 추가하는 것을 제어하는 데 사용될 수 있다. 예를 들어, ERB가 태그 끝 다음에 줄 바꿈을 출력하지 않도록 하려면 다음과 같이 ERB 객체를 생성할 수 있다.[2][3]
```ruby
renderer = ERB.new(template, 3, '>')
```
세 번째 매개변수만 제공하고 두 번째 매개변수를 무시하려면 두 번째 매개변수의 입력으로 0을 사용한다.
3. 1. 2. 명령줄에서 ERB 실행
erb는 템플릿을 생성하는 데 사용되며, 웹 페이지나 기타 텍스트 파일을 만드는 데 자주 쓰인다. 일반적으로 erb의 출력물은 사용자가 원하는 파일로 보내야 한다. 이를 위해 명령줄에서 제공하는 리디렉션 기능을 사용하여 표준 출력 대신 파일로 리디렉션할 수 있다.[2]```sh
erb sample1.erb.txt > my_view.html.erb
```
위 예에서 출력은 ''my_view.html.erb'' 파일로 리디렉션된다.
타사 라이브러리를 연결하려면 -r 옵션과 함께 라이브러리 이름을 지정하면 된다. 이 기능은 루비 키워드 ''[http://apidock.com/ruby/Kernel/require require]''와 동일한 기능을 수행하므로 이를 기억하면 도움이 된다. 아래 예에서는 [http://ruby-doc.org/stdlib-1.9.3/libdoc/ipaddr/rdoc/IPAddr.html IPAddr] 라이브러리를 사용한다.
```sh
erb -r IPAddr sample1.txt.erb > my_view.html.erb
```
이전 섹션에서 언급한 ''안전 수준''은 -S 옵션을 사용하여 명령줄 인수로 지정할 수 있다.[2]
```sh
erb -S 4 sample1.erb.txt > my_view.html.erb
3. 2. Erubis
Erubis는 ERB보다 빠른 eRuby 구현체이다. Ruby on Rails 5.0까지 채택되었다.[8] 유효한 XML을 허용하는 대체 태그를 지원한다.3. 3. Erubi
Erubis보다 빠른 eRuby 구현체이다. Ruby on Rails 5.1 이후 채택되었다[8].3. 4. Ember
리눅스용 eRuby의 순수 루비 구현체이다. eRuby 템플릿의 디버깅을 허용하고, 구성 가능성을 개선하며, 강력한 속기 eRuby 지시어를 제공한다.[1]4. 구현체별 태그 비교
다음 표는 위에 언급된 각 구현에서 사용 가능한 태그를 비교한 것이다.[3][6][7]
| 구현 | 단순 표현 태그 | 단순 실행 태그 | 단순 주석 태그 | 태그 패턴 구성 능력 | 태그를 위한 간편 표기법 | <%>> | |||
|---|---|---|---|---|---|---|---|---|---|
| erb | , %xy로 작성될 수 있다. | ||||||||
| erubis | , 태그 패턴을 무엇이든 변경할 수 있다. | , 태그 패턴을 변경할 수 있다. | |||||||
| ember | , %xy로 작성될 수 있다. | 태그의 내용은 eRuby 템플릿으로 평가된다. | 태그의 내용은 Ruby 코드로 평가되며 읽고, 평가하고, 렌더링되는 Ruby 템플릿 파일을 가리키는 경로로 예상된다. | 포함된 코드를 Ruby 코드 블록으로 처리하고 (필요한 경우) 태그 본문에 do 키워드를 추가한다. |
참조
[1]
서적
Ruby Best Practices
https://archive.org/[...]
O'Reilly
[2]
웹사이트
An Introduction to ERB Templating
http://www.stuartell[...]
2016-07-01
[3]
웹사이트
ERB
http://ruby-doc.org/[...]
2015-02-23
[4]
웹사이트
ERB – Ruby Templating
http://apidock.com/r[...]
2016
[5]
서적
Agile Web Development with Rails
The Pragmatic Programmers
[6]
웹사이트
ember(1)
http://snk.tuxfamily[...]
2011-06-29
[7]
웹사이트
Erubis
http://www.kuwata-la[...]
2011
[8]
웹사이트
Ruby on Rails 5.1リリースノート
https://railsguides.[...]
2018-06-16
[9]
서적
Ruby Best Practices
https://archive.org/[...]
O'Reilly
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com