[Node.JS] Module

yeonjeong·2025년 2월 9일

하나의 웹페이지를 구성한다던가, 서버에 리퀘스트를 보는 작업 등을 할 때 코딩을 하다보면 무수히 많은 코드를 작성하게됩니다. 나중에 A라는 파일에 작성했던 기능이 유용해서 찾아보거나, 혹은 수정의 작업 등을 할 때 이 많은 코드를 일일이 찾아보기란 어려운 일입니다.

그래서 코딩을 할 때는 main 파일에 다 작성하는 것이 아니라,
기능에 따라 파일을 나눕니다. 로그인/회원가입/글쓰기/결제 등... 이런 과정을 통해서 얻을 수 있는 부분은

1) 코드의 가시화
2) 효율적인 코드 관리
3) 다른 프로그램에서 사용 가능

위의 세 가지의 이유를 꼽을 수 있습니다.

이렇게 기능에 따라 나누는 과정을 "모듈화"라고 합니다.

모듈(Module)

: 어플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각

  • 외장 모듈 (local module) : 개발자들이 만들어 놓은 모듈(라이브러리), npm을 통해서 사용 가능
  • 내장 모듈 (core module) : node.js에서 기본적으로 제공하여 npm 없이도 사용 가능

오픈 소스(Open Source)

: 개발자들의 커뮤니티는 서로가 만들어 놓은 모듈을 공유하는 문화가 있다. 누구나 코드를 확인하고 사용할 수 있는 문화를 지칭합니다.

서드파티 모듈(ThridParty Module)

: 다른 사람들 혹은 기업에서 만들어진 기능들이 많이 있습니다. 이를 제 3자가 만들었다고 하여 위와 같이 지칭합니다.

설치하기

: 모듈을 사용하는데 있어서 모듈이 돌아가게 하기 위해서 초기 설정이 필요합니다. 어떤 작업을 하느냐에 따라 방법이 달라 아래 두 가지 방법을 작성해두었습니다.

💡 모듈을 내가 만들 경우

: 파일의 확장자를 .mjs 로 설정

💡 서드파티 모듈을 사용할 경우

: npm install (모듈 이름) -> package.json 파일에서 ["type":"module"] 작성하기

위와 같이 내가 모듈을 만드느냐 사용하느냐에 따라 달라질 수 있어서
아래부터는 서드파티 모듈을 사용하는 방법에 대해 기술하겠습니다.

1. 모듈 설치하기

: 내가 진행하는 프로젝트 디렉토리(폴더)에 사용하고자 하는 모듈을 설치합니다. 저는 예시를 위해서 axios 모듈을 하나 설치하도록 하겠습니다.

터미널 -> 명령어: npm install axios

2. package.json

해당 명령어를 입력하면, package.json 파일이 생성되는데,
파일에 들어가서 아래와 같이 type을 작성해줍니다.

{
  "type": "module",
  "dependencies": {
    "axios": "^1.7.9"
}

이렇게 하면 내가 설치한 모듈을 원활하게 돌릴 수 있는 초기 작업이 완료됩니다.

사용법

일반적으로 모든 모듈은 비공개 상태입니다. 다시 말해, 모듈은 캡슐화가 되어 다른 모듈에서 접근할 수 없고, 개별적 존재로서 애플리케이션과 분리되어 존재합니다.

비공개 상태이기에 이 비공개를 가져오려면 특별한 명령어가 필요합니다.
그 명령에 대해서 알아보도록 하겠습니다.

export

: 공개가 필요한 부분에 한정하여 명시적으로 선택적 공개하는 것(지정된 모듈 내보내기)

import

: 지정된 모듈을 가져오기

위의 명령어를 통해서 내가 원하는 파일의 모듈을 가져오고, 내보낼 수 있습니다.

// 내가 만든 모듈
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

export function multiply(a, b) {
  return a * b;
}

export function divide(a, b) {
  return a / b;
}

위에 작성된 코드는 사칙연산 함수를 만들어서 해당 파일 외 다른 파일에서도 사용이 가능할 수 있도록 내보내도록(export) 작성해두었습니다.

import { add, subtract, multiply, divide } from "./export.mjs";

console.log(add(3, 5));
console.log(subtract(3, 6));
console.log(multiply(3, 5));
console.log(divide(6, 2));

그러면 위와 같이 다른 파일에서 가져오고자 하는 모듈을 간단한 명령어를 통해서 경로를 입력하고 가져올 수 있습니다.

명령어 작성법

  • export + 모듈
    - const, function, class 다 가능하지만, 최상위 항목에서만 사용
  • import {가져오려는 모듈 이름} from "파일 경로"

추가 문법

1. named

1) as import

import 할 때, as 키워드를 붙이면 내가 원하는 이름으로 호출을 할 수 있습니다.

export const PI = 3.14;

export function add(a, b) {
  return a + b;
}
import { PI, add as addNumbers } from './calculator.mjs';

console.log(addNumbers(1, 2));

export 된 이름 뒤에 as를 붙이고, 내가 부르고 싶은 이름을 적어서 명령어를 입력하면 이름을 바꿔서 import 할 수 있습니다.

2) as export

export 할 때부터 바꾸고 싶다면, export 할 때 동일하게 적어주면 됩니다.

export add as addNumbers

2. 한 번에 보내기

1) export default

const PI = 3.14;

function add(a, b) { 
  return a + b;
}

function subtract(a, b) { 
  return a - b;
}

function multiply(a, b) { 
  return a * b;
}

function divide(a, b) { 
  return a / b;
}

export { PI, add, subtract, multiply, divide };

위와 같이 내보내는 모듈이 많을 때는 위와 같이 중괄호{}로 묶는 방법도 있지만, 하나로 묶어서 보내는 방법도 있습니다.

const calculator = { PI, add, subtract, multiply, divide }; // 객체로 만들기
export default calculator; // 객체 내보내기

2) "*" import (namespace import)

"*" 문자를 사용하면, 지정 파일 내에서 export된 모든 모듈을 가져올 수 있습니다.

const PI = 3.14;

function add(a, b) { 
  return a + b;
}

function subtract(a, b) { 
  return a - b;
}

function multiply(a, b) { 
  return a * b;
}

function divide(a, b) { 
  return a / b;
}

export { PI, add, subtract, multiply, divide };
import * as calculator from './calculator.mjs';

console.log(calculator.PI);
console.log(calculator.add(1, 2));
console.log(calculator.subtract(1, 2));
console.log(calculator.multiply(1, 2));
console.log(calculator.divide(1, 2));

사용법
import* as (통칭하여 부를 모듈명) from '경로'
-> (통칭하여 부를 모듈명).(실제 모듈명)
** 해당 방법은 정말 필요할 때만 사용

출처
⌜모던 자바스크립트 deep dive⌟ 저자 이웅모 p891
https://html-jc.tistory.com/503
https://medium.com/@su_bak/node-js-module-%EC%9D%B4%EB%9E%80-b1dd9224687f

profile
Backend 개발자로 거듭나는 그 날까지 !

0개의 댓글