Skip to content

Commit 15e22a6

Browse files
riseshiamarocchino
andauthored
Translate "Ruby 3.2.0 Preview 1 Released" to ko (#2817)
* cp {en,ko}/news/_posts/2022-04-03-ruby-3-2-0-preview1-released.md * Translate "Ruby 3.2.0 Preview 1 Released" to ko * Remove original text * Revive empty line * Refine translation Co-authored-by: marocchino <marocchino@users.noreply.github.com> Co-authored-by: marocchino <marocchino@users.noreply.github.com>
1 parent 3e48f3c commit 15e22a6

File tree

1 file changed

+178
-0
lines changed

1 file changed

+178
-0
lines changed
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.2.0 Preview 1 릴리스"
4+
author: "naruse"
5+
translator: "shia"
6+
date: 2022-04-03 00:00:00 +0000
7+
lang: ko
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.2.0-preview1" | first %}
11+
12+
Ruby {{ release.version }} 릴리스를 알리게 되어 기쁩니다. Ruby 3.2는 많은 기능과 성능 향상을 포함하고 있습니다.
13+
14+
15+
## WASI 기반 웹어셈블리 지원
16+
17+
WASI에 기반해 웹어셈블리를 지원하는 첫 이식판입니다. 이를 통해 CRuby 바이너리는 웹 브라우저, 서버리스 엣지 환경, 그 이외의 웹어셈블리/WASI를 사용가능한 환경에서 동작할 수 있습니다. 현재 이 이식판은 스레드 API이외의 기본적인 테스트와 부트스트랩 테스트 스위트를 통과합니다.
18+
19+
![](https://i.imgur.com/opCgKy2.png)
20+
21+
### 배경
22+
23+
[웹어셈블리 (WASM)](https://webassembly.org/)는 본래 웹 브라우저에서 프로그램을 안전하고 빠르게 실행하기 위해서 만들어졌습니다. 하지만 그 목적 중 하나인 프로그램을 다양한 환경에서 안전하고 효율적으로 실행하는 것은 웹 뿐만이 아니라 일반적인 애플리케이션도 바라던 것입니다.
24+
25+
[WASI (The WebAssembly System Interface)](https://wasi.dev/)는 이러한 용도를 위해 설계되었습니다. 이러한 애플리케이션은 운영체제와 통신해야합니다만, 웹어셈블리는 시스템 인터페이스를 가지지 않는 가상 머신 위에서 동작합니다. WASI는 이 인터페이스를 표준화합니다.
26+
27+
Ruby의 웹어셈블리/WASI 지원은 이러한 프로젝트들을 활용하기 위함입니다. 이를 통해 Ruby 개발자들이 기대받는 플랫폼에서 움직이는 애플리케이션을 작성할 수 있습니다.
28+
29+
### 사용 예시
30+
31+
이는 개발자가 웹어셈블리 환경에서 CRuby를 활용할 수 있도록 돕습니다. 하나의 예로, [TryRuby playground](https://try.ruby-lang.org/playground/)의 CRuby 지원이 있습니다. 이제 CRuby를 웹 브라우저 상에서 직접 사용해볼 수 있습니다.
32+
33+
### 기술적인 부분
34+
35+
현재 WASI와 웹어셈블리 자체에는 Fiber, 예외 처리, GC를 구현하기 위한 일부 기능이 부족합니다. 이는 여전히 개발중이라는 점도 있지만, 보안때문이기도 합니다. 그래서 CRuby는 유저랜드에서의 실행을 제어하기 위한 바이너리 변환 기술인 Asyncify를 사용해 그 차이를 매꿉니다.
36+
37+
나아가서 Ruby 애플리케이션을 간단하게 단일 .wasm 파일로 패키징할 수 있도록 [WASI 상에 VFS](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby)를 구현했습니다. 이는 Ruby 애플리케이션의 배포를 쉽게 해줄 것입니다.
38+
39+
40+
### 관련 링크
41+
42+
* [Add WASI based WebAssembly support #5407](https://github.com/ruby/ruby/pull/5407)
43+
* [An Update on WebAssembly/WASI Support in Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9)
44+
45+
## 정규표현식 타임아웃
46+
47+
정규표현식 일치 처리에 타임아웃 기능을 도입했습니다.
48+
49+
```ruby
50+
Regexp.timeout = 1.0
51+
52+
/^a*b?a*$/ =~ "a" * 50000 + "x"
53+
#=> 1초 후에 Regexp::TimeoutError
54+
```
55+
56+
정규표현식 일치는 기대와는 다르게 시간이 오래 걸리는 경우가 있습니다. 신뢰할 수 없는 입력에 대해서 비효율적일 가능성이 있는 정규표현식을 일치검사하고 있다면, 공격자는 이를 이용해 효율적으로 서비스 거부 공격(이를 정규표현식 DoS, 또는 ReDoS라고 불립니다)이 가능합니다.
57+
58+
Ruby 애플리케이션의 요구사항에 맞는 `Regexp.timeout`을 설정해 DoS에 대한 위험을 예방하거나 상당히 완화할 수 있습니다. 애플리케이션에 직접 설정해보세요. 피드백도 환영합니다.
59+
60+
`Regexp.timeout`은 전역 설정임에 주의하세요. 일부의 툭수한 정규표현식에 대해서만 다른 타임아웃 설정을 사용하고 싶다면, `Regexp.new``timeout` 키워드를 사용할 수 있습니다.
61+
62+
```ruby
63+
Regexp.timeout = 1.0
64+
65+
# 이 정규표현식은 타임아웃 설정이 없습니다.
66+
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
67+
68+
long_time_re =~ "a" * 50000 + "x" # 타임아웃이 발생하지 않습니다.
69+
```
70+
71+
기능 제안 티켓: https://bugs.ruby-lang.org/issues/17837
72+
73+
74+
## 그 이외의 주목할 만한 새 기능
75+
76+
### 서드파티 소스코드를 더이상 내장하지 않음
77+
78+
* `libyaml`이나 `libffi`와 같은 서드파티의 소스코드를 내장하지 않기로 결정했습니다.
79+
80+
* psych 에 포함되어 있던 libyaml의 소스 코드는 삭제되었습니다. Ubuntu/Debian 환경이라면 직접 `libyaml-dev`를 설치해야합니다. 이 패키지의 이름은 각 환경마다 다를 수 있습니다.
81+
82+
* `fiddle`에 포함되어 있던 libffi는 preview2에서 삭제될 예정입니다.
83+
84+
### 언어
85+
86+
* 검색 패턴은 이제 정식 기능입니다.
87+
88+
89+
## 성능 향상
90+
91+
92+
93+
## 그 이외의 3.1 이후로 주목할 만한 변경
94+
95+
* Hash
96+
* Hash#shift는 이제 해시가 비어있다면
97+
기본 값이나 기본 프록을 호출한 결과값을 반환하는 대신
98+
언제나 nil을 반환합니다. [[Bug #16908]]
99+
100+
* MatchData
101+
* MatchData#byteoffset이 추가되었습니다. [[Feature #13110]]
102+
103+
* Module
104+
* Module.used_refinements가 추가되었습니다. [[Feature #14332]]
105+
* Module#refinements가 추가되었습니다. [[Feature #12737]]
106+
* Module#const_added가 추가되었습니다. [[Feature #17881]]
107+
108+
* Proc
109+
* Proc#dup은 서브클래스의 인스턴스를 반환합니다. [[Bug #17545]]
110+
* Proc#parameters는 이제 람다 키워드를 받습니다. [[Feature #15357]]
111+
112+
* Refinement
113+
* Refinement#refined_class가 추가되었습니다. [[Feature #12737]]
114+
115+
* Set
116+
* Set은 이제 `require "set"`할 필요 없이 사용 가능한 내장 클래스입니다. [[Feature #16989]]
117+
현재는 `Set` 정수를 사용하거나 `Enumerable#to_set`을 호출하면 자동으로 로딩됩니다.
118+
119+
* String
120+
* String#byteindex와 String#byterindex가 추가되었습니다. [[Feature #13110]]
121+
* 유니코드 버전이 14.0.0, 에모지 버전이 14.0으로 갱신되었습니다. [[Feature #18037]]
122+
(이는 정규표현식에도 적용됩니다)
123+
* String#bytesplice가 추가되었습니다. [[Feature #18598]]
124+
125+
* Struct
126+
* `keyword_init: true` 없이 `Struct.new`에 키워드 인수를 넘겨
127+
Struct 클래스를 초기화할 수 있습니다. [[Feature #16806]]
128+
129+
130+
### 표준 라이브러리 갱신
131+
132+
* 다음 기본 젬이 갱신되었습니다.
133+
134+
* TBD
135+
136+
* 다음 내장 젬이 갱신되었습니다.
137+
138+
* TBD
139+
140+
* 다음 기본 gem은 이제 내장 gem이 됩니다. 사용하려면 번들러 환경에서 `Gemfile`에 다음 라이브러리들을 추가해야 합니다.
141+
142+
* TBD
143+
144+
더 자세한 내용은 [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)나
145+
[커밋 로그](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }})를
146+
확인해주세요.
147+
148+
이러한 변경사항에 따라, Ruby 3.1.0 이후로 [파일 {{ release.stats.files_changed }}개 수정, {{ release.stats.insertions }}줄 추가(+), {{ release.stats.deletions }}줄 삭제(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket)가
149+
이루어졌습니다!
150+
151+
## Download
152+
153+
* <{{ release.url.gz }}>
154+
155+
SIZE: {{ release.size.gz }}
156+
SHA1: {{ release.sha1.gz }}
157+
SHA256: {{ release.sha256.gz }}
158+
SHA512: {{ release.sha512.gz }}
159+
160+
* <{{ release.url.xz }}>
161+
162+
SIZE: {{ release.size.xz }}
163+
SHA1: {{ release.sha1.xz }}
164+
SHA256: {{ release.sha256.xz }}
165+
SHA512: {{ release.sha512.xz }}
166+
167+
* <{{ release.url.zip }}>
168+
169+
SIZE: {{ release.size.zip }}
170+
SHA1: {{ release.sha1.zip }}
171+
SHA256: {{ release.sha256.zip }}
172+
SHA512: {{ release.sha512.zip }}
173+
174+
## Ruby는
175+
176+
Ruby는 1993년에 Matz(마츠모토 유키히로) 씨가 처음 개발했고,
177+
현재는 오픈 소스로서 개발되고 있습니다. 여러 플랫폼에서 동작하며,
178+
특히 웹 개발에서 전 세계적으로 이용되고 있습니다.

0 commit comments

Comments
 (0)