Node.js 로 들어가보자.

대호 Dorant·2025년 3월 12일
post-thumbnail

어느덧, 한달 뒤면 4년차 백엔드 개발자가 되는 본인.
얼마 전, 이러한 질문을 받았다.

  • 노드를 만든 이는 누구이며, 이를 운영하는 회사는 어디냐❓
  • v8 엔진의 내부 구조는 뜯어봤냐❓

 본인은 순간적으로 대답을 하지 못했고, 코딩을 할 줄만 알지 기초가 부족하다는 것을 깨닫게되어, Node.js의 역사부터 시작하여 본격적으로 파헤쳐보고자한다! 가보자고오오오오오오오!!

Node.js의 탄생 배경에 대해 araboza

  • 탄신일(기쁘다 노드 오셨네) : 2009년 5월 27일
  • 노드의 아버지: Ryan Dahl
  • Node.js는 2009년 라이언 달 (Ryan Dahl)이라는 개발자에 의해 만들어졌습니다!

그는 왜 Node.js를 만든걸까요?

  • 라이언 달은 당시 주류였던 Apache HTTP 서버의 성능 한계에 불만을 가지고 있었습니다.
  • 당시 서버 기술들은 동시 접속자가 많을 때 각 연결마다 스레드나 프로세스를 생성하는 방식으로 동작 했습니다. 이 방식은 메모리 사용량이 많고, 리소스를 비효율적으로 사용한다는 문제가 있었었습니다.
  • 특히, 라이언 달은 파일 업로드 진행 상태 표시에 관심이 많았다고 합니다. 기존 서버 기술로는 이런 실시간 기능을 효율적으로 구현하는 것은 매우 어려웠습니다.

결정적 아이디어의 탄생

  • 라이언 달은 이벤트 기반 프로그래밍 모델이 이러한 문제를 해결할 수 있다고 생각했습니다.
  • 당시 구글이 크롬 브라우저를 위해 개발한 V8 자바스크립트 엔진이 놀라운 성능을 보여주고 있었습니다.
  • 그는 이렇게 생각했습니다. "V8 엔진과 이벤트 기반 비동기 I/O 모델을 결합하면 어떨까? 그리고 이미 많은 개발자가 익숙한 자바스크립트를 서버에서도 사용할 수 있다면?"

2009년 JSConf EU에서의 첫 발표

  • 2009년, 라이언 달은 JSConf EU에서 처음으로 Node.js를 세상에 공개했습니다.
  • 자바스크립트를 브라우저 외부에서 실행하고, 싱글 스레드 이벤트 루프 모델로 높은 동시성을 처리한다는 개념은 많은 개발자들에게 신선한 충격을 주었습니다.
  • 관심 있으신 분들은 아래의 링크에서 멋진 라이언 달 형님의 발표 영상을 보실 수 있습니다.
    💡Node.js 발표 영상

Joyent의 지원

  • Node.js가 처음 출시된 후, 클라우드 컴퓨팅 회사인 Joyent가 라이언 달을 고용하고 2015년까지 Node.js 프로젝트를 지원하기 시작했습니다. Joyent는 Node.js의 발전에 큰 기여를 했습니다.
  • 그 후 Node.js는 Node.js Foundation으로 이관되었고, 나중에 JS Foundation과 합병하여 현재의 OpenJS Foundation이 되었습니다.

Node.js의 철학적 기반

🔸"작고 단순한 것이 아름답다." (마치 제 월급 같군요.)

  • Node.js는 Unix의 영향을 강하게 받았습니다.
  • "한 가지 일을 잘하는 작은 모듈"이라는 개념은 Node.js 생태계의 핵심입니다.
  • Node 개발자라면 다들 아시는! npm(Node Package Manager)의 등장으로 이 철학은 더욱 강화되었고, 작은 모듈들을 조합해 복잡한 애플리케이션을 구축하는 방식이 일반화되었습니다.

비동기 I/O와 이벤트 기반 프로그래밍

Node.js의 가장 중요한 철학적 기반은 비동기 I/O와 이벤트 기반 프로그래밍 모델입니다. 이는 다음과 같은 원칙을 따릅니다:

1️⃣ I/O 작업은 비동기적으로 처리한다 - 파일 읽기, 네트워크 요청 등 시간이 오래 걸리는 작업은 메인 스레드를 차단하지 않고 백그라운드에서 처리합니다.
2️⃣ 콜백과 이벤트를 통한 제어 흐름 - 작업이 완료되면 콜백 함수나 이벤트를 통해 알립니다.
3️⃣ 논블로킹(Non-blocking) 방식 - 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 처리합니다.

왜 Javascript를 선택했는가?

라이언 달이 JavaScript를 선택한 이유는 매우 실용적이었습니다:

1️⃣ 이미 널리 사용되는 언어 - 웹 개발자들이 이미 알고 있는 언어를 사용하면 진입 장벽이 낮아집니다.
2️⃣ 이벤트 기반 프로그래밍에 적합 - JavaScript는 브라우저에서 이벤트 처리를 위해 설계되었기 때문에 이벤트 루프와 콜백 패턴이 자연스럽습니다.
3️⃣ JSON과의 자연스러운 통합 - 웹 애플리케이션에서 데이터 교환 형식으로 JSON이 널리 사용되고 있었으며, JavaScript는 이와 자연스럽게 호환됩니다.

왜 Node.js는 싱글 스레드 모델을 선택한걸까?

라이언 달의 비전

  • 그는 기존 웹 서버의 스레드.프로세스 기반 동시성 모델이 갖는 한계를 극복하고 했습니다.
1️⃣ 스레드는 비용이 많이 든다 - 각 연결마다 스레드를 할당하는 방식은 메모리 사용량이 많고, 컨텍스트 스위칭 오버헤드가 발생합니다.
2️⃣ 스레드 기반 프로그래밍은 복잡하다 - 경쟁 상태(race condition), 데드락(deadlock) 등 멀티스레딩의 복잡성은 개발자들에게 큰 부담입니다.
3️⃣ 웹 서버의 병목은 주로 CPU가 아니라 I/O(디스크, 네트워크) 작업에 있다.

이벤트 루프의 강점

1️⃣ 효율적인 리소스 사용 - 하나의 스레드로 수천 개의 동시 연결을 처리할 수 있습니다.
2️⃣ 단순한 프로그래밍 모델 - 개발자는 멀티스레딩의 복잡성을 신경 쓰지 않아도 됩니다.
3️⃣ I/O 작업에 최적화 - I/O 작업을 비동기적으로 처리함으로써 대기 시간을 효율적으로 활용합니다.

오늘은 이렇게 Node.js의 탄생 배경에 대해서 알아봤습니다. 재미들 있으셨나요!
다음 편도 기대 부탁드립니다.

profile
안녕하세요. 멋쟁이 백엔드 개발자입니다😎😎

4개의 댓글

comment-user-thumbnail
2025년 3월 12일

노드에 봄은 온다...

1개의 답글
comment-user-thumbnail
2025년 3월 12일

노드는 각성하라!

1개의 답글