Node.js v5를 환영해주세요! 불과 얼마 전에 Node.js v4.0.0을 릴리스했지만, v5를 릴리스했다고 해서 v4를 없애겠다는 의미는 아닙니다. 사실 v4는 v5보다 훨씬 오래 살아남을 것입니다.
우리의 새로운 장기 지원 계획(Long-term Support, LTS)에 따르면, Node.js v4 Argon은 2018년 4월까지 30개월간 지속될 것입니다. 하지만 Node.js v5는 8개월 동안만 지원되고 2016년 4월에는 v6가 릴리스 될 것입니다. Node.js v6는 이후 v4와 같은 장기 지원 버전으로 전환되어 비슷한 기간 동안 지원될 것입니다. 이런 방식을 통해 우리는 6개월마다 새로운 Node.js 안정 버전을 출시하고 짝수 버전들은 장기 지원 라인으로 전환됩니다. 우리의 장기 지원 계획을 처음 들어본다면 장기 지원 계획의 운영 방식에 관한 글을 읽어보세요. 사용할 Node.js 버전을 정할 때 필요한 정보를 얻을 수 있습니다.
사용할 Node.js 버전을 정할 때 적용할 만한 일반적인 규칙은 다음과 같습니다.
- 중대형 기업과 같이 안정성이 필요하거나 프로덕션 환경이 복잡하다면 그대로 유지하거나 Node.js v4.2.x로 업그레이드하세요.
- 환경에 구애받지 않고 쉽고 빠르게 버전을 업그레이드할 수 있으며 새 기능을 빨리 사용해보고 싶다면 Node.js v5.x로 업그레이드하세요.
다음 릴리스 노트는 v5가 되면서 추가된 호환성 문제가 있을 수 있는 주요 변경 사항을 기술합니다. 이번 버전의 Node.js는 V8 엔진 새 버전을 탑재하고 있으므로 기존에 설치된 네이티브 애드온을 다시 컴파일해야 합니다. 그렇지 않으면 네이티브 애드온을 읽어들일 때 런타임 에러가 발생할 것입니다. 간단하게 node_modules 디렉터리를 제거하고 아무것도 없는 상태로 npm install
을 실행해도 됩니다.
주요 변경 사항
- buffer: (호환성 깨짐)
Buffer
에서 오랫동안 폐지 예정(deprecated) 상태였던raw
와raws
인코딩 타입이 제거되었습니다. (Sakthipriyan Vairamani) #2859 - console: (호환성 깨짐)
console.time()
에서 출력되는 값에 소수점 아래 3자리가 추가됩니다. (Michaël Zasso) #3166 - fs:
fs.readFile*()
,fs.writeFile*()
,fs.appendFile*()
에 첫 번째 인수로 파일 서술자(file descriptor)도 전달할 수 있습니다 (Johannes Wüller). #3163- (호환성 깨짐)
fs.readFile()
에서 인코딩이 설정되고 내부적으로toString()
동작이 실패하더라도 에러를 발생시키지(throw) 않습니다. 단, 콜백으로는 에러가 전달됩니다. (Evan Lucas) #3485 - (호환성 깨짐)
fs.read()
에서 (fs.read(fd, length, position, encoding, callback)
형식을 사용할 때), 내부적으로toString()
동작이 실패하더라도 에러를 발생시키지(throw) 않습니다. 단, 콜백으로는 에러가 전달됩니다. (Evan Lucas) #3503
- http:
- 파이프라인에 연결된 HTTP 요청이 멈추던 버그를 수정했습니다. (Fedor Indutny) #3342
- (호환성 깨짐) HTTP를 파싱할 때
Retry-After
,ETag
,Last-Modified
,Server
,Age
,Expires
헤더를 중복해서 추가하지 않습니다. 기존에 중복 추가를 허용하지 않던Content-Type
,Content-Length
,User-Agent
,Referer
,Host
,Authorization
,Proxy-Authorization
,If-Modified-Since
,If-Unmodified-Since
,From
,Location
,Max-Forwards
헤더에 더해진 것입니다. (James M Snell) #3090 - (호환성 깨짐)
OutgoingMessage#setTimeout()
에 전달되는callback
인수는 반드시 함수여야 합니다. 그렇지 않으면TypeError
가 발생합니다. (James M Snell) #3090 - (호환성 깨짐) HTTP 메서드와 헤더 이름은 반드시 사용할 수 있는 문자, 사용할 수 없는 제어 문자, _구분자_를 나열한 RFC 2616 “토큰” 규칙을 준수해야 합니다. 특히 메서드와 헤더 이름은 반드시
/^[a-zA-Z0-9_!#$%&'*+.^`|~-]+$/
에 일치해야 합니다. 그렇지 않으면TypeError
가 발생합니다. (James M Snell) #2526
- node:
- npm: 2.14.7에서 3.3.6으로 버전을 업그레이드 했습니다. 자세한 내용은 https://github.com/npm/npm/releases/tag/v3.3.6을 참고하세요. npm의 주요 버전이 증가하면서 상당히 많은 부분이 달라졌습니다. 주요 변화는 npm v3.0.0 릴리스 노트를 참고하세요. (Rebecca Turner) #3310
- src: (호환성 깨짐) V8 엔진 업그레이드 때문에
NODE_MODULE_VERSION
을46
에서47
로 올렸습니다. 네이티브 애드온은 다시 컴파일해야 합니다. (Rod Vagg) #3400 - timers:
setTimeout().unref()
의 타이머 핸들러를 재사용하려고 시도합니다. 이로 인해 오래된 알려진 이슈였던beforeExit
중 참조 해제된 타이머 문제가 해결되었습니다. (Fedor Indutny) #3407 - tls:
- util:
- (호환성 깨짐) 몇 년간 폐지 예정 상태였던
util.p()
가 제거되었습니다. (Wyatt Preul) #3432 - (호환성 깨짐)
util.inherits()
가 ES6 클래스에도 동작합니다. 생성자의 프로토타입을 재할당하는 과정이ctor.prototype = Object.create(superCtor.prototype, { constructor: { ... } })
에서Object.setPrototypeOf(ctor.prototype, superCtor.prototype)
으로 변경되었기 때문에 잠재적인 부작용이 있을 수 있어서 호환성 깨짐으로 표시했습니다. (Michaël Zasso) #3455
- (호환성 깨짐) 몇 년간 폐지 예정 상태였던
- v8: (호환성 깨짐) 4.5.103.35에서 4.6.85.25 버전으로 업그레이드 했습니다. (Ali Ijaz Sheikh) #3351
- 확산 연산자(spread operator)가 구현되었습니다. 확산 연산자에 관해서는 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator 문서를 참고하세요.
new.target
을 구현했습니다. 자세한 정보는 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target 문서를 참고하세요.
- zlib: 압축 해제시 예기치 않게 파일이 종료되는 등 입력이 잘리면 에러가 발생합니다. (Yuval Brik) #2595
알려진 이슈
- REPL에 입력된 서로게이트 페어가 터미널을 얼릴 수 있습니다. #690
- DNS 질의 진행 중에 호출된
dns.setServers()
가 assertion 실패로 프로세스를 크래시시킬 수 있습니다. #894 url.resolve
가 다른 두 호스트 사이를 해석하는 중 URL의 인증 정보 부분을 교환할 수 있습니다. #1435.- 파일 시스템 경로의 유니코드 문자를 플랫폼이나 Node.js API에 따라 다르게 처리하는 문제가 있습니다. #2088, #3401, #3519.
Commits
- [
6a04cc0a43
] - buffer: fix value check for writeUInt{B,L}E (Trevor Norris) #3500 - [
1a41feb559
] - buffer: don’t CHECK on zero-sized realloc (Ben Noordhuis) #3499 - [
5f6579d366
] - (SEMVER-MAJOR) buffer: remove raw & raws encoding (Sakthipriyan Vairamani) #2859 - [
70fca2a81e
] - build: Updates for AIX npm support - part 1 (Michael Dawson) #3114 - [
b36b4f385a
] - build: rectify --link-module help text (P.S.V.R) #3379 - [
a89eeca590
] - console: rename argument of time and timeEnd (Michaël Zasso) #3166 - [
870108aaa8
] - (SEMVER-MAJOR) console: sub-millisecond accuracy for console.time (Michaël Zasso) #3166 - [
0a43697ce8
] - deps: backport 010897c from V8 upstream (Ali Ijaz Sheikh) #3520 - [
8c0318ce8d
] - deps: backport 8d6a228 from the v8’s upstream (Fedor Indutny) #3549 - [
2974debc6e
] - deps: update V8 to 4.6.85.28 (Michaël Zasso) #3484 - [
f76af49b13
] - deps: fix upgrade to npm 3.3.6 (Rebecca Turner) #3494 - [
32b51c97ec
] - deps: upgrade npm to 3.3.6 (Rebecca Turner) #3310 - [
770cd229f9
] - deps: upgrade V8 to 4.6.85.25 (Ali Ijaz Sheikh) #3351 - [
972a0c8515
] - deps: backport 0d01728 from v8’s upstream (Fedor Indutny) #3351 - [
1fdec65203
] - deps: improve ArrayBuffer performance in v8 (Fedor Indutny) #3351 - [
5cd1fd836a
] - deps: backport 56a0a79 from V8 upstream (Julien Gilli) #3351 - [
7fb128d8df
] - deps: cherry-pick backports to V8 (Michaël Zasso) #3351 - [
d8011d1683
] - (SEMVER-MAJOR) deps: upgrade V8 to 4.6.85.23 (Michaël Zasso) #3351 - [
a334ddc467
] - Revert “deps: backport 03ef3cd from V8 upstream” (Ali Ijaz Sheikh) #3237 - [
6fff47ffac
] - deps: backport 03ef3cd from V8 upstream (Ali Ijaz Sheikh) #3165 - [
680dda8023
] - dns: remove nonexistant exports.ADNAME (Roman Reiss) #3051 - [
239ad899a3
] - doc: add LTS info to COLLABORATOR_GUIDE.md (Myles Borins) #3442 - [
5e76587fdf
] - doc: createServer’s key option can be an array (Sakthipriyan Vairamani) #3123 - [
0317c880da
] - doc: add TSC meeting minutes 2015-10-21 (Rod Vagg) #3480 - [
cd245b12e0
] - doc: clarify API buffer.concat (Martii) #3255 - [
ff9ef893fd
] - doc: add TSC meeting minutes 2015-10-14 (Rod Vagg) #3463 - [
605c5a7754
] - doc: clarify the use ofoption.detached
(Kyle Smith) #3250 - [
cf75a175e5
] - doc: more use-cases for promise events (Domenic Denicola) #3438 - [
1b75d4bda3
] - doc: update WORKING_GROUPS.md - add missing groups (Michael Dawson) #3450 - [
c658de2f99
] - doc: add TSC meeting minutes 2015-09-30 (Rod Vagg) #3235 - [
d0b8c5d3a4
] - doc: add TSC meeting minutes 2015-10-07 (Rod Vagg) #3364 - [
b483afcb20
] - doc: binary encoding is not deprecated (Trevor Norris) #3441 - [
b607366a1c
] - doc: add information about Assert behavior and maintenance (Rich Trott) #3330 - [
086103b32e
] - doc: show keylen in pbkdf2 as a byte length (calebboyd) #3334 - [
f6ebc8277b
] - doc: reword description of console.time (Michaël Zasso) #3166 - [
503f279527
] - doc: fix indent in tls resumption example (Roman Reiss) #3372 - [
dae9fae0fe
] - doc: label v4.2.1 as LTS in changelog heading (Phillip Johnsen) #3360 - [
4fc638804c
] - doc: update V8 options in man page (Michaël Zasso) #3351 - [
a441aa6e1d
] - doc: update WORKING_GROUPS.md to include Intl (Steven R. Loomis) #3251 - [
81503e597b
] - doc: fix typo in changelog (Timothy Gu) #3353 - [
3ef2e4acf3
] - doc: fix typos in changelog (reggi) #3291 - [
b9279aa193
] - doc: remove old note, ‘cluster’ is marked stable (Balázs Galambosi) #3314 - [
cdfa271164
] - doc: update AUTHORS list (Rod Vagg) - [
47b06f6bb1
] - docs: add missing shell option to execSync (fansworld-claudio) #3440 - [
4c9abbd1bb
] - fs: reduced duplicate code in fs.write() (ronkorving) #2947 - [
2bb147535e
] - (SEMVER-MAJOR) fs: don’t throw in read if buffer too big (Evan Lucas) #3503 - [
7added3b39
] - (SEMVER-MAJOR) fs: pass err to callback if buffer is too big (Evan Lucas) #3485 - [
5e0759f6fd
] - (SEMVER-MINOR) fs: add file descriptor support to *File() funcs (Johannes Wüller) #3163 - [
d1a2e5357e
] - gitignore: don’t ignore debug source directory in V8 (Michaël Zasso) #3351 - [
ab03635fb1
] - http: fix stalled pipeline bug (Fedor Indutny) #3342 - [
e655a437b3
] - (SEMVER-MAJOR) http: do not allow multiple instances of certain response headers (James M Snell) #3090 - [
0094a8dad7
] - (SEMVER-MAJOR) http: add callback is function check (James M Snell) #3090 - [
6192c9892f
] - (SEMVER-MAJOR) http: add checkIsHttpToken check for header fields (James M Snell) #2526 - [
c9786bb680
] - (SEMVER-MAJOR) http{s}: don’t connect to localhost on invalid URL (Sakthipriyan Vairamani) #2967 - [
1929d5be73
] - lib: fix cluster handle leak (Rich Trott) #3510 - [
97d081709e
] - lib: avoid REPL exit on completion error (Rich Trott) #3358 - [
f236b3a904
] - (SEMVER-MINOR) lib,doc: return boolean from child.send() (Rich Trott) #3516 - [
6e887cc630
] - lib,test: update let to const where applicable (Sakthipriyan Vairamani) #3152 - [
47befffc53
] - (SEMVER-MAJOR) lib,test: deprecate _linklist (Rich Trott) #3078 - [
d5ce53458e
] - lttng: update flags for gc tracing (Glen Keane) #3388 - [
6ad458b752
] - (SEMVER-MAJOR) module: remove unnecessary property and method (Sakthipriyan Vairamani) #2922 - [
ae196175f4
] - node: improve GetActiveRequests performance (Trevor Norris) #3375 - [
bd4311bc9c
] - repl: handle comments properly (Sakthipriyan Vairamani) #3515 - [
ce391ed849
] - (SEMVER-MAJOR) repl: event ordering: delay ‘close’ until ‘flushHistory’ (Jeremiah Senkpiel) #3435 - [
4c80c02ac7
] - repl: limit persistent history correctly on load (Jeremiah Senkpiel) #2356 - [
134a60c785
] - src: fix race condition in debug signal on exit (Ben Noordhuis) #3528 - [
bf7c3dabb4
] - (SEMVER-MAJOR) src: bump NODE_MODULE_VERSION To 47 (Rod Vagg) #3400 - [
2d3560767e
] - src: fix exception message encoding on Windows (Brian White) #3288 - [
ff877e93e1
] - src: fix stuck debugger process (Liang-Chi Hsieh) #2778 - [
8854183fe5
] - stream: avoid unnecessary concat of a single buffer. (Calvin Metcalf) #3300 - [
85b74de9de
] - stream: fix signature of _write() in a comment (Fábio Santos) #3248 - [
b8cea49c88
] - test: fix heap-profiler link error LNK1194 on win (Junliang Yan) #3572 - [
4a5dbeab43
] - test: fix missing unistd.h on windows (Junliang Yan) #3532 - [
74e2328b3a
] - test: split independent tests into separate files (Rich Trott) #3548 - [
8c6c0f915a
] - test: use port number from env in tls socket test (Stefan Budeanu) #3557 - [
1a968e67a5
] - test: improve tests for util.inherits (Michaël Zasso) #3507 - [
9d8d752456
] - test: print helpful err msg on test-dns-ipv6.js (Junliang Yan) #3501 - [
60de9f8d7b
] - test: wrap assert.fail when passed to callback (Myles Borins) #3453 - [
cd83f7ed7f
] - test: add node::MakeCallback() test coverage (Ben Noordhuis) #3478 - [
08da5c2a06
] - test: disable test-tick-processor - aix and be ppc (Michael Dawson) #3491 - [
7c35fbcb14
] - test: harden test-child-process-fork-regr-gh-2847 (Michael Dawson) #3459 - [
ad2b272417
] - test: fix test-net-keepalive for AIX (Imran Iqbal) #3458 - [
04fb14cc35
] - test: fix flaky test-child-process-emfile (Rich Trott) #3430 - [
eef0f0cd63
] - test: remove flaky status from eval_messages test (Rich Trott) #3420 - [
bbbd81eab2
] - test: skip test-dns-ipv6.js if ipv6 is unavailable (Junliang Yan) #3444 - [
f78c8e7426
] - test: fix flaky test for symlinks (Rich Trott) #3418 - [
28e9a4f41b
] - test: repl-persistent-history is no longer flaky (Jeremiah Senkpiel) #3437 - [
9e981556e5
] - test: cleanup, improve repl-persistent-history (Jeremiah Senkpiel) #2356 - [
ee2e641e0a
] - test: add Symbol test for assert.deepEqual() (Rich Trott) #3327 - [
e2b8393ee8
] - test: port domains regression test from v0.10 (Jonas Dohse) #3356 - [
676e61872f
] - test: apply correct assert.fail() arguments (Rich Trott) #3378 - [
bbdbef9274
] - test: fix tests after V8 upgrade (Michaël Zasso) #3351 - [
6c032a8333
] - test: replace util with backtick strings (Myles Borins) #3359 - [
f45c315763
] - test: fix domain with abort-on-uncaught on PPC (Julien Gilli) #3354 - [
e3d9d25083
] - test: add test-child-process-emfile fail message (Rich Trott) #3335 - [
6f14b3a7db
] - test: remove util from common (Rich Trott) #3324 - [
7d94611ac9
] - test: split up buffer tests for reliability (Rich Trott) #3323 - [
3202456baa
] - test: remove util properties from common (Rich Trott) #3304 - [
31c971d641
] - test: parallelize long-running test (Rich Trott) #3287 - [
5bbc6df7de
] - test: change call to deprecated util.isError() (Rich Trott) #3084 - [
522e3d3cd3
] - timers: reuse timer insetTimeout().unref()
(Fedor Indutny) #3407 - [
b64ce5960f
] - tls: remove util and calls to util.format (Myles Borins) #3456 - [
c64af7d99e
] - tls: TLSSocket options default isServer false (Yuval Brik) #2614 - [
2296a4fc0f
] - (SEMVER-MINOR) tls: addoptions
argument to createSecurePair (Коренберг Марк) #2441 - [
0140e1b5e3
] - tls: output warning of setDHParam to console.trace (Shigeki Ohtsu) #1831 - [
f72e178a78
] - (SEMVER-MAJOR) tls: add minDHSize option to tls.connect() (Shigeki Ohtsu) #1831 - [
6d92ebac11
] - tls: add TLSSocket.getEphemeralKeyInfo() (Shigeki Ohtsu) #1831 - [
62ad1d0113
] - (SEMVER-MINOR) tls, crypto: add ALPN Support (Shigeki Ohtsu) #2564 - [
5029f41b2f
] - (SEMVER-MINOR) tls,crypto: move NPN protcol data to hidden value (Shigeki Ohtsu) #2564 - [
701e38c25f
] - tools: enable prefer-const eslint rule (Sakthipriyan Vairamani) #3152 - [
6e78382605
] - tools: ensure npm always uses the local node (Jeremiah Senkpiel) #3489 - [
3c3435d017
] - tools: update test-npm to work with npm 3 (Rebecca Turner) #3489 - [
b4f4c24539
] - tools: use absolute paths in test-npm (Rebecca Turner) #3309 - [
80573153b8
] - (SEMVER-MAJOR) util: make inherits work with classes (Michaël Zasso) #3455 - [
412252ca04
] - (SEMVER-MAJOR) util: Remove p, has been deprecated for years (Wyatt Preul) #3432 - [
718c304a4f
] - v8: pull fix for builtin code size on PPC (Michael Dawson) #3474 - [
6936468de2
] - vm: remove Watchdog dependency on Environment (Ido Ben-Yair) #3274 - [
80169b1f0a
] - (SEMVER-MAJOR) zlib: decompression throw on truncated input (Yuval Brik) #2595
Windows 32-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0-x64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v5.0.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v5.0.0/win-x64/node.exe
Mac OS X 64-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0.pkg
Mac OS X 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-darwin-x64.tar.gz
Linux 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x86.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz
SmartOS 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-sunos-x86.tar.gz
SmartOS 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-sunos-x64.tar.gz
ARMv6 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-armv6l.tar.gz
ARMv7 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-armv7l.tar.gz
ARMv8 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-arm64.tar.gz
Source Code: https://nodejs.org/dist/v5.0.0/node-v5.0.0.tar.gz
Other release files: https://nodejs.org/dist/v5.0.0/
Documentation: https://nodejs.org/docs/v5.0.0/api/
Shasums (GPG signing hash: SHA512, file hash: SHA256):
1 | -----BEGIN PGP SIGNED MESSAGE----- |