4.0이 새로운 1.0이다

완전히 합쳐진 io.js/node.js의 첫 릴리스가 조만간 이뤄질 예정이다.

지난주는 일반적인 샌프란시스코의 여름처럼 맑고 때때로 강한 바람이 불었다. 새로운 Node.js 재단이 주관한 첫 기여자 회담을 위해 40명의 node.js 기여자가 모였다.

1년 전만 해도 40명의 기여자를 모으지 못했지만 지금 이 40명은 전체 기여자에 극히 일부일 뿐이다. (8월 12일 기준으로 Github 조직에 359명의 구성원이 있다.) Joyent가 node.js를 재단으로 이관하고 io.js가 재단으로 합쳐진 덕분이다. 프로젝트가 하나로 합쳐졌으므로 node.js는 지금까지 보지 못한 진보를 보여주었고 Node.js v4.0을 곧 볼 수 있을 것이다. 이는 io.js와 node.js가 합쳐진 첫 릴리스이다.

타임라인

  • 2월 — Joyent가 Node Summit에서 Node.js 재단을 구성한다고 발표했다.
  • 3월 — 재단의 내규 초안이 배포되었다.
  • 5월 — io.js TC가 Node.js 재단에 들어가고 node.js와 합치기로 투표했다.
  • 6월 — Node.js 재단과 창립 구성원을 공식 발표했다.
  • 7월 — Node.js 재단 이사회가 구성되었다.
  • 8월 — 첫 번째 Node.js 기여자 회담이 이뤄졌다.
  • 9월 — Node.js v4.0 (완전히 합쳐진 첫 릴리스).
  • 12월 — 세계 정복.

지난 몇 달 동안 io.js와 node.js의 거버넌스와 개발이 함께 이뤄졌다. 참여하는 모두가 합쳐진 릴리스가 가능한 한 빨리 이뤄지길 바라면서 기술 결정 위원회[^1]는 개발 커뮤니티가 사용 중인 io.js와 node.js 0.12.x의 정기 릴리스를 계속해서 전담했다.

이 과정에서 운영 중인 개발 단계와 릴리스 단계의 몇 가지 문제점을 발견했고 동시에 최근 V8의 상당한 변경사항에도 대응했다.

네이티브 모듈

모듈 생태계는 Node 개발자가 되는 가장 좋은 부분 중 하나이다. 이러한 모듈 중 일부는 “네이티브 모듈”이라고 부르는데, 어떤 방식으로든 V8의 C++ API에 의존하는 순수 자바스크립트가 아니라는 의미를 담고 있다. 다시 말해 node.js의 주 버전이 릴리스 될 때마다 네이티브 모듈에 문제가 생기고, 새 버전의 V8과 동작하려면 네이티브 모듈도 업데이트되어야 한다는 뜻이다.

2013년 중순에 Rog Vagg는 네이티브 모듈 개발자가 node.js에서 사용하는 여러 V8 버전(0.8, 0.10, 0.12 등)을 동시에 지원할 때 사용할 수 있는 NAN(노드 네이티브 추상화, Native Abstractions for Node)이라는 모듈을 개발했다. 덕분에 개발자들은 여러 버전의 V8을 지원하기 위한 수많은 코드를 작성하지 않아도 되었지만, 그렇다고 네이티브 모듈이 V8 새 버전에서 동작하지 않는 문제가 해결되지는 않았다.

네이티브 모듈 개발자들은 최신 버전의 node.js를 지원하는 NAN으로 간단하게 업그레이드할 수 있다. 안타깝지만 node.js 모듈에 있는 의존성 체인 때문에 업데이트 해야 할 네이티브 모듈의 의존성, 그리고 의존성의 의존성과 의존성의 의존성의 의존성 등을 처리하는 데는 꽤 많은 시간이 소요될 것이다.

여기서 말하는 모듈의 개수는 어느 정도일까? 현재 NAN에 직접 의존하는 모듈은 600개 정도이다(전체 npm 모듈의 0.5% 수준). 하지만 이 모듈에 대한 의존성까지 모두 계산한다면 전체 모듈의 최대 30% 정도가 간접적으로 NAN에 의존하고 있다. 이러한 모듈이 새 버전을 좇아오려면 어느 정도 시간이 걸릴 것이므로, 기술 결정 위원회는 네이티브 모듈 생태계에 영향을 줄 수 있는 메이저 버전을 릴리스하기 전에 네이티브 모듈의 업그레이드를 위한 유예 시간을 늘리는 새로운 릴리스 프로세스를 개발했다.

“io.js v3가 node.js v4 알파”라는 말은 무슨 뜻인가?

io.js가 첫 릴리스를 할 때 새로운 버전의 V8로 업그레이드했고(node.js는 몇 년 지난 버전을 사용했다.) 이를 지원하도록 새 버전의 NAN을 릴리스했다. io.js v3에 포함된 V8의 최근 변경사항은 상당히 내용이 많고 새로운 버전의 NAN이 필요할 뿐만 아니라 NAN 자체의 호환되지 않는 API 변경사항으로 모든 의존 네이티브 모듈에서 코드를 변경해야 할 필요도 생겼다.

이는 아주 큰 변화이고 네이티브 모듈 작성자가 io.js v3 릴리스를(몇 주 내에 계속 릴리스될 것이다.) 따라 잡으려면 시간이 필요하므로 모듈 작성자는 이에 대해 테스트를 하고 업그레이드해야 한다. Node.js v4는 더 새로운 V8을 포함할 것이지만 이는 현재 버전의 NAN에서 이미 지원하고 있다. 즉, io.js v3에서 동작하도록 NAN을 업그레이드했다면 이는 node.js v4에서도 동작할 것이다. 그래서 io.js v3를 node.js v4의 “알파 버전”이라고 부르는 것이다.

Node.js v4는 io.js 릴리스에서는 제공하지 않았던 node.js 0.12의 기능뿐 아니라 io.js에서 이뤄진 개선사항을 모두 포함하고 있다.

프로젝트가 합쳐졌다는 것은 릴리스 번호도 합쳐졌음을 의미하므로 기존에 존재하는 io.js 버전 번호와 겹치는 것을 피하고자 Node.js의 버전이 v4.0으로 올라간 것이다.

이제 io.js v3를 다운로드 받고 다음의 큰 릴리스를 준비할 때이다. :)

[^1]: Technical Steering Committee로 Node.js의 방향을 정하는 위원회