io.js와 Node.js 뉴스 — 8월 7일
io.js v3.0과 좋은 소식 및 비호환 변경, LTS 빌드 v8 메인테이너를 위한 회의.
io.js v3.0 릴리스
이번 주에는 io.js v3.0.0을 릴리스했습니다! 이 주 버전업으로, io.js에 새로운 기능이 추가되었습니다.
- V8을 v4.2에서 v4.4로 업그레이드했습니다. Rod Vagg(@rvagg)가 v4.3과 v4.4의 변경사항을 포함한 Gist를 작성했습니다.
- 계산된 프로퍼티 이름(
{['foo'+'bar']:'bam'}
)을 이제harmony-
플래그 없이 지원합니다. - 유니코드 문자 이스케이프 시퀀스(
\u{xxxxx}
)도 지원합니다. 더는--harmony
옵션이 필요 없습니다. - 지금까지 클래스를 사용할 수 있었지만 내장된 Array 서브클래스는 지원하지 않았고 문제점이 있었습니다. V8의 새 버전에서 이 문제를 해결했습니다.
- 스프레드 연산자(spread operator,
...
)를--es-staging
플래그로 지원합니다. (함수 호출에) 다수의 인자나 (배열 리터럴에) 다수 요소가 필요한 곳에 스프레드 연산자를 사용할 수 있습니다. - 레스트 파라미터(Rest parameters,
function(...args) {}
)도--es-staging
플래그와 함께 사용할 수 있도록 구현되었습니다. - REPL에 히스토리 파일이 추가되었습니다. 지금까지 REPL은
NODE_REPL_HISTORY_FILE
을 지정해야 했지만, 현재 버전에서는 기본적으로 히스토리를 저장할 것입니다. - Buffer는 이제 Uint8Array의 서브 클래스입니다.
smalloc
모듈을 제거하고freelist
모듈을 폐기했습니다.
주 버전이 올라감에 따라 호환되지 않는 변경사항이 있습니다.
Buffer.concat
,dgram send()
오류와http
서버 타이밍 동작이 변경되었습니다.- V8이 업그레이드 되어 모든 네이티브 애드온을 재컴파일해야 하고 애드온 작성자는
Maybe<>
와MaybeLocal<>
타입을 가능한 한 빨리 새로운 API로 전환해야 합니다. - HTTP 상태 코드. 코드 매핑이 이제 IANA 표준을 따르고 헤더의 텍스트 값에 따라 하위 호환성이 없는 변경이 생길 것입니다.
- HTTP 에이전트
.getName()
에서 반환 값 끝에 붙은 불필요한 여분의 콜론을 수정했습니다.
이번 릴리스에 대한 자세한 내용은 전체 변경사항, 호환되지 않는 변경사항에 대한 문서, 릴리스 제안에 대한 풀 리퀘스트에서 확인할 수 있습니다. 추가로 Yosuke Furukawa가 새로운 기능에 대한 자세한 내용을 담고 있는 저장소를 만들었습니다.
주요 변경 사항
- buffer:
- V8의 변경사항 때문에 V8의
Uint8Array
로Buffer
를 다시 구현해야 했습니다. 성능에 주는 영향을 최소화하려고 모든 노력을 다했지만Buffer
인스턴스화가 측정할 수 있을 정도로 느려졌습니다. 접근 작업이 어떤 상황에서는 더 빠를 수도 있지만 정확한 성능 프로파일과 이전 버전과의 차이점은 애플리케이션 내에서Buffer
를 어떻게 사용하느냐에 따라 다를 것입니다. (Trevor Norris) #1825. Buffer
가 이제 생성자 인자로ArrayBuffer
를 받을 수 있습니다. (Trevor Norris) #2002- 하나의 버퍼를
Buffer.concat()
에 전달했을 때 새로 복사된Buffer
객체를 반환할 것입니다. 이전 동작은 원래의Buffer
객체를 반환하는 것이었습니다. (Sakthipriyan Vairamani) #1937
- V8의 변경사항 때문에 V8의
- build: PPC 지원에 pLinux BE와 LE에서 컴파일할 수 있는 코어가 추가되었습니다. (AIX는 곧 지원할 예정입니다.) (Michael Dawson) #2124
- dgram:
socket.send()
에서 오류가 발생하고 콜백이 제공된 경우 콜백의 첫 인자로 오류만 전달하고socket
객체에서는 이벤트가 발생하지 않습니다. 이전에는 두 가지 모두가 호출되었습니다. (Matteo Collina & Chris Dickinson) #1796 - freelist: 문서가 없는
freelist
핵심 모듈을 폐기했습니다. (Sakthipriyan Vairamani) #2176 - http:
- node:
- API 변경을 나타내려고
NODE_MODULE_VERSION
을45
로 올렸습니다. (Rod Vagg) #2096 'io.js'
로 설정된name
프로퍼티와 관련 리소스의 URL을 담고 있는sourceUrl
,headersUrl
,libUrl
(Windows 전용) 프로퍼티를 가진process.release
객체를 도입했습니다. 이는 node-gyp에서 사용하기 위함입니다. (Rod Vagg) #2154- io.js에 포함된 node-gyp 버전은 이제 네이티브 애드온을 컴파일하려고 전체 소스를 다운로드하는 대신 iojs.org에서 헤더 파일의 tarball을 다운로드해서 사용합니다. 이 부분은 일시적인 패치이고 변경사항이 node-gyp에 적용되기를 기대합니다. (Rod Vagg) #2066
- API 변경을 나타내려고
- repl: 이제 기본적으로 히스토리를 유지합니다. 히스토리 파일은 ~/.node_repl_history에 있고 이는 새로운
NODE_REPL_HISTORY
환경 변수로 덮어쓸 수 있습니다. 이로써 이전에 사용하던NODE_REPL_HISTORY_FILE
변수는 폐기했습니다. 추가로 파일의 형식은 파일 변조를 더 잘 다루도록 플레인 텍스트로 변경하였습니다. (Jeremiah Senkpiel) #2224 - smalloc: V8의 변경사항 때문에 API를 더는 제공할 수 없으므로
smalloc
모듈을 제거했습니다. (Ben Noordhuis) #2022 - tls: TLS 세션 키 순환을 위해
server.getTicketKeys()
와server.setTicketKeys()
메서드를 추가했습니다. (Fedor Indutny) #2227 - v8: 4.4.63.26로 업그레이드 했습니다.
- ES6: 계산된 프로퍼티 이름을 활성화했습니다.
- ES6: strict 모드에서
Array
를 서브클래스화 할 수 있습니다. - ES6: 스테이징에서 레스트 파라미터(rest parameters)를 구현했습니다.
--harmony-rest-parameters
커맨드 라인 플래그를 사용하세요. - ES6: 스테이징에서 스프레드 연산자(spread operator)를 구현했습니다.
--harmony-spreadcalls
커맨드 라인 플래그를 사용하세요. SetIndexedPropertiesToExternalArrayData
와 관련 API를 제거해서Buffer
를Uint8Array
에 기반해서 다시 구현하도록 강제합니다.- 값이 있을 수도 없을 수도 있는 객체를 위해
Maybe
와MaybeLocal
C++ API를 도입했습니다. - PPC에 대한 지원을 추가했습니다.
호환되지 않는 변경사항에 대한 요약은 https://github.com/nodejs/io.js/wiki/Breaking-Changes#300-from-2x도 참고하세요.(SEMVER-MAJOR)
알려진 이슈
현재 알려진 이슈의 전체 목록은
https://github.com/nodejs/io.js/labels/confirmed-bug에서 확인할 수 있습니다.
beforeExit
중에 참조 해제된 타이머에 대한 문제가 아직 남아 있습니다. #1264- REPL에 입력된 서로게이트 페어가 터미널을 얼릴 수 있습니다. #690
process.send()
가 문서에 쓰인 것처럼 동기적이지 않으며, 이 문제는 1.0.2에서 발생했습니다. #760- DNS 질의 진행 중에 호출된
dns.setServers()
가 실패한 단언문으로 프로세스의 충돌을 일으킬 수 있습니다. #894 url.resolve
가 다른 두 호스트 사이를 해석하는 중 URL의 인증 정보 부분을 교환할 수 있습니다. #1435
커뮤니티 업데이트
- 우리의 LTS 빌드를 해줄 V8 메인테이너가 아직 필요합니다! 당신이 요구사항에 충족 되는지 GitHub에서 확인하세요.
- webkid.io의 공동창업자 Moritz Klack가 Hapi, Dogwater, Bedwetter로 REST API 작성하기에 대해서 글을 썼습니다.
- RisingStack CEO Gergely Nemeth가 회사 블로그에 Graffiti로 GraphQL 사용하기라는 글을 올렸습니다.
- Samsung이 IoT에서 JavaScript, Node.js에 기대하고 있습니다. Paul Krill가 작성하고 InfoWorld에서 전반적으로 편집했습니다.
만약 당신이 Node.js나 io.js에 관한 글을 쓰거나 발견했다면, 우리의 Evangelism 팀 저장소에 와서 추천한 후 이슈 페이지에 주간 업데이트 이슈로 알려주세요.
다가오는 이벤트
- BrazilJS Conf 입장권을 판매하고 있습니다. 8월 21일과 22일 BarraShoppingSul 쇼핑 센터에서 열립니다.
- NodeConf EU 입장권을 판매하고 있습니다. 9월 6일부터 9일까지 아일랜드 워터포드에서 열립니다.
- Node.js Italian Conference 입장권을 판매하고 있습니다. 10월 10일 이탈리아 Brescia의 Desenzano에서 열립니다.
- JSConf CO가 10월 16일부터 17일까지 Medellin의 Ruta N에서 열립니다.
Node.js와 io.js의 다가오는 이벤트를 계획하고 있나요? Evangelism 팀 저장소와 이슈 페이지의 주간 업데이트 이슈를 통해 알릴 수 있습니다.