📘 17.4.1 Node.js가 뭐예요? - 자바스크립트의 새로운 놀이터
그동안 자바스크립트는 웹 브라우저라는 작은 울타리 안에서만 살아왔습니다. 마치 창문 너머 바깥세상을 바라보며 언젠가는 그곳으로 나가고 싶어 하는 아이처럼요. 그런데 어느 날, Node.js라는 다리가 놓였습니다. 이제 자바스크립트는 브라우저 너머 더 넓은 세상으로 발걸음을 내딛을 수 있게 되었어요.
오늘 우리는 그 새로운 세계의 문턱에 서서, 자바스크립트가 펼쳐나갈 가능성들을 함께 들여다보려 합니다.
🧠 먼저 용어를 알아볼까요?
새로운 길을 걷기 전에, 우리가 알아두어야 할 말들이 있습니다.
용어 | 의미 |
---|---|
Node.js | 브라우저 밖에서도 자바스크립트를 실행할 수 있게 해주는 특별한 환경입니다. |
서버 | 다른 컴퓨터들의 요청을 받아서 응답해 주는 프로그램이나 컴퓨터를 말합니다. |
실행 환경 | 프로그래밍 언어가 실제로 작동하는 환경을 의미합니다. |
이벤트 기반 처리 | 특별한 일이 생겼을 때만 반응하는 똑똑한 처리 방식입니다. |
✨ Node.js의 핵심 개념
Node.js는 자바스크립트에게 날개를 달아준 선물 같은 존재입니다. 원래 자바스크립트는 웹 브라우저라는 정해진 무대에서만 연기할 수 있었는데, Node.js가 나타나면서 컴퓨터의 어느 구석에서든 자유롭게 활동할 수 있게 되었거든요.
이제 자바스크립트는 웹페이지를 꾸미는 일뿐만 아니라 서버를 운영하거나, 파일을 다루거나, 다른 프로그램들과 소통하는 일까지 할 수 있게 되었습니다. 마치 한 방에만 머물던 사람이 갑자기 온 집을 자유롭게 다닐 수 있게 된 것처럼요.
Node.js가 가진 가장 아름다운 특징은 여러 가지 일을 동시에 능숙하게 처리할 수 있다는 점입니다. 마치 숙련된 요리사가 여러 개의 요리를 동시에 완성해내는 것처럼, 많은 요청들을 효율적으로 처리할 수 있어요.
비유로 이해하기: 자바스크립트의 새로운 놀이터
Node.js를 조금 더 친근하게 이해하기 위해 '놀이터의 확장'으로 생각해볼게요.
처음에 자바스크립트는 웹 브라우저라는 작은 놀이터에서만 놀 수 있었어요. 그곳에서는 웹페이지를 아름답게 꾸미고, 사용자들과 즐겁게 상호작용하고, 움직이는 애니메이션을 만드는 일들을 했죠. 하지만 그 놀이터 밖으로는 나갈 수 없었습니다.
그러던 어느 날, Node.js가 나타나서 자바스크립트에게 거대한 새로운 놀이터를 선물해주었어요. 이 새로운 공간에서는 컴퓨터의 파일을 읽고 쓸 수도 있고, 다른 컴퓨터와 대화를 나눌 수도 있고, 심지어 자신만의 서버라는 집을 지을 수도 있게 되었답니다.
이제 자바스크립트는 두 개의 놀이터를 오가며 훨씬 더 다양하고 의미 있는 일들을 할 수 있게 되었어요.
🎯 Node.js를 배우는 이유
그렇다면 우리는 왜 Node.js를 배워야 할까요? 여러 가지 소중한 이유들이 있습니다.
첫째로 하나의 언어로 모든 것을 만들 수 있어요. 이전에는 웹사이트의 앞부분은 자바스크립트로, 뒷부분은 다른 언어로 만들어야 했어요. 하지만 Node.js 덕분에 이제 자바스크립트 하나만 알아도 완전한 웹사이트를 만들 수 있게 되었습니다.
둘째로 실제로 사용되는 기술이에요. 넷플릭스, 우버, 페이팔 같은 유명한 회사들이 모두 Node.js를 사용해서 서비스를 만들고 있어요. 우리가 배우는 것이 실제 세상에서 정말 쓸모 있는 기술이라는 뜻이죠.
셋째로 빠르고 효율적이에요. Node.js는 많은 사람이 동시에 사용하는 서비스를 만들 때 매우 뛰어난 성능을 보여줘요. 마치 교통정리를 아주 잘하는 경찰관처럼, 많은 요청들을 차례차례 똑똑하게 처리해줍니다.
마지막으로 배우기 어렵지 않아요. 우리가 이미 자바스크립트를 알고 있다면, Node.js를 배우는 것은 큰 부담이 아니에요. 새로운 언어를 배우는 것이 아니라, 아는 언어의 활용법을 늘리는 것이거든요.
⚙️ Node.js의 특별한 능력들
Node.js가 가진 특별한 능력들을 하나씩 살펴보겠습니다.
첫 번째 능력: 이벤트 기반 처리
Node.js는 무언가 특별한 일(이벤트)이 일어날 때만 행동해요. 마치 현관문에 벨소리가 들릴 때만 문을 열어주는 것처럼, 필요할 때만 반응하는 지혜로운 방식이에요.
두 번째 능력: 여러 일을 동시에 처리
일반적인 프로그램은 한 번에 하나씩만 일을 처리하지만, Node.js는 여러 가지 일을 동시에 처리할 수 있어요. 마치 요리를 하면서 동시에 설거지도 하고 전화도 받을 수 있는 능력이 있는 것과 같아요.
세 번째 능력: 다양한 운영체제에서 작동
Windows, Mac, Linux 등 어떤 컴퓨터에서든 Node.js는 잘 작동해요. 마치 어떤 집에 가서도 잘 적응하는 친구같은 특성이 있어요.
🧪 Node.js 첫 걸음 내딛기
이제 실제로 Node.js를 사용해보는 시간을 가져보겠습니다.
🔹 예제 1: 첫 번째 Node.js 프로그램 만들기
가장 간단한 Node.js 프로그램부터 시작해보겠습니다.
// hello.js 파일을 만들어요
// 콘솔에 인사말을 출력해보겠습니다
console.log("안녕하세요, Node.js 세상!");
// 현재 시간도 함께 보여주겠습니다
const now = new Date(); // 현재 날짜와 시간을 가져와요
console.log("지금 시간은:", now.toLocaleString()); // 사람이 읽기 쉬운 형태로 변환해요
// 간단한 계산도 해보겠습니다
const myAge = 10;
const friendAge = 11;
const totalAge = myAge + friendAge; // 우리 나이를 더해요
console.log(`우리 나이를 합치면 ${totalAge}살이에요!`);
이 파일을 저장한 후, 컴퓨터의 터미널에서 node hello.js
라고 입력하면 프로그램이 실행됩니다. 브라우저 없이도 자바스크립트가 실행되는 것을 볼 수 있어요!
🔹 예제 2: Node.js만의 특별한 정보 확인하기
Node.js에서는 브라우저에서 볼 수 없는 특별한 정보들을 확인할 수 있어요.
// system-info.js 파일을 만들어요
// Node.js가 제공하는 특별한 정보들을 확인해보겠습니다
// 현재 사용 중인 Node.js 버전을 확인해요
console.log("Node.js 버전:", process.version);
// 어떤 운영체제에서 실행되고 있는지 확인해요
console.log("운영체제:", process.platform); // 'win32', 'darwin', 'linux' 등
// 현재 작업하고 있는 폴더가 어디인지 확인해요
console.log("현재 폴더:", process.cwd()); // 현재 작업 디렉토리 경로
// 이 프로그램이 얼마나 오래 실행되었는지 확인해요
console.log("실행 시간:", process.uptime(), "초");
// 메모리를 얼마나 사용하고 있는지 확인해요
const memory = process.memoryUsage(); // 메모리 사용량 정보를 가져와요
console.log("메모리 사용량:", Math.round(memory.rss / 1024 / 1024), "MB");
이런 정보들은 브라우저 자바스크립트에서는 볼 수 없는 Node.js만의 특별한 기능이에요.
🔹 예제 3: 간단한 자기소개 프로그램 만들기
조금 더 재미있는 프로그램을 만들어보겠습니다.
// profile.js 파일을 만들어요
// 나의 정보를 변수에 저장해보겠습니다
const myName = "지수";
const myAge = 11;
const myHobbies = ["프로그래밍", "그림 그리기", "책 읽기"];
const myFavoriteColor = "파란색";
// 예쁘게 자기소개를 출력해보겠습니다
console.log("==============================");
console.log(" 나의 자기소개");
console.log("==============================");
console.log("");
console.log(`🙋♀️ 이름: ${myName}`);
console.log(`🎂 나이: ${myAge}살`);
console.log(`💙 좋아하는 색깔: ${myFavoriteColor}`);
console.log("");
console.log("🎨 나의 취미들:");
// 취미를 하나씩 예쁘게 출력해요 (for문 사용)
for (let i = 0; i < myHobbies.length; i++) { // 배열의 각 항목에 대해 반복해요
console.log(` ${i + 1}. ${myHobbies[i]}`); // 번호와 함께 취미를 출력해요
}
console.log("");
console.log("안녕하세요! Node.js로 프로그래밍을 배우고 있어요!");
console.log("앞으로 더 멋진 프로그램을 만들고 싶어요! 🌟");
🔄 브라우저 vs Node.js 비교하기
이제 브라우저에서의 자바스크립트와 Node.js에서의 자바스크립트가 어떻게 다른지 알아보겠습니다.
브라우저에서는 할 수 있지만 Node.js에서는 할 수 없는 일:
- HTML 요소들을 찾고 바꾸기 (document.getElementById 같은 것들)
- 버튼 클릭이나 마우스 움직임 감지하기
- 웹페이지의 모양 바꾸기
Node.js에서는 할 수 있지만 브라우저에서는 할 수 없는 일:
- 컴퓨터의 파일 읽고 쓰기
- 서버 프로그램 만들기
- 데이터베이스에 연결하기
- 다른 프로그램과 통신하기
이런 차이점들은 각각의 환경이 가진 특별한 목적 때문이에요. 브라우저는 웹페이지를 안전하게 보여주는 것이 목적이고, Node.js는 서버나 다양한 애플리케이션을 만드는 것이 목적이거든요.
🧚♀️ 이야기로 다시 배우기: 자바스크립트의 새로운 모험
지금까지 배운 내용을 하나의 이야기로 다시 정리해볼게요.
한때 자바스크립트라는 친구가 있었어요. 이 친구는 웹 브라우저라는 작은 마을에서만 살 수 있었죠. 그곳에서는 웹페이지를 예쁘게 꾸미고, 사용자들과 재미있게 놀아주는 일을 했어요.
하지만 자바스크립트는 늘 더 넓은 세상이 궁금했어요. "나도 다른 친구들처럼 컴퓨터의 다른 곳에서 일해보고 싶어!"라고 생각했죠.
그러던 어느 날, Node.js라는 현명한 발명가가 나타났어요. 발명가는 자바스크립트를 위한 특별한 도구를 만들어주었어요. "이제 너는 브라우저 마을 밖에서도 자유롭게 활동할 수 있어!"
그렇게 자바스크립트는 새로운 세계로 모험을 떠났어요. 서버라는 큰 성을 짓기도 하고, 파일이라는 보물상자를 열어보기도 하고, 다른 컴퓨터 친구들과 편지를 주고받기도 했어요.
이제 자바스크립트는 두 개의 세계에서 활동하는 특별한 친구가 되었답니다. 낮에는 브라우저 마을에서 웹페이지를 돌보고, 밤에는 Node.js 세계에서 서버를 관리하는 멋진 이중생활을 하게 되었어요!
🧠 자주 하는 실수와 주의할 점
Node.js를 처음 사용할 때 자주 하는 실수들을 미리 알아두면 도움이 될 거예요.
❌ 실수 1: 브라우저 기능을 Node.js에서 사용하려고 하기
// 이렇게 하면 안 돼요!
console.log(document.getElementById('button')); // 에러 발생!
Node.js에는 HTML 문서가 없기 때문에 document
객체를 사용할 수 없어요. 이는 브라우저에서만 사용할 수 있는 기능이에요.
❌ 실수 2: window 객체 사용하려고 하기
// 이것도 안 돼요!
console.log(window.location); // 에러 발생!
window
객체도 브라우저에서만 존재하는 특별한 객체예요. Node.js에서는 global
객체를 사용해야 해요.
❌ 실수 3: 에러 처리를 하지 않기
// 위험한 코드! (지금은 이해하지 않아도 괜찮아요)
// 나중에 파일을 다루는 방법을 배울 때 중요한 내용이에요
console.log("파일을 읽을 때는 항상 에러가 발생할 수 있어요!");
Node.js에서는 에러가 발생했을 때 프로그램이 완전히 멈출 수 있기 때문에, 항상 에러 처리를 해주는 것이 중요해요.
✏️ 연습문제로 개념 다지기
새로 얻은 지식에 조금씩 익숙해져 볼까요. 연습을 통해 Node.js가 무엇인지 더 깊이 느껴보시길 바랍니다.
Ex1) Node.js와 브라우저 자바스크립트의 차이점을 보여주는 "시스템 정보 출력기를 만들어보자!"
// Node.js에서만 가능한 기능을 보여주는 예제를 만들어보세요
// 시스템 정보를 출력하는 프로그램
console.log("=== Node.js 특별 기능 ===");
console.log("Node.js 버전:", process.version); // Node.js 버전 정보
console.log("운영체제:", process.platform); // 운영체제 정보
console.log("현재 폴더:", process.cwd()); // 현재 작업 디렉토리
// 브라우저에서는 이런 정보를 직접 가져올 수 없어요!
Ex2) 간단한 계산기 프로그램을 만들어서 "Node.js로 계산해보자!"
// calculator.js
// 두 숫자를 더하고, 빼고, 곱하고, 나누는 프로그램을 만들어보세요
const num1 = 15;
const num2 = 3;
console.log("=== 간단한 계산기 ===");
console.log(`첫 번째 숫자: ${num1}`);
console.log(`두 번째 숫자: ${num2}`);
console.log("");
const sum = num1 + num2; // 더하기 계산
const difference = num1 - num2; // 빼기 계산
const product = num1 * num2; // 곱하기 계산
const quotient = num1 / num2; // 나누기 계산
console.log(`더하기: ${num1} + ${num2} = ${sum}`);
console.log(`빼기: ${num1} - ${num2} = ${difference}`);
console.log(`곱하기: ${num1} × ${num2} = ${product}`);
console.log(`나누기: ${num1} ÷ ${num2} = ${quotient}`);
Ex3) 나만의 정보를 출력하는 프로그램을 만들어서 "개인 프로필을 만들어보자!"
// my-info.js
// 여러분의 정보를 예쁘게 출력하는 프로그램을 만들어보세요
const studentInfo = {
name: "여러분의 이름",
grade: 5,
favoriteSubjects: ["수학", "과학", "미술"],
dreamJob: "프로그래머"
};
console.log("🌟 나의 정보 🌟");
console.log("─────────────────");
console.log(`이름: ${studentInfo.name}`);
console.log(`학년: ${studentInfo.grade}학년`);
// 좋아하는 과목들을 for문으로 출력해요
let subjectList = "";
for (let i = 0; i < studentInfo.favoriteSubjects.length; i++) {
if (i > 0) subjectList += ", "; // 첫 번째가 아니면 쉼표 추가
subjectList += studentInfo.favoriteSubjects[i];
}
console.log(`좋아하는 과목: ${subjectList}`);
console.log(`꿈: ${studentInfo.dreamJob}`);
console.log("─────────────────");
console.log("Node.js와 함께 꿈을 이루어 나가요! 💪");
🤔 심화 문제로 실력 확인하기
기본 연습을 마쳤다면, 이제 조금 더 깊이 있는 문제들을 통해 Node.js에 대한 이해를 확인해보겠습니다.
Q1. Node.js가 특별한 이유를 3가지 이상 설명해서 "왜 Node.js가 중요한지 알아보자!"
정답:
브라우저 밖에서도 자바스크립트 실행 가능: 원래 자바스크립트는 웹 브라우저에서만 작동했지만, Node.js 덕분에 컴퓨터의 어느 곳에서든 실행할 수 있게 되었어요.
서버 프로그램 개발 가능: 웹사이트의 뒷부분(백엔드)을 자바스크립트로 만들 수 있어서, 하나의 언어로 전체 웹 애플리케이션을 개발할 수 있어요.
이벤트 기반으로 효율적: 여러 가지 일을 동시에 처리할 수 있어서, 많은 사용자가 동시에 접속하는 서비스를 효율적으로 만들 수 있어요.
파일 시스템 접근: 컴퓨터의 파일을 읽고, 쓰고, 수정할 수 있어서 다양한 유틸리티 프로그램을 만들 수 있어요.
Q2. Node.js로 어떤 종류의 프로그램을 만들 수 있는지 예를 들어서 "Node.js의 가능성을 알아보자!"
정답:
웹 서버: 블로그, 온라인 쇼핑몰, 소셜미디어 같은 웹사이트의 서버 부분을 만들 수 있어요.
API 서버: 날씨 정보, 뉴스, 게임 점수 등의 정보를 다른 프로그램에 제공하는 서비스를 만들 수 있어요.
실시간 애플리케이션: 채팅 앱, 온라인 게임, 실시간 협업 도구 같이 즉시 반응하는 프로그램을 만들 수 있어요.
명령줄 도구: 파일을 정리하거나, 이미지를 변환하거나, 정보를 분석하는 터미널 프로그램을 만들 수 있어요.
데스크톱 애플리케이션: Visual Studio Code나 Discord 같은 컴퓨터용 애플리케이션도 Node.js 기술로 만들 수 있어요.
지금까지 Node.js의 기본 개념과 특징에 대해 자세히 알아보았습니다. Node.js는 자바스크립트의 활용 범위를 크게 넓혀주는 정말 중요한 기술이에요. 앞으로 더 많은 Node.js 기능들을 배우면서 멋진 프로그램들을 만들어봐요!
📝 복습 문제 - 이전 단원 내용 기억하기
이번 시간에 새로운 내용을 배웠으니, 이전에 배운 중요한 내용도 복습해볼까요?
🔢 CommonJS와 ES6 모듈 복습 (17.3단원에서 배운 내용)
문제 1: CommonJS와 ES6 모듈의 기본 문법을 각각 작성해보세요.
해답:
// CommonJS 방식
// math.js - 내보내기
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = { add, subtract };
// app.js - 가져오기
const { add, subtract } = require('./math.js');
console.log(add(5, 3)); // 8
console.log(subtract(10, 4)); // 6
// ES6 모듈 방식
// math.mjs - 내보내기
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// app.mjs - 가져오기
import { add, subtract } from './math.mjs';
console.log(add(5, 3)); // 8
console.log(subtract(10, 4)); // 6
문제 2: CommonJS와 ES6 모듈의 주요 차이점 3가지를 설명해보세요.
해답:
문법 차이: CommonJS는
module.exports
/require
를 사용하고, ES6 모듈은export
/import
를 사용해요.로딩 시점: CommonJS는 코드가 실행될 때 동적으로 모듈을 가져오지만, ES6 모듈은 코드 실행 전에 미리 모든 모듈을 분석하고 준비해요.
사용 환경: CommonJS는 주로 Node.js에서 사용되고, ES6 모듈은 주로 브라우저에서 사용돼요(Node.js에서도 설정을 통해 사용 가능).
해설: 이 두 방식은 같은 목적(코드 모듈화)을 가지지만 서로 다른 환경과 방식으로 작동해요. Node.js에서는 기본적으로 CommonJS를 사용하지만, 최신 버전에서는 ES6 모듈도 지원해요.
✅ 학습 완료 체크리스트
이번 시간에 배운 내용들을 모두 이해했는지 확인해보세요!
학습 내용 | 이해했나요? |
---|---|
Node.js의 기본 개념 | ✅ |
브라우저 vs Node.js 차이점 | ✅ |
Node.js의 특별한 능력들 | ✅ |
자주 하는 실수들 | ✅ |
실전 예제 이해 | ✅ |
📂 마무리 정보
오늘 배운 17.4.1
내용이 여러분의 자바스크립트 지식 상자에 잘 저장되었나요? Node.js는 자바스크립트의 활용 범위를 크게 넓혀주는 정말 중요한 기술이에요. 다음 시간에는 Node.js를 실제로 실행하는 방법에 대해 더 자세히 알아볼 거예요!
기억할 점: Node.js는 자바스크립트를 브라우저 밖에서도 실행할 수 있게 해주는 특별한 환경이라는 점을 꼭 기억해두세요.
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'17. 코드 정리하고 나누기 (모듈 시스템) > 17.4 Node.js의 구조 맛보기' 카테고리의 다른 글
17.4.3 터미널에서 자바스크립트 실행하기 - 컴퓨터와 직접 대화해보기 (0) | 2025.07.26 |
---|---|
17.4.2 기본 실행 구조 - Node.js 프로젝트 만들기의 첫걸음 (0) | 2025.07.25 |