Node v4.0.0 (안정 버전)

Node.js 프로젝트의 협력자와 Node.js 재단의 멤버는 v4.0.0을 공식적으로 릴리스하게 되어 자랑스럽습니다. 이제 하나의 코드로 합쳐진 Node.js와 io.js 프로젝트에서 이뤄진 수많은 시간의 고된 작업이 이번 릴리스에 담겨 있습니다. 현재 Node.js 프로젝트는 44명의 협력자로 운영되고 있고 그중의 15명은 기술 결정 위원회(Technical Steering Committee, TSC)입니다. 게다가 v0.12.7 이후 새로운 100여 명이 코드 기여 목록에 이름을 올렸습니다.

Node.js v4.0.0은 현재 크롬 웹 브라우저가 사용하는 V8과 같은 버전인 V8 v4.5를 사용합니다. 이로써 Node.js 사용자에게 많은 이점이 생겼는데 블록 범위, 클래스, 타입을 가진 배열(Node의 Buffer는 이제 Uint8Array에 기반을 둡니다.), 제너레이터, 프로미스, 심볼, 템플릿 문자열, 컬렉션(Map, Set 등)을 포함해서 V8 v4.5에 새로 추가된 화살표 함수(arrow function) 등 새로운 ES6 기능이 기본적으로 활성화 되었다는 점이 주목할 부분입니다.

지난 몇 년간 Rackspace, DigitalOcean, Scaleway, miniNodes, Voxer, Joyent, CloudFlare, ARM Holdings 같은 회사나 커뮤니티의 후원으로 고맙게도 다양한 Linux와 OS X, Windows, FreeBSD, SmartOS 등의 다양한 환경에서 놀라운 테스트 클러스터를 구축했습니다. 여기에 새로 ARM 프로세서도 기본으로 지원합니다. ARMv6, ARMv7와 새로운 64비트 ARMv8 프로세스에서도 테스트 슈트가 계속해서 통과해야 합니다. 이제 Node.js는 취미로 ARM을 쓰는 사람이나 ARM 서버 사용자들도 사용할 수 있게 되었습니다.

Node.js v4부터는 장기지원버전(LTS)와 정기 릴리스 주기가 생겼습니다. 이제 릴리스 버전은 SemVer를 따르기 때문에 버그를 수정하고 기능을 추가함에 따라 부 버전과 수 버전을 모두 올릴 것입니다. v4.x 브랜치에서는 호환성을 깨뜨리는 변경사항은 추가하지 않을 것입니다.

하지만 10월에 릴리스할 첫 LTS 버전에 첫 발걸음을 시작할 것입니다. 동시에 v5.x 브랜치를 새로 시작하고 v5.0.0으로 시작하는 새로운 안정 버전(Stable)의 릴리스를 사용 가능하게 할 것입니다. 이 브랜치에는 새로운 버전의 V8과 필요하다면 호환성이 없는 변경사항이 포함될 것입니다. v4.x 릴리스는 릴리스 이후 18개월 동안 LTS로 지원하면서 안정성과 보안에 집중하면서 새로운 기능은 추가하지 않을 것입니다. 18개월의 지원이 끝난 뒤 v4.x는 12개월 동안 추가로 치명적인 버그와 보안 수정사항에 집중하는 유지보수(Maintenance) 단계에 진입할 것입니다.

동시에 6개월마다 새로운 안정 버전의 브랜치를 만들어서 매년 4월과 10월에 릴리스할 예정입니다. 안정 버전은 계속해서 개발하면서 매주 혹은 격주로 부 버전과 수 버전을 올리면서 정기적인 릴리스를 할 계획입니다. 10월에 릴리스하는 두 번째 안정 버전 릴리스마다 LTS로 계속해서 지원할 것입니다. 즉, 전체 30개월(LTS와 유지보수 기간 포함) 동안 관심을 받으면서 1년 내내 관리되는 LTS 브랜치가 존재할 것입니다. 안정 버전과 LTS 주기를 통해 프로젝트가 계속해서 혁신을 이뤄내고 자랑스럽게 핵심기술로 Node.js를 도입하는 엔터프라이즈 사용자(일부는 이미 자신을 Node.js 재단의 멤버로 생각합니다.)가 늘어남에 따라 필요해진 예측 가능한 장기 안정성과 보안의 요구사항도 충족하면서 최신 자바스크립트를 사용할 수 있는 여유를 제공할 수 있다고 생각합니다.

모든 주요 릴리스가 항상 그렇듯이 Node.js v4의 도입에 문제가 없다고 생각하진 않습니다. 여기에는 시간이 걸릴 것이고 특히 새로운 버전의 V8을 따라잡아야 하는 컴파일된 애드온이라면 더욱 시간이 걸릴 것입니다.(힌트: 호환성 문제에 대한 공식적인 해결책은 NAN을 참고하세요.) 다행히도 애드온 작성자는 io.js v3.x 릴리스에서 Node.js v4에 대비할 수 있는 기회가 있었으므로 오늘날 npm 생태계는 꽤 많이 준비되어 있습니다.

v0.12와 v4 사이의 변경사항 목록은 LTS 위키에서 볼 수 있고 며칠 내에 반드시 알아야 하는 변경사항과 관련된 문서는 이 위키와 코어 위키에 모두 포함될 것입니다.

GitHub의 새로운 저장소(https://github.com/nodejs/node)에 버그를 보고하고, 핵심에 기여해 점점 늘어가는 협력자 명단에 이름을 올려보세요.

주요 변경 사항

이 변경사항은 마지막 io.js v3.x 릴리스인 v3.3.0에 관련된 것입니다. 0.12.x 이후의 전체 변경사항은 CHANGELOG에 정리된 v3.x, v2.x, v1.x 릴리스의 주요 변경사항 목록을 참고하길 바랍니다. 이번 릴리스의 호환성이 없는 주요 변경사항과 마찬가지로 v3.x의 일부 변경사항은 Node.js와 io.js 프로젝트가 완전히 합쳐지면서 필요한 변경사항으로 간주합니다.

  • child_process: ChildProcess.prototype.send()process.send()가 모든 플랫폼에서 비동기로 동작하므로 메시지를 보낸 후 호출될 선택적인 콜백 파라미터가 추가되었습니다. 예시: .send(message[, sendHandle][, callback]) (Ben Noordhuis) #2620.
  • node: “io.js” 코드를 “Node.js”로 변경했습니다. (cjihrig) #2367.
  • node-gyp: 이번 릴리스에는 갱신된 버전의 node-gyp가 포함되었습니다. 이번 node-gyp는 Node.js와 io.js의 모든 버전과 나이틀리와 릴리스 후보 빌드 모두에서 동작합니다. io.js v3와 Node.js v4부터 애드온을 빌드할 때 전체 소스를 다운로드 하지 않고 headers tarball만 다운로드 받습니다. (Rod Vagg) #2700
  • npm: 2.13.3에서 2.14.2 버전으로 업그레이드했습니다. (Kat Marchán) #2696.
  • timers: 0.12 구현을 포팅하고 일부 버그를 수정해서 timer의 성능이 개선되었습니다. (Jeremiah Senkpiel) #2540, (Julien Gilli) nodejs/node-v0.x-archive#8751 nodejs/node-v0.x-archive#8905
  • util: util.is*() 함수는 폐기 예정이므로 이번 릴리스부터는 문서에 폐기 경고를 표시하기 시작했습니다. 사용자는 npm 저장소에서 더 신뢰할 수 있는 대체제를 찾기를 권장합니다. (Sakthipriyan Vairamani) #2447.
  • v8: 4.4.63.30에서 4.5.103.30 버전으로 업그레이드했습니다. (Ali Ijaz Sheikh) #2632.

알려진 이슈

현재 알려진 이슈의 전체 목록은 https://github.com/nodejs/node/labels/confirmed-bug에서 확인할 수 있습니다.

  • 현재 버전의 V8에서는 계산된 객체의 축약 프로퍼티를 사용할 때 일부가 제대로 처리되지 않습니다. 예시로 [{ [prop]: val }][{}]로 평가됩니다. #2507
  • beforeExit 중에 참조 해제된 타이머에 대한 문제가 아직 남아 있습니다. #1264
  • REPL에 입력된 서로게이트 페어가 터미널을 얼릴 수 있습니다. #690
  • DNS 질의 진행 중에 호출된 dns.setServers()가 assertion 실패로 프로세스를 크래시시킬 수 있습니다. #894
  • url.resolve가 다른 두 호스트 사이를 해석하는 중 URL의 인증 정보 부분을 교환할 수 있습니다. #1435

Commits

  • [4f50d3fb90] - (SEMVER-MAJOR) This commit sets the value of process.release.name to “node”. (cjihrig) #2367
  • [d3178d8b1b] - buffer: SlowBuffer only accept valid numeric values (Michaël Zasso) #2635
  • [0cb0f4a6e4] - build: fix v8_enable_handle_zapping override (Karl Skomski) #2731
  • [a7596d7efc] - build: remote commands on staging in single session (Rod Vagg) #2717
  • [be427e9efa] - build: make .msi install to “nodejs”, not “node” (Rod Vagg) #2701
  • [5652ce0dbc] - build: fix .pkg creation tooling (Rod Vagg) #2687
  • [101db80111] - build: add –enable-asan with builtin leakcheck (Karl Skomski) #2376
  • [2c3939c9c0] - child_process: use stdio.fd even if it is 0 (Evan Lucas) #2727
  • [609db5a1dd] - child_process: check execFile and fork args (James M Snell) #2667
  • [d010568c23] - (SEMVER-MAJOR) child_process: add callback parameter to .send() (Ben Noordhuis) #2620
  • [c60857a81a] - cluster: allow shared reused dgram sockets (Fedor Indutny) #2548
  • [b2ecbb6191] - contextify: ignore getters during initialization (Fedor Indutny) #2091
  • [3711934095] - cpplint: make it possible to run outside git repo (Ben Noordhuis) #2710
  • [03f900ab25] - crypto: replace rwlocks with simple mutexes (Ben Noordhuis) #2723
  • [847459c29b] - (SEMVER-MAJOR) crypto: show exponent in decimal and hex (Chad Johnston) #2320
  • [e1c976184d] - deps: improve ArrayBuffer performance in v8 (Fedor Indutny) #2732
  • [cc0ab17a23] - deps: float node-gyp v3.0.0 (Rod Vagg) #2700
  • [b2c3c6d727] - deps: create .npmrc during npm tests (Kat Marchán) #2696
  • [babdbfdbd5] - deps: upgrade to npm 2.14.2 (Kat Marchán) #2696
  • [155783d876] - deps: backport 75e43a6 from v8 upstream (again) (saper) #2692
  • [5424d6fcf0] - deps: upgrade V8 to 4.5.103.30 (Ali Ijaz Sheikh) #2632
  • [c43172578e] - (SEMVER-MAJOR) deps: upgrade V8 to 4.5.103.24 (Ali Ijaz Sheikh) #2509
  • [714e96e8b9] - deps: backport 75e43a6 from v8 upstream (saper) #2636
  • [8637755cbf] - doc: add TSC meeting minutes 2015-09-02 (Rod Vagg) #2674
  • [d3d5b93214] - doc: update environment vars in manpage and –help (Roman Reiss) #2690
  • [29f586ac0a] - doc: update url doc to account for escaping (Jeremiah Senkpiel) #2605
  • [ba50cfebef] - doc: reorder collaborators by their usernames (Johan Bergström) #2322
  • [8a9a3bf798] - doc: update changelog for io.js v3.3.0 (Rod Vagg) #2653
  • [6cd0e2664b] - doc: update io.js reference (Ben Noordhuis) #2580
  • [f9539c19e8] - doc: update changelog for io.js v3.2.0 (Rod Vagg) #2512
  • [cded6e7993] - doc: fix CHANGELOG.md on master (Roman Reiss) #2513
  • [93e2830686] - (SEMVER-MINOR) doc: document deprecation of util.is* functions (Sakthipriyan Vairamani) #2447
  • [7038388558] - doc,test: enable recursive file watching in Windows (Sakthipriyan Vairamani) #2649
  • [f3696f64a1] - events,lib: don’t require EE#listenerCount() (Jeremiah Senkpiel) #2661
  • [45a2046f5d] - (SEMVER-MAJOR) installer: fix installers for node.js rename (Frederic Hemberger) #2367
  • [7a999a1376] - (SEMVER-MAJOR) lib: add net.Socket#localFamily property (Ben Noordhuis) #956
  • [de88255b0f] - Revertlib,src: add unix socket getsockname/getpeername” (Ben Noordhuis) #2584
  • [f337595441] - (SEMVER-MAJOR) lib,src: add unix socket getsockname/getpeername (Ben Noordhuis) #956
  • [3b602527d1] - (SEMVER-MAJOR) node: additional cleanup for node rename (cjihrig) #2367
  • [a69ab27ab4] - (SEMVER-MAJOR) node: rename from io.js to node (cjihrig) #2367
  • [9358eee9dd] - node-gyp: float 3.0.1, minor fix for download url (Rod Vagg) #2737
  • [d2d981252b] - src: s/ia32/x86 for process.release.libUrl for win (Rod Vagg) #2699
  • [eba3d3dccd] - src: use standard conform snprintf on windows (Karl Skomski) #2404
  • [cddbec231f] - src: fix buffer overflow for long exception lines (Karl Skomski) #2404
  • [dd3f3417c7] - src: re-enable fast math on arm (Michaël Zasso) #2592
  • [e137c1177c] - (SEMVER-MAJOR) src: enable vector ics on arm again (Ali Ijaz Sheikh) #2509
  • [7ce749d722] - src: replace usage of v8::Handle with v8::Local (Michaël Zasso) #2202
  • [b1a2d9509f] - src: enable v8 deprecation warnings and fix them (Ben Noordhuis) #2091
  • [808de0da03] - (SEMVER-MAJOR) src: apply debug force load fixups from 41e63fb (Ali Ijaz Sheikh) #2509
  • [5201cb0ff1] - src: fix memory leak in ExternString (Karl Skomski) #2402
  • [2308a27c0a] - src: only set v8 flags if argc > 1 (Evan Lucas) #2646
  • [384effed20] - test: fix use of common before required (Rod Vagg) #2685
  • [f146f686b7] - (SEMVER-MAJOR) test: fix test-repl-tab-complete.js for V8 4.5 (Ali Ijaz Sheikh) #2509
  • [fe4b309fd3] - test: refactor to eliminate flaky test (Rich Trott) #2609
  • [619721e6b8] - test: mark eval_messages as flaky (Alexis Campailla) #2648
  • [93ba585b66] - test: mark test-vm-syntax-error-stderr as flaky (João Reis) #2662
  • [367140bca0] - test: mark test-repl-persistent-history as flaky (João Reis) #2659
  • [f6b093343d] - timers: minor _unrefActive fixes and improvements (Jeremiah Senkpiel) #2540
  • [403d7ee7d1] - timers: don’t mutate unref list while iterating it (Julien Gilli) #2540
  • [7a8c3e08c3] - timers: Avoid linear scan in _unrefActive. (Julien Gilli) #2540
  • [b630ebaf43] - win,msi: Upgrade from old upgrade code (João Reis) #2439

Windows 32-bit Installer: http://nodejs.org/dist/v4.0.0/node-v4.0.0-x86.msi

Windows 64-bit Installer: http://nodejs.org/dist/v4.0.0/node-v4.0.0-x64.msi

Mac OS X 64-bit Installer: http://nodejs.org/dist/v4.0.0/node-v4.0.0.pkg

Mac OS X 64-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-darwin-x64.tar.gz

Linux 32-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-x86.tar.gz

Linux 64-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-x64.tar.gz

SunOS 32-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-sunos-x86.tar.gz

SunOS 64-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-sunos-x64.tar.gz

ARMv6 32-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz

ARMv7 32-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv7l.tar.gz

ARMv8 64-bit Binary: http://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-arm64.tar.gz

Source Code: http://nodejs.org/dist/v4.0.0/node-v4.0.0.tar.gz

Other release files: http://nodejs.org/dist/v4.0.0/

Documentation: http://nodejs.org/docs/v4.0.0/api/

Shasums:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

4893cadaa55fe88b214371b23257d7fae4b30661ef01d352e3f930ba9d402ee0 node-v4.0.0-darwin-x64.tar.gz
1f2b278d4708d7d956f2a17be139af26955114b92cb4340735a10bb5f0585c0a node-v4.0.0-darwin-x64.tar.xz
8812b88e81ee258f7f9446b548f6b364edcdd455f73f06589f14dd71dca415d0 node-v4.0.0-headers.tar.gz
776962bd95bf295e336fbf04f0d8764bb9f6236e0c699358b17e4e2a95ee3d6f node-v4.0.0-headers.tar.xz
0436f107e1d82c61c3ee4f916781466a49bece74bf4d4fb4bf4d53a57b81df85 node-v4.0.0-linux-arm64.tar.gz
7fdb978ddda803b188958b368db13b97dcaacfbf96d40c99d13ed385499d3fdd node-v4.0.0-linux-arm64.tar.xz
6f88e532bbf55cff36d4940898b80359761de3a274cc214fbb58cc176ec49ba2 node-v4.0.0-linux-armv6l.tar.gz
d7c1e9fefb360bde70c543d8981d2cce9a1c8444e847d19a89604756570d3075 node-v4.0.0-linux-armv6l.tar.xz
a788ed1b04de00344f4bbb8a278b317c69f9672f5fd03adb24f53d7c3d6fc8f6 node-v4.0.0-linux-armv7l.tar.gz
1ed96526e87c29b4d3b5618b5d2e3e65e1aef6a5e40f90ec3a3afd21047517cf node-v4.0.0-linux-armv7l.tar.xz
df8ada31840e3dc48c7fe7291c7eba70b2ce5a6b6d959ac01157b04731c8a88f node-v4.0.0-linux-x64.tar.gz
cc4eae3e4c2dd8b068d69e6d1d9849a863c51e3ec3d7f85cfb1e91e63912b66a node-v4.0.0-linux-x64.tar.xz
444b0c2e38602699103e4adb76c9f15b76c405f58b1308751cdc194041a39b93 node-v4.0.0-linux-x86.tar.gz
6fe4ab43eae74c1cb376169f4f161bddef04ff8a693a772875de651fafa4252b node-v4.0.0-linux-x86.tar.xz
387dd01caf168267749b0ddc7702b2fef7c95fbe1b2dab9a41ded02c11f16889 node-v4.0.0.pkg
f17ea8b1ffa6d63ba4eaa37708a365e5aefdb7de136f8b1a5751f2f258507026 node-v4.0.0-sunos-x64.tar.gz
69188f3568bbc9c071c70cf92551dd15e6fb79c9bd5d8b3da136ed65af4adea1 node-v4.0.0-sunos-x64.tar.xz
4537640f912b1db217351271e15d092d4654ecbe7cdb0169313988de5e453cd3 node-v4.0.0-sunos-x86.tar.gz
99ce4830b6b4f10dfca050296c001beb60e47d3eda455bc5b287b4ecc0773c04 node-v4.0.0-sunos-x86.tar.xz
e110e5a066f3a6fe565ede7dd66f3727384b9b5c5fbf46f8db723d726e2f5900 node-v4.0.0.tar.gz
2e3c5069933bead1022848009a68426a10689e67c4204707798fa319a6847bb5 node-v4.0.0.tar.xz
28dfb26fddb3ff56456bfc0ec186db27e6b84d9ce98752f34d48758f4af05fbe node-v4.0.0-x64.msi
ba67b46504afeedfd43d0ebb51844e2b427d64b631fe05d6fc35f7fc59d05307 node-v4.0.0-x86.msi
4c468e9a5e664f700f664fde42576260a7dd2bd5625ab824a713845e231f8275 win-x64/node.exe
c8189c310c774ce3cbe960bd9920e49f47db97a19f1256b9b5bfa1f9d83d4dca win-x64/node.lib
02814e5fdddbf77840e14042e98de3b50e0c0167aa1a8cccdf3222e643dd016f win-x86/node.exe
1bbe7009ea25e3ffe72cc7da92725146536be698cefd960e0e22269d02368c25 win-x86/node.lib
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJV71yWAAoJEMJzeS99g1RdcXkH/3sBJ89TZdqvzGEB/FZ5x+5C
A4iAWfEa+RjSvJbtmo3noOUA7+OZPWVue6yEv3ZX4EEdk5ZIUEcf/4tYoW/D5cCm
SBlnCB5TXMp8ZafCni3OvR52gBPIB4EFPlqPDLLA6wloUYm7xhyJ5V+Z9DeTzvGl
CC6JDs0RkcqMT3799KBgrS/ud0G5BXCC1imnHxGUCgYc1BAcExHThbLs1zFyMuXg
SSQJVJGoxR7LWfvnGFPnEbliSCuUfjGIT3DHAgovJgjQirj/vLssLBYyxMhCVBEa
eR2+UlptmdbsIAsPvyNp2Tr466KlIawD99haYOfgmVnA1l1PWbAjJMdQZJPk+Mg=
=tBAw
-----END PGP SIGNATURE-----