📘 17.3.2 require로 불러오기 - 편리한 배달 서비스
가끔 저녁 시간이 되면 무엇을 먹을지 고민이 될 때가 있어요. 그럴 때면 스마트폰을 꺼내 배달 앱을 켜곤 하죠. 몇 번의 터치만으로 멀리 있는 맛집의 음식이 우리 집 문 앞까지 도착해요. 정말 놀라운 일이에요.
프로그래밍에도 그런 편리한 배달 서비스가 있어요. 우리가 필요한 코드를 다른 파일에서 가져다주는 require라는 특별한 도구 말이에요. 오늘은 이 편리한 배달 서비스에 대해 이야기해보려고 해요.
🧠 새로운 단어들과 친해지기
단어 | 쉬운 설명 |
---|---|
require | 다른 파일에서 만든 코드를 가져오는 명령어 |
모듈 캐싱 | 한 번 가져온 코드를 기억해두었다가 다시 사용하는 기능 |
구조 분해 할당 | 큰 상자에서 필요한 것만 골라서 꺼내는 편리한 방법 |
✨ require가 뭐예요?
require는 동네 마트의 배달 서비스와 같은 역할을 해요.
어머니가 "참기름이 떨어졌네"라고 하시면, 동네 마트에 전화를 걸어 "참기름 한 병만 배달해주세요"라고 주문하곤 했어요. 그러면 마트 아저씨가 오토바이를 타고 와서 참기름을 문 앞에 놓고 가셨죠.
require도 정확히 같은 일을 해요. "이 파일에서 저 코드 좀 가져다주세요"라고 하면, require가 그 파일에 가서 코드를 가져다줘요.
그런데 require에는 특별한 기능이 있어요. 한 번 배달받은 음식(코드)은 냉장고에 보관해두었다가, 같은 음식이 또 필요하면 새로 주문하지 않고 냉장고에서 꺼내 쓸 수 있어요.
🎯 왜 require를 사용할까요?
1. 코드를 재사용할 수 있어요
한 번 만든 좋은 코드를 여러 파일에서 복사해서 붙여넣을 필요 없이, require로 가져와서 사용하면 돼요.
2. 파일을 깔끔하게 정리할 수 있어요
모든 코드를 하나의 파일에 다 넣으면 너무 복잡해지지만, 기능별로 파일을 나누고 필요할 때 require로 가져와서 쓰면 훨씬 정리가 잘 돼요.
3. 다른 사람이 만든 도구를 쉽게 사용할 수 있어요
인터넷에 있는 유용한 코드들을 쉽게 가져다 쓸 수 있어요.
4. 메모리를 절약할 수 있어요
같은 코드를 여러 번 가져와도 메모리에는 하나만 저장되어 있어요.
⚙️ require 사용 방법
require를 사용하는 방법은 생각보다 간단해요.
방법 1: 전체 모듈 가져오기
// greet.js
module.exports = function(name) {
return `안녕하세요, ${name}님!`;
};
// app.js
const greet = require('./greet.js');
console.log(greet("민수")); // "안녕하세요, 민수님!"
방법 2: 여러 기능이 있는 모듈 가져오기
// math.js
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return a - b; }
};
// app.js
const math = require('./math.js');
console.log(math.add(5, 3)); // 8
console.log(math.subtract(5, 3)); // 2
방법 3: 필요한 부분만 골라서 가져오기
// calculator.js
exports.multiply = function(a, b) { return a * b; };
exports.divide = function(a, b) { return a / b; };
// app.js
const { multiply, divide } = require('./calculator.js');
console.log(multiply(4, 3)); // 12
console.log(divide(12, 3)); // 4
주의사항:
./
는 "현재 폴더에서"라는 뜻이에요../
는 "상위 폴더에서"라는 뜻이에요
🧪 실제 예제로 연습하기
🔹 예제 1: 학교 급식 메뉴 관리
// menu.js
const weeklyMenu = {
"월요일": "김치찌개, 밥, 계란말이",
"화요일": "카레라이스, 치킨너겟",
"수요일": "비빔밥, 미역국",
"목요일": "스파게티, 마늘빵",
"금요일": "불고기덮밥, 김치"
};
function getMenuByDay(day) {
if (weeklyMenu[day]) {
return `${day}: ${weeklyMenu[day]}`;
} else {
return `${day}은(는) 급식이 없는 날입니다.`;
}
}
function getWeeklyMenu() {
let menuList = "📅 이번 주 급식 메뉴:\n";
for (let day in weeklyMenu) {
menuList += `${day}: ${weeklyMenu[day]}\n`;
}
return menuList;
}
module.exports = {
getMenuByDay: getMenuByDay,
getWeeklyMenu: getWeeklyMenu
};
// school-app.js
const menu = require('./menu.js');
console.log("🍽️ 학교 급식 정보 시스템");
console.log(menu.getMenuByDay("수요일")); // "수요일: 비빔밥, 미역국"
console.log(menu.getWeeklyMenu()); // 전체 주간 메뉴
🔹 예제 2: 게임 캐릭터 관리
// character.js
function Character(name, level) {
this.name = name;
this.level = level || 1;
this.hp = level * 20;
this.exp = 0;
}
Character.prototype.getInfo = function() {
return `${this.name} | 레벨: ${this.level} | HP: ${this.hp}`;
};
Character.prototype.levelUp = function() {
this.level++;
this.hp += 20;
return `레벨업! 현재 레벨: ${this.level}`;
};
Character.prototype.gainExp = function(amount) {
this.exp += amount;
if (this.exp >= this.level * 100) {
this.exp = 0;
return this.levelUp();
}
return `경험치 ${amount} 획득!`;
};
module.exports = Character;
// game.js
const Character = require('./character.js');
console.log("⚔️ 게임 시작!");
const player = new Character("용사", 2);
console.log(player.getInfo()); // "용사 | 레벨: 2 | HP: 40"
console.log(player.gainExp(150)); // "경험치 150 획득!"
console.log(player.gainExp(50)); // "레벨업! 현재 레벨: 3"
🚨 자주 하는 실수들
❌ 실수 1: 경로 표시 빼먹기
// 잘못된 방법
const math = require('math.js'); // ❌ ./ 빼먹음!
// 올바른 방법
const math = require('./math.js'); // ✅ 경로 표시 필요!
❌ 실수 2: 파일 이름 오타
// 잘못된 방법
const calc = require('./calculater.js'); // ❌ 오타!
// 올바른 방법
const calc = require('./calculator.js'); // ✅ 정확한 파일명!
✏️ 연습 문제를 시작하기 전에
이제 여러분이 직접 require를 사용해볼 시간이에요. 처음에는 경로를 헷갈리거나 파일명을 틀릴 수도 있어요. 마치 새로운 동네에 이사를 가서 처음에는 마트가 어디 있는지 몰라서 헤매는 것처럼 말이에요.
하지만 몇 번 사용하다 보면 자연스럽게 익숙해질 거예요. 그리고 이 방법을 익혀두면 나중에 큰 프로젝트를 할 때 정말 유용하게 쓸 수 있어요. 천천히 따라해보세요.
문제 1: 동물 소리 모듈 만들기
// animals.js
exports.dog = function() {
return "멍멍!";
};
exports.cat = function() {
return "야옹!";
};
exports.cow = function() {
return "음매!";
};
// zoo.js
const animals = require('./animals.js');
console.log("🐕 개:", animals.dog()); // "개: 멍멍!"
console.log("🐱 고양이:", animals.cat()); // "고양이: 야옹!"
console.log("🐄 소:", animals.cow()); // "소: 음매!"
문제 2: 필요한 부분만 가져오기
// shapes.js
exports.circle = function(radius) {
return 3.14 * radius * radius;
};
exports.rectangle = function(width, height) {
return width * height;
};
exports.triangle = function(base, height) {
return (base * height) / 2;
};
// area-calculator.js
const { circle, rectangle } = require('./shapes.js');
console.log("원 넓이:", circle(5)); // 78.5
console.log("사각형 넓이:", rectangle(4, 6)); // 24
📝 정리하기
오늘은 require에 대해 배웠어요:
- require는 다른 파일에서 만든 코드를 가져오는 명령어예요
- 모듈 캐싱 기능으로 같은 코드를 여러 번 가져와도 메모리를 절약해요
- 구조 분해 할당으로 필요한 부분만 골라서 가져올 수 있어요
- 경로 표시를 정확히 해야 해요 (
./
,../
) - module.exports와 함께 사용해서 코드를 모듈화할 수 있어요
require를 잘 사용하면 Node.js에서 더 체계적인 프로그램을 만들 수 있어요!
✅ 학습 완료 체크리스트
학습 내용 | 이해했나요? |
---|---|
require의 기본 개념 | ✅ |
전체 모듈과 부분 모듈 가져오기 | ✅ |
구조 분해 할당 사용 | ✅ |
파일 경로 정확히 표시하기 | ✅ |
실전 예제 따라하기 | ✅ |
📂 마무리 정보
오늘 배운 17.3.2
내용이 여러분의 자바스크립트 지식 상자에 잘 저장되었나요? 다음 시간에는 더 재미있는 내용으로 만나요!
기억할 점: require는 동네 마트의 배달 서비스처럼 필요한 코드를 편리하게 가져다주는 고마운 도구예요!
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'17. 코드 정리하고 나누기 (모듈 시스템) > 17.3 CommonJS (Node.js 방식)' 카테고리의 다른 글
17.3.3 ES6 모듈과의 차이점 - 두 개의 다른 언어처럼 (0) | 2025.07.25 |
---|---|
17.3.1 module.exports 사용하기 - Node.js의 특별한 선물상자 (0) | 2025.07.25 |