Node.js 마스터 클래스 Ep 1. 왜 Node.js인가? (ft. 이벤트 루프 맛보기)
Ep 1. 왜 Node.js인가? (ft. 이벤트 루프 맛보기)
안녕하세요! Node.js 마스터 클래스의 첫 번째 시간에 오신 것을 환영합니다. 오늘은 우리가 왜 Node.js를 배워야 하는지, 그리고 Node.js가 기존의 다른 서버 기술들과 무엇이 다른지 핵심만 콕 집어 알아보겠습니다.
---
1. 브라우저 밖으로 나온 자바스크립트
과거의 자바스크립트는 웹 브라우저 안에서 애니메이션을 만들거나 버튼 클릭을 처리하는 용도로만 쓰였습니다. 하지만 2009년, 라이언 달(Ryan Dahl)에 의해 Node.js가 등장하면서 자바스크립트는 서버에서도 동작하는 강력한 언어로 탈바꿈했습니다.
Node.js는 구글의 V8 자바스크립트 엔진 위에서 동작하는 런타임(Runtime) 환경입니다. 쉽게 말해, 크롬 브라우저에서 자바스크립트를 해석하는 똑똑한 엔진을 떼어내어 내 컴퓨터(서버)에서 직접 실행할 수 있게 만든 것이죠.
2. Node.js의 핵심: Non-blocking I/O와 이벤트 루프
Node.js가 유명해진 가장 큰 이유는 "가볍고 빠르다"는 점입니다. 어떻게 싱글 스레드(한 번에 하나의 일만 처리하는 방식)이면서 수만 명의 접속자를 감당할 수 있을까요? 그 비밀은 바로 비동기(Non-blocking) I/O와 이벤트 루프에 있습니다.
레스토랑 비유로 이해하기
* 전통적인 방식 (Multi-threaded): 손님 한 명당 직원 한 명이 붙어서 주문을 받고, 주방에서 음식이 나올 때까지 손님 테이블 앞에서 기다립니다. 손님이 많아지면 직원을 계속 새로 고용해야 합니다 (메모리 낭비).
* Node.js 방식 (Single-threaded + Event Loop): 직원은 한 명입니다. 손님의 주문을 받으면 주방에 전달하고, 음식이 나오는 동안 다른 손님의 주문을 받으러 갑니다. 음식이 나오면 그때 손님에게 가져다줍니다. (효율적인 자원 활용).
이처럼 Node.js는 데이터베이스 조회나 파일 읽기 같은 시간이 걸리는 작업을 기다리지 않고 다음 작업을 수행합니다. 작업이 완료되면 '이벤트'를 발생시켜 나중에 처리하죠.
3. 왜 Node.js를 선택해야 할까?
1. Full-stack 개발: 프론트엔드와 백엔드 모두 자바스크립트 하나로 개발할 수 있습니다.
2. 거대한 생태계 (npm): 세상에서 가장 큰 오픈소스 라이브러리 저장소인 npm을 통해 필요한 기능을 바로 가져다 쓸 수 있습니다.
3. 빠른 생산성: 스타트업이나 실시간 채팅, 스트리밍 서비스 등을 만들 때 압도적인 속도를 자랑합니다.
---
🛠️ 오늘의 미션
Node.js가 설치되어 있다면, 터미널(또는 CMD)을 열고 아래 코드를 실행해 보세요!
1. `hello.js` 파일을 만듭니다.
2. 아래 내용을 입력합니다.
console.log("1. 주문을 받았습니다.");
setTimeout(() => {
console.log("2. 요리가 완성되었습니다! (3초 후)");
}, 3000);
console.log("3. 다음 손님 주문을 받습니다.");
3. 터미널에서 `node hello.js`를 실행합니다.
결과가 어떤 순서로 나오나요? 1 -> 3 -> 2 순서로 나온다면, 여러분은 이미 Node.js의 비동기 원리를 체험하신 겁니다!
🔗 다음 예고
내 코드를 깔끔하게 나누고 재사용하는 법, "모듈 시스템(CommonJS vs ESM)"에 대해 알아보겠습니다. 다음 시간에 만나요!