io.js와 Node.js 주간 뉴스 2015년 8월 7일

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의 Uint8ArrayBuffer를 다시 구현해야 했습니다. 성능에 주는 영향을 최소화하려고 모든 노력을 다했지만 Buffer 인스턴스화가 측정할 수 있을 정도로 느려졌습니다. 접근 작업이 어떤 상황에서는 더 빠를 수도 있지만 정확한 성능 프로파일과 이전 버전과의 차이점은 애플리케이션 내에서 Buffer를 어떻게 사용하느냐에 따라 다를 것입니다. (Trevor Norris) #1825.
    • Buffer가 이제 생성자 인자로 ArrayBuffer를 받을 수 있습니다. (Trevor Norris) #2002
    • 하나의 버퍼를 Buffer.concat()에 전달했을 때 새로 복사된 Buffer 객체를 반환할 것입니다. 이전 동작은 원래의 Buffer 객체를 반환하는 것이었습니다. (Sakthipriyan Vairamani) #1937
  • build: PPC 지원에 pLinux BE와 LE에서 컴파일할 수 있는 코어가 추가되었습니다. (AIX는 곧 지원할 예정입니다.) (Michael Dawson) #2124
  • dgram: socket.send()에서 오류가 발생하고 콜백이 제공된 경우 콜백의 첫 인자로 오류만 전달하고 socket 객체에서는 이벤트가 발생하지 않습니다. 이전에는 두 가지 모두가 호출되었습니다. (Matteo Collina & Chris Dickinson) #1796
  • freelist: 문서가 없는 freelist 핵심 모듈을 폐기했습니다. (Sakthipriyan Vairamani) #2176
  • http:
    • 상태 코드는 이제 RFC7231에 따라 공식 IANA 이름을 모두 사용합니다. 예시로 http.STATUS_CODES[414]는 이제 'Request-URI Too Large'가 아니라 'URI Too Long'를 반환합니다. (jomo) #1470
    • HTTP 에이전트에서 .getName()을 호출하면 더는 마지막에 콜론을 붙이지 않고 HTTPS 에이전트는 더는 문자열 중간에 여분의 콜론을 반환하지 않습니다. (Brendan Ashworth) #1617
  • node:
    • API 변경을 나타내려고 NODE_MODULE_VERSION45로 올렸습니다. (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
  • 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를 제거해서 BufferUint8Array에 기반해서 다시 구현하도록 강제합니다.
    • 값이 있을 수도 없을 수도 있는 객체를 위해 MaybeMaybeLocal 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

커뮤니티 업데이트

만약 당신이 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 팀 저장소이슈 페이지의 주간 업데이트 이슈를 통해 알릴 수 있습니다.