Web Front-end 개발을 할 때, Node.js는 너무나 중요합니다. 자바스크립트 기반 모두 NPM(Node Package Manager)이 구축해 놓은 발판 위를 걷고 있기 때문입니다. NPM은 Node.js가 없으면 실행되지 않습니다. Node.js를 설명할 때, 단순히 백엔드 서버를 이야기 하곤 하지만 실은 JavaScript 런타임입니다. 자바스크립트가 돌아가는 환경을 제공해주는 Node.js를 소개해볼까 합니다.

내용의 출처: https://www.youtube.com/watch?v=LB8KwiiUGy0

Ryan Dahl, Node.js와 Deno의 제작자이며 수학 분야를 전공한 소프트웨어 엔지니어.

Node.js는 지금으로 오래된 제품입니다. Node.js를 처음 만들 때 추구했던 목표는 개발자들이 비동기 I/O만 사용하도록 강제해서 최적의 서버를 쉽게 구축할 수 있도록 하는 것이었고, 요즘은 이것이 표준이 되었습니다. 기본적으로 모든 플랫폼에서 Non-Blocking I/O를 활용하고 있지만, 2008년에는 그렇지 않았습니다.

Node.js의 시작

2007년, Ryan은 뉴욕 북부에서 수학을 전공하는 대학원생으로 박사 학위를 공부하고 있었습니다. Ryan은 이 일이 좋았지만 실용적이진 않았다고 합니다. Ryan은 사람들이 하는 일과 더 관련된 일을 하고 싶었고, 그렇게 대학원을 중퇴하게 되었습니다.

Ryan은 우연히 남미로 이사를 갔고, 크레이그리스트(Craigslist)를 통해 프로그래밍에 입문하게 되었습니다.

Ryan이 어떤 스노보드 회사의 스노보드 마케팅 웹사이트를 만들고 있을 때의 일 입니다. 사람과의 상호작용을 위해 이 웹사이트를 Ruby on Rails로 만들어 보았는데 느렸습니다. 그래서 다른 걸로 구현해야 함을 느끼고 Nginx 모듈, 저수준 기술 및 웹 스택에 관해서 작업을 하게 되었고, 여기서 Ryan의 자리를 찾게 되었습니다.

Node.js은 Non-Blocking

Ryan은 20대에 퀄른에서 2년간 지내면서 다양한 프로젝트를 진행할 수 있는 공간이 생겨서 기뻤다고 합니다.

2009년, V8이 출시된 당시 Ryan은 Non-Blocking 서버를 다룰 때의 문제에 고민을 하고 있었습니다. 대화형 웹사이트는 사실상 존재하지 않았고, Ryan은 Node.js를 Non-Blocking으로 만들어서 사람들이 널리 사용하게 하고 접근할 수 있게 하고 싶었습니다. 그리하여, 퀄른에서 2월부터 10월까지 8개월 간 풀타임으로 작업하여 Node.js 첫 번째 버전을 만들었습니다.

# Isaac Schlueter

Node.js가 처음 출시되었을 당시, Isaac은 Yahoo!에서 일하고 있었고 PHPJavaScript 사이에서 컨텍스트를 전환해야 하는 것에 피곤함을 느끼고 있었습니다.

백엔드는 PHP를 쓰고, 프런트엔드에는 JavaScript를 사용하니 “둘 다 프로그래밍 언어인데 서버에 JavaScript를 두는 게 왜 안될까?”라고 생각했습니다. 그러나, 찾아보니 그 일을 해내려는 사람들이 있었습니다. Kevin DangoorKris Kowal, 그리고 소수의 사람들이 ServerJS 그룹을 만들었고, 서버 측 플랫폼에 대한 사양을 마련하고자 했습니다.

그러나 Node.js는 예상치 못한 곳에 나타났습니다.

Ryan - “저는 실제 사용자가 Node.js 사용할 수 있으려면 고급 언어가 필요하다는 걸 깨달았습니다. 나는 PtyhonLua, Haskell을 다루었는데 2009년 1월 쯤, 친구와 함께 앉아서 이런 생각이 떠올랐습니다. JavaScript! 그 순간에 ‘바로 이 언어구나’라는 생각이 분명해졌고, 그렇게 추진하게 되었습니다.”

Isaac Schlueter와 Node.js

Ryan은 특정한 종류의 I/O 패러다임이 있는 JavaScript는 개발자 커뮤니티의 완벽한 폭풍 같았습니다. JavaScript에는 정말 좋은 런타임이 많이 있었습니다. RubyPython은 기존 코드가 모두 I/O에 대해 동기적 접근 방식을 사용하고 있기 때문에 사용하기 힘들었습니다.

Isaac이 처음 접한 건 Node.js@0.0.2 였고, Isaac의 Mac에서는 빌드되지 않았기에 이건 분명히 망가졌고 아무것도 안될거라고 생각했습니다.

Isaac은 이전에 서버 사이드 JavaScript로 게임을 만들어서 스택이 무엇을 할 수 있는지 알아보고 실제로 사용해 보았습니다.

Isaac은 Yahoo!에서 서버 사이드 JavaScript 강의를 했습니다. 동료들과 작은 Tic-TacToc의 멀티 플레이어 게임을 만들었고, Isaac의 기술 토크가 끝난 후 누군가 다가와서 Node.js를 사용해보라고 했습니다. Isaac은 Node.js@0.0.2의 이유로 안된다고 했지만, 그 누군가는 이제는 될거라고 이야기 했습니다. 다시 보니 Node.js@0.0.6 이었고, 그 버전은 빌드가 되었습니다. 사용해보니 Isaac은 Node.js가 훨씬 낫다고 생각했습니다.

npm(노드 패키지 매니저)

시간이 흘러 점점 더 많은 유저들이 나타났고, Isaac은 Node.js에 패키지 매니저가 필요하다고 생각했습니다. 그렇게 npmNode.js 프로그램에서 호출한 bash 스크립트로 시작되었습니다. 야후가 내부적으로 개발하기 위해 사용한 패키지 매니저인 Yinst의 패러다임과 접근 방식을 많이 모방했습니다.

npm은 누구나 무엇이든 게시할 수 있기에 사람들이 금방 적응했습니다.

JSConf EU

Ryan은 일종의 초기 버전을 만들어서 베를린에서 열리는 첫 번째 JSConf EU에서 선보였습니다.

Ryan - “저는 Node.js에 대해 간단하게 이야기 할 것입니다. Node.js는 서버 사이드 JS 플랫폼이고, 구글의 V8 기반으로 만들어졌습니다.
제가 만들고 싶었던 것은 Non-Blocking instructure로 매우 높은 동시성 서버를 만들 수 있고, 이에 대해 알 필요가 없습니다. 우리는 어려운 Non-blocking Event Loop를 모두 추상화 할 것입니다. 이게 어떻게 되어 있는지 여러분들은 알 필요가 없습니다. 그저 콜백일 뿐입니다.”

JSConf에서 모두가 토이 프로젝트를 발표하고 있었지만, Ryan이 작업하던 것은 정말 심각한 토이 프로젝트였습니다.

Ryan - “Node.js로 IRC 서버를 작성했습니다.”

청중이 접속할 수 있는 채팅 서버와 같고 모든 것이 JavaScript로 작성되어 있었습니다. 2009년 당시에는 이건 정말 엄청난 개발이었습니다. “JavaScript로 이걸 만들 수 있습니다. 우리 모두가 실시간으로 연결해서 채팅할 수 있습니다.”

이 일로 인해 Node.js 프로젝트는 제대로 시작하게 되었습니다. 많은 사람들이 이 이야기를 보고 참여하게 되었습니다.

# Mikeal Rogers

2009년에는 Mikeal은 주로 Python을 썼지만, 당시 모질라에서 일하면서 JavaScript도 조금 사용했습니다. JSConf 컨퍼런스를 운영하던 친구 Jan이 Node.js 프로젝트에 관해 이야기를 해주었고, 알아보기 시작했습니다.

Mikeal은 JavaScript에 대해 많은 것을 알고 있었기에 조사해봐야겠다고 생각했습니다.

가장 먼저, Mikeal은 트위터에 Node.js에 프록시를 쓴 적이 있는지 물어봤고, 일주일이 지나도 답을 듣지 못하였으며 실제로 아무도 HTTP 프록시를 작성한 적이 없었습니다. 그래서 HTTP 프록시를 가장 먼저 만들고 싶었습니다.

Mikeal은 Python 프록시를 만드는데 약 4년을 보냈습니다. Python에서 만들 수 있는 최적화된 프록시였습니다. 그러나, JavaScript로는 4시간 만에 프록시를 만들었는데 꽤 잘 동작했습니다. Python 프록시와 벤치마크를 비교해보았는데 Python 프록시는 충분하지 못했던 것 같습니다. Python에 회의감이 들었습니다. Mikeal은 모질라에게 말했습니다. “나는 더 이상 Python을 쓰지 않고 이걸(Node.js) 쓸거야.” Mikeal은 Python 프로그래머로 일했지만 더 이상 시간을 낭비하고 싶지 않았습니다.

Isaac Schlueter와 Ryan Dahl의 만남.

당시에는 프로그래머를 위한 확립된 채널이 없었습니다. 슬랙, 디스코드도 없었고 깃허브도 매우 원시적이었습니다. 사람들이 패치를 이메일로 보내면 그것을 고쳐서 적용하곤 했습니다.

Isaac은 Node.js를 사용하기 전까지 Ryan을 몰랐습니다. IRC 채널에서 그가 독일에 있다고 해서 독일 사람인 줄 알았습니다. 당시 Mikeal은 CommonJS 그룹이 추진하고 사양에 대해 일종의 홍보 활동을 하고 있었습니다. 그러던 중 어떤 사람이 다가와서 인사했습니다. 그는 자신이 Ryan이라고 소개했습니다. 그래서 Isaac은 “오! 영어를 참 잘하시네요”라고 말했고, Ryan은 “음, 저는 샌디에이고에서 자랐으니 그럴 수 밖에요.”라고 대답했습니다.

Node.js와 Joyent.

JSConf 프레젠테이션이 끝난 직후, 여러 회사에서 접근해왔습니다. 그들은 “Node.js와 관련해서 뭔가 하고 싶습니다.”라고 말했습니다. Ryan은 이 프로젝트에 자금을 지원할 방법을 찾기 위해 샌프란시스코에 가서 몇몇 사람을 만났습니다. Ryan이 Node.js를 개발을 계속해야 한다고 느꼈습니다. Ryan의 자금으로는 계속할 수는 없었고, 그 중 Joyent 회사에서 가장 좋은 제안을 해주었습니다.

Joyent

그들은 클라우드 컴퓨팅을 구축하고 있었고, Node.js가 이 호스팅에서 작동하도록 하고 싶어했습니다.

Joyent는 꽤 오랫동안 호스팅 회사였지만 마켓팅과 사업, 서비스는 실제로 더 기업적인 것들을 타겟으로 했습니다. Mikeal은 Joyent가 누구인지 잘 몰랐고, 그저 스폰서십이 생겨서 계속 일할 수 있고 멋지다고 생각했습니다. 그렇게 샌프란시스코로 이사가서 그들과 함께 일하기 시작했습니다.

Ryan은 풀타임 Node.js 작업을 계속했습니다. 당시 Joyent 소프트웨어에서도 일할 생각이 있었고 문제는 없었다고 합니다. Ryan은 서버와 호스팅 기술, 그런 종류의 것에 관심이 있었지만 Node.js는 점점 더 인기를 끌었고, 시간이 지날수록 이 일이 진중하게 진행되고 있었습니다. 결국, Ryan은 Joyent에서 Node.js 작업 외에는 아무것도 하지 않게 되었습니다.

당시, Isaac은 Node.js 호스팅과 같은 일을 하려는 회사로 이직을 고려 중이었습니다. Ryan은 Isaac에게 “No, Stop, No, No, No.”라고 했습니다. Joyent에서 Isaac을 고용했고, Node.js에 큰 투자를 하고 있으며, Isaac은 여기에 속해 있고, 이 팀에 합류하여 Node.js 작업을 해야한다고 했습니다. 그 말을 들은 Isaac은 생각해보니 그게 훨씬 낫다고 생각했습니다.

# Bert Belder

Bert는 당시 건설 회사의 자동화를 담당하는 스타트업에서 일했는데, 대규모 프로젝트에서 유일한 엔지니어인 경우 할 일이 너무 많았습니다. 대규모 데이터베이스 마이그레이션을 수행해야 했고, Bert는 데이터베이스 마이그레이션을 완료하기 위해 Node.js를 사용했습니다. 여러 가지 작업을 병렬로 진행하게 된 것입니다. 그 덕에 하룻밤 사이에 작업을 완료할 수 있었습니다.

Node.js는 프로그래밍의 미래가 될 것이라 생각했습니다.

불안정한 Node.js 버전 배포

Ryan은 “모든 Node.js 프로그램을 깨고 새로운 버전을 푸시했습니다. 이제 모든 API가 변경되었습니다!” 라고 했었습니다.

0.2를 릴리스하고 0.3은 불안정하게 만들었습니다. 그리고 0.4는 안정되게 만드는 계획을 세웠는데, 그 당시 중요한 사항을 보장하지 않는 유일한 때 였습니다.

이 때, 모듈의 이름을 sysutil로 바꾸는 작업이 있었는데, 망가질 염려가 없는 쉬운 작업이었습니다. 그냥 모듈만 변경되면 되었지만 사람들은 겁을 먹었고, 아무도 Ryan을 이해할 수 없었습니다.

Ryan은 프로젝트마다 성숙도 수준이 다르며, 초기 단계일 때는 빠르게 움직이고 분해하고, 필요한 방식으로 작업을 진행하기에 Node.js는 초기 단계여서 빠르게 움직이고 분해하고, 필요한 방식으로 작업해야 한다고 이야기 했습니다.

Ryan - “1.0에 대한 완벽하게 정리된 로드맵은 없습니다. 먼 미래이기 때문입니다. 0.6을 작업하고, 기본적인 부분을 다시 작업한 다음 해당 질문을 다시 논의할 것입니다.”

Isaac은 분명히 초기에는 Ryan의 결정이 어느정도 성장을 저해했지만 그것이 실제로 정말 올바른 선택이었다고 생각했습니다. 인기를 얻게 되면서 일이 훨씬 더 어려워졌기 때문입니다.

Node.js를 Joyent에 팔았다.

Joyent에서 일한 지 1년 쯤 되었을 때, Joyent에서 Node.js 프로젝트를 사고 싶다고 했습니다. 그러나 이건 오픈소스 프로젝트인데 괜찮냐고 물었고, 그들은 프로젝트를 관리하고 상표와 웹사이트를 소유하고 이를 이용해 회사를 홍보하고 싶어했습니다.

Ryan은 그렇게 거래를 했고, 가난하지 않은 채로 떠났기에 기분은 좋았다고 합니다.

Isaac은 Node.js 메일링 리스트를 보다가 “Joyent가 Node.js를 인수하면 Node.js에 무슨 의미가 있는지, Joyent가 변질되게 하지 않을지” 의문을 제기한 사람이 있었습니다. 그러자 Isaac은 이렇게 대답했습니다.

Isaac - “뭐가 대단한데요? 오픈소스에는 이런 패턴이 있잖아요. 코드가 MIT 라이선스인 것처럼요. 만약, Joyent가 사악해진다면 우리는 이 코드를 가져다가 새로운 이름을 붙일 수 있습니다.”

Node.js의 Windows 지원.

2011년, Node.js는 MacOS와 Linux에서는 실행되었지만 스타트업에서 일하는 엔지니어들은 모두 Windows를 사용했습니다. 이론적으로는 서버에 배포할 수는 있었지만 그걸로 개발할 수는 없었습니다. Bert는 이것을 고쳐야겠다고 생각했고. Windows에서 작업할 수 있게 만드는게 생각보다 복잡했습니다. Windows가 작동하는 방식이 MacOS 및 Linux 비동기 I/O에 접근하는 방식이 매우 다르기 떄문입니다. 요즘은 비동기 I/O가 어디에나 있기 때문에 조금 이상해 보일 수 있지만 당시에는 그렇지 않았습니다.

그래서 Node.js에 참여하게 되었습니다. 그러나 빠르지도 좋지도 않은 최초의 프로토타입을 만들어냈습니다. 당시 이 주제에 대한 모든 논의는 메일링 리스트에서 이루어졌고, Ryan은 Bert에게 “좋아, 그게 가능하다는 걸 보여줘”라고 했습니다.

libuv와 Windows

libuv는 Ryan의 아이디어였습니다. libuv는 기본적으로 select라는 함수를 감싸는 wrapper입니다. 그러나 select는 매우 오래되었고, 모든 운영체제에 있지만 매우 느렸습니다. 그래서 빠르게 실행되고 확장성이 뛰어난 런타임을 만들고 싶다면 select를 사용하면 안되었습니다. 리눅스랑 맥OS에서는 사용했지만 Bert는 Windows에서는 libuv를 사용하지 않도록 하였습니다.

그러나 Ryan은 이를 좋아하진 않았습니다. 운영체제에 따라 코드를 분기하면 Node.js 코드가 매우 복잡해지기 때문입니다. 그래서 가능하면 libev와 비슷한 우리만의 라이브러리를 작성하되 모든 운영 체제에서 작동하는 추상화를 노출하자는 것이었습니다.

Node.js가 Windows에서 정말 훌륭했던 이유는 Bert와 Ben Noordhuis이 Windows에서 정말 훌륭하게 만들었기 때문입니다. StackOverflow가 모든 사람이 프로그래밍에 대한 모든 질문에 답할 수 있는 장소가 되었을 때, 많은 Node.js 질문이 StackOverflow에 올라갔습니다. 웹 백엔드 작업에 .NET을 더 이상 사용하면 안된다는 생각을 하기 시작했을 때, 그들은 Node.js를 살펴보기 시작했고, Windows에서 정말 좋은 경험을 주었습니다.

그러나 StackOverflow에서는 우리(관리자들)가 전혀 알지 못했던 커뮤니티를 만들었고, 일부 틀린 답변을 주고 받고 있었고, 관리자들이 이에 관심을 가져야겠다고 생각하여 스택오버 플로에 Node.js 질문할 때마다 대답하는 작은 봇을 만들었습니다. 그렇게 우리는 소프트웨어 문제에 대한 가장 큰 규모의 답변 커뮤니티를 만들었습니다. Node.js가 Widnows에 적합하지 않았다면 이런 일이 일어나지 않았을 것입니다.

Goob Bye, Ryan Dahl

오랫동안 커뮤니티를 성장시킨다는 것은 Node.js 자체를 더 좋게 만드는 것을 의미했다. 버그를 수정하고 성능을 개선하고 Windows에서 컴파일되고 실행되는지 확인했습니다. 한동안은 병목을 일으켰지만 지금을 꽤 잘 돌아가고 있습니다.

어느 날, Ryan은 Isaac에게 말했습니다.

“내가 이 일을 시작한지 3년이 넘었어. 6개월 이상 지속된 프로젝트는 이번이 처음이야. 나한테는 자연스러운 일이 아니야. 나는 지쳤어. 전액 투자해서 받은 돈도 싫어.”

라고 말했습니다. 회사는 Node.js를 사들였고, 회사가 관리할 것이며, Ryan은 통제권을 명확히 포기했고, 돈도 받았으니 이 시점에서 자신의 역할은 끝났다고 이야기 했습니다.

그렇게 Ryan은 떠났습니다.

Ryan의 뒤를 이어받은 Isaac은 Node.js 프로젝트를 담당하는 주요 인물로 시작했습니다. 그러나 Ryan과 같은 수준의 도덕적 권위는 Isaac에게 없었습니다. Isaac은 Node.js 발명한 사람이 아니었습니다. 큰 부분을 개발했지만 Ryan만큼 잘 이해하지 못하였고, 팀의 나머지 핵심 개발자에게 의지해야 했습니다.

아무도 Isaac Schlueter를 궁금해 하지 않았다.

Ryan이 떠났을 때 관심 있는 일에만 집중할 수 있는 선례를 만들어서 완벽하다고 평가를 받았습니다. 그 뒤를 이어받은 Isaac이 Node.js의 책임자가 되었을 때, 아무도 Isaac이 책임자가 되었는지 궁금해하지 않았습니다. 그가 npm을 만들었다고 썼듯이 말입니다.

책임자가 바뀌는 과정에서 일부 프로젝트와는 이전과 같은 관계를 유지하지 못했고, 일부 기여자들과의 일을 더 어렵게 만들었다고 생각합니다. 그래서 Isaac이 프로젝트를 운영하는 동안에도 기여자들 간의 관계가 매우 나빠졌습니다.

Joyent는 Node.js 회사이고, Isaac은 Node.js의 리더이며, 그가 말하는 것을 믿고, 그의 지시를 따른다는 것을 알렸습니다. 그것은 일종의 Node.js가 여전히 살아있다는 것을 알리고, Ryan이 떠났어도 걱정하지 말라는 것을 위해 말하였습니다. 하지만 이는 기업의 앞잡이로 생각하는 듯한 이상한 효과도 가져왔습니다.

# Myles Borins

Myles는Node.js@0.6부터 노드를 사용했는데, 아마 2011년 후반이나 2012년 초반에 일 것입니다. 온타리오 예술 디자인 대학에서 미술을 전공했고, 현장 기반 설치 작업을 많이 하고 있었습니다. 대규모 교육용 설치물을 만드는 데 특히 관심이 있었고, 사람들이 공간에 들어와서 휴대폰을 열고 설비를 제어할 수 있게 만들고 싶었습니다.

웹 기술을 이용하고 싶어서 Open Sound Control이라는 프로토콜을 발견했습니다.

Open Sound Control을 쓰기 위해 PHP로 하는 방법에 대한 튜토리얼을 찾았는데 작동하지 않았고, Python으로 하는 방법에 대한 튜토리얼을 찾았는데 작동하지 않았습니다. 그러다가 Node.js로 하는 방법에 대한 튜토리얼을 찾았는데 그 역시 작동하진 않았지만 디버깅하고 작동시킬 수 있을 만큼의 JavaScript 지식은 있었습니다. 15~20분 만에 프로토타입이 완성되었습니다.

Isaac Schlueter도 Node.js를 떠나고, TJ가 새로운 리더가 되다.

Isaac도 Ryan을 따라 Joyent를 떠났습니다. 그러나, Node.js에 지쳐서가 아니라 방치해두었던 npm을 꼭 고쳐야 했기 떄문입니다. Node.js 프로젝트를 운영하는 동안 npm은 전혀 다루지 않았습니다. Isaac은 이 문제를 처리해야 했고, 기분은 좋지 않았습니다. 이후에 TJ를 새로운 리더로 세웠습니다.

Mikeal은는 Joyent의 사람들과 이야기를 나누며 TJ를 알고 있었습니다. 그를 좋은 사람었던 걸로 기억합니다. 그가 프로젝트를 맡는 것에는 아무런 문제가 없지만 프로젝트의 문제인 것처럼, Joyent 문제인 것처럼 메시지를 보내야 한다고 말했었습니다.

이는 프로젝트를 올바른 방향으로 이끌어 가고 싶다면 효과적인 선택은 아니었습니다. TJ는 더 적은 사람들과 일하고 싶어 했고, 그렇게 기여자는 줄어들었습니다.

TJ가 책임자가 된 이후 Joyent에서는 커뮤니티 기여를 더 이상 허용하지 않았고, V8 업데이트 같은 것에도 관심이 없었습니다. Node.js는 노후화되기 시작했고 사람들이 사용하고 싶어하는 언어적 기능이 부족해졌습니다.

컨퍼런스 중 - “Node.js는 정말 좋은 기술이에요. 저는 회사를 Node.js에 걸고 싶지만 Joyent에는 걸지 않을거예요. 저는 Joyent가 아마추어적이고 어쩌면 조금 유치한 일을 하는 것을 봤습니다. 그래서 저는 그것을 포크해서 커뮤니티에 돌려주고 싶습니다.”

Scott Hammond (CEO @Joyent 2014 ~ 2018)

Scott은 Node.js가 Joyent에 중요한 프로젝트라는 걸 알고 있었고, Node.js가 훨씬 광범위한 개발자 커뮤니티 전체에 매우 중요한 프로젝트라는 걸 알고 있었습니다. 그래서 처음 Joyent에 도착했을 때 프로젝트의 주요 이해 관계자들을 많이 만나면서 많은 시간을 보냈습니다. 각기 다른 측면에서 핵심 이해 관계자를 모아서 문제를 실제로 조사하고 Node.js가 무엇을 해야 하는지 대한 합의에 도달하고 싶어했습니다.

Scott은 해야 할 일을 기여자들이 프로젝트 작업에 대해 더 많은 통제력을 가질 수 있는 이러한 기여 모델을 증명하는 것으로 정하였습니다. Scott은 Node.js의 대규모 사용자를 잃을까봐 걱정했습니다.

Node.js@4.0

당시, Joyent는 Node.js를 제대로 관리하지 못하는 것 같았습니다. 커뮤니티의 감정은 즉각적이고 깊어갔습니다. 모두가 “자, Node.js는 멈췄고 io.js가 최신 유행이야. 모구가 지금은 io.js를 쓰고 있어!”라고 말하였습니다.

io.js의 첫 번째 릴리스에는 최신 V8 엔진이 탑재되었고 모든 사람들이 오랫동안 원하던 많은 기능이 들어갔습니다. 하지만 그 당시, Joyent는 매우 화가났습니다. Joyent에게는 항상 io.js가 무언가를 빼앗은 것처럼 느껴졌고, io.js 관점에서는 Joyent에게 무료 노동을 하지 않는 것 뿐이었습니다.

Joyent에서는 회사의 이익을 위해서는 Node.js의 관리자가 될 필요는 없지만, Node.js는 프로젝트로서 통합되고 성공적이며 매우 광범위하게 채택되고 기여해야 한다는 결론을 내렸습니다. 앞으로 건강하고 활기찬 노드가 필요했습니다.

Node.js에는 실제로 정책이나 거버넌스가 없습니다. 그 시점에서 리눅스 Foundation에서 거버넌스 문제를 해결해 줄 수 있는지 물었습니다. Node Forward가 무엇을 하려고 하는지, io.js 가 무엇을 하는지에 대해 많은 당혹감이 있었지만, Node.js는 그 그룹에서 몇 가지 아이디어를 가져와 프로젝트가 앞으로 운영되는 방식에 접목했습니다.

Scott은 실제로 Node.js 커뮤니티에 매우 긍정적인 결과를 가져온 방식으로 해냈다고 생각합니다. Node.js@0.12에 들어간 약간의 작업은 io.js 버전 1 또는 2에 있던 것과 다소 충돌했기 때문에 정렬하기 위해 약간의 기술 작업이 필요했습니다.

하지만, Node.js의 다음 버전이 io.js와 Joyent Node.js를 합친 Node.js@4.0 이었습니다.


이 이야기의 가장 긍정적인 부분은 어떤 개인적인 갈등에도 불구하고, 어떤 기업의 입장에도 불구하고 Node.js가 여전히 강력하다는 것입니다. 여전히 문화를 바꾸고 있습니다.

Mikeal은 몇 년 동안 Node.js Foundation을 운영했고 Node.js에서 리더십 역할을 수행한 사람들의 긴 행렬에 합류한 후 떠나서 지금 그 문제를 해결하는 데 더 관심이 있는 사람들에게 넘겼습니다. 이렇게 관심 있는 사람에게 넘기는 것이 프로젝트를 계속 살아있게 하는 것입니다.


앞서 조사한 바에 의하면 Joyent는 2016년에 삼성전자에 인수되었고,

Node.js Trademarks Transferred to OpenJS Foundation에 의하면, 2022년에 상표의 관리자를 OpenJS Foundation로 넘겨졌습니다.

이 글을 통하여서 Node.js가 걸어온 역사에 살펴보았습니다. Ryan Dahl로부터 시작된 것은 맞지만 개인적으로 Scott의 역할이 너무나도 컸다고 생각합니다. 사업가의 측면에서 Node.js를 방치하면서 상표권을 무기로 삼을 수 있었겠지만, Node.js의 정상화에 관심을 가져주어서 지금의 Node.js가 될 수 있었다고 생각합니다.

Node.js 다큐멘터리를 정리하여서 옮기긴 했지만, 정리하는 과정에서 다양한 사실과 수 많은 사람들이 노력하여 이뤄낸 결과물이란 것을 깨달았습니다.

추가

0개의 댓글

Powered by GraphCDN, the GraphQL CDN