티스토리 뷰
모듈이란
프로그램을 작은 기능 단위로 쪼개고 파일 형태로 저장해 놓은 것
모듈을 사용해서 코딩을 하게 되면 코드가 중복되지 않는다.
A와 B에서 모두 사용하는 기능을 모듈로 만들어놓으면,
두번 코딩하지 않아도 되고, 하나의 파일에서 가져다 쓰기만 하면 된다.
애플리케이션 전체 코드 안에서 어떤 기능을 수정해야 한다면, 그 기능에 해당하는 모듈만 수정하면 되니까 편하다.
개발자가 직접 자신이 필요로 하는 모듈을 만들어서 사용할 수도 있고,
node.js 안에 포함된 모듈을 가져다 사용할 수도 있음
node.js 안에 포함된 모듈들은 서버 만들 때 꼭 필요한 기능들이 들어있다.
모듈을 사용하는 두가지 방법 : CommonJS 모듈 시스템 vs ES 모듈 시스템
node.js가 등장할 당시에는 자바스크립트에는 모듈 개념이 없었다.
node.js를 만들다 보니까 모듈 개념이 필요해서 자체적으로 모듈 시스템을 만든 것이 commonJS 모듈 시스템이다.
이후 자바스크립트가 ES6 이후 계속 발전하면서 모듈 개념이 들어오게 되었고,
표준화가 되면서 ES 모듈 시스템이 만들어졌다.
node.js에서는 CommonJS 모듈 시스템을 기본으로 사용하고 있다.
동시에 ES 모듈 시스템도 사용할 수 있도록 지원하고 있다.
그래서 두가지 모듈 시스템이 공존하고 있다.
CommonJS 모듈 시스템 : Node.js의 기본 모듈 시스템 (require, module.exports 사용)
ES 모듈 시스템 : 에크마스크립트의 표준 모듈 시스템 (import, export 사용)
모듈 만들기 예제
const user = "홍길동";
const hello = (name) => {
console.log(`${name} 님, 안녕하세요?`);
};
hello(user);
위 코드는 사용자 이름을 받는 부분과, 받은 이름을 사용하여 콘솔창에 인사 문구를 출력해주는 부분으로 구성된다.
이 두 개의 기능을 각각의 모듈로 만들어보자.
const user1 = "KIM";
const user2 = "LEE";
const user3 = "PARK";
// module.exports = user1; // 하나만 내보낼 때
module.exports = {user1, user2}; //여러개 내보낼때는 중괄호 안에 묶어서
user.js 라는 파일명으로 위와 같이 작성했다.
이 파일을 모듈로 사용하기 위해서는 여기서 만들어진 변수 user1, user2, user3를 외부로 내보내주어야 한다.
외부로 내보낼 때는 module.exports 를 사용하여 내보낼 대상을 지정하면 된다.
const hello = (name) => {
console.log(`${name} 님, 안녕하세요?`);
};
module.exports = hello;
hello.js 라는 파일명으로 위와 같이 작성했다.
이 파일도 동일하게 module.exports 하여 내보내주었다.
//const user1 = require("./user"); // 하나만 가져올 때
const {user1, user2} = require("./user"); //여러개 가져올 때 중괄호 묶어서
const hello = require("./hello");
hello(user1);
hello(user2);
greeting.js 라는 파일명으로 위와 같이 작성했다.
아까 만든 user와 hello 모듈을 require문으로 불러왔고, const 변수로 할당해주었다.
그리고 hello(user1), hello(user2) 해주었다.
굳이 이렇게 모듈로 작성하는 이유는 무엇일까?
user와 hello 모듈을 따로 작성하였고 greeting에서는 각 모듈들을 불러와서 사용한다.
greeting 입장에서는 user와 hello 모듈이 어떻게 작성되어 있는지 모른다.
하지만, "user 값을 가져와서 hello 함수를 실행해" 라는 논리적인 구조를 한눈에 확인할 수 있다.
각 모듈의 역할에 맞게 모듈을 작성하고, 메인 파일에서는 필요한 모듈만 불러와서 사용하면 된다.
→코드를 기능별로 각각 나누어서 관리할 수 있다는 장점이 있다!
Node 코어 모듈
노드에서 기본으로 제공하는 모듈을 "코어 모듈" 이라 한다.
코어 모듈은 노드 공식 홈페이지의 "문서(Docs)" 카테고리에서 살펴볼 수 있다.
Node.js — 어디서든 JavaScript를 실행하세요
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
저게 다 node.js 에서 기본으로 제공하는 코어 모듈이다.
* 노드 코어 모듈 주요 내용 살펴보기
기능 | 모듈명 | 설명 |
파일 시스템 | fs | 파일이나 폴더에 접근할 수 있는 기능 제공. 파일 읽기/쓰기/삭제/이동/이름 변경이나 폴더 작업 처리할 수 있음. |
HTTP | http | HTTP 서버를 만들고 요청을 처리하는 기능 제공. express 같은 프레임워크 없이 HTTP 서버를 만드는 방법도 있다. |
경로 | path | 파일 경로와 관련된 작업을 하는 기능 제공. 파일 경로를 지정하거나 상대 경로 계산하는 작업을 할 수 있음. |
스트림 | streams | 데이터 스트림을 처리하는 기능 제공. 파일이나 네트워크와 같은 스트림에서 데이터를 읽거나 쓰는 작업 할 수 있음. |
암호화 | crypto | 암호화와 관련된 기능 제공. 해시 함수, 암호화 알고리즘, 암호화/복호화 지원 |
운영체제 | os | 운영체제와 상호 작용하는 기능 제공. 운영체제의 정보를 알아내거나 시스템 리소스 정보 확인 가능. |
유틸리티 | util | 다양한 유틸리티 함수 제공. 객체 상속, 비동기 작업을 프로미스로 변환하는 작업 할 수 있음. |
이벤트 | events | 이벤트 기반 프로그래밍을 지원하는 기능 제공. 이벤트 생성, 등록, 처리 등을 할 수 있으며 커스텀 이벤트를 사용하여 비동기 작업 다룰 수 있음. |
정확히는 사용해봐야 알 것 같다....
코어모듈 리스트에서 File System > Promise Example 로 들어와서 상세 내용을 살펴보았다.
https://nodejs.org/docs/latest/api/fs.html#promise-example
File system | Node.js v23.7.0 Documentation
nodejs.org
CommonJS 는 node에서 기본으로 사용하는 모듈 시스템이다.
상단에 require 문을 사용한 걸 볼 수 있다.
ES 모듈 시스템은 상단에 import 를 사용한 걸 볼 수 있다.
글로벌 모듈
- 글로벌 모듈 : require 없이 사용할 수 있는 모듈
- 글로벌 객체 : 글로벌 모듈에 있는 객체
ex) console 객체의 log 함수 사용 : console.log도 global 안에 속한 기능이었기 때문에 require 없이 쓸 수 있었던 것이다.
global.console.log(`${name}님, 안녕하세요?`);
global 빼고 간단히 사용할 수 있다.
console.log(`${name}님, 안녕하세요?`);
- __dirname : 현재 파일이 있는 폴더 이름을 알려주는 속성 (앞에 언더바 두개)
- __filename : 현재 파일 이름을 알려주는 속성 (앞에 언더바 두개)
위 두개도 global 안에 속한 속성이기 때문에 require 없이 코드 아무데서 사용할 수 있다.
console.log(`현재 모듈이 있는 폴더: ${__dirname}`);
console.log(`현재 모듈의 파일명 : ${__filename}`);
dirname 과 filename 을 console.log로 찍어보니
현재 파일이 있는 폴더 경로와, 파일이름을 "절대 경로"로 출력해주고 있음을 알 수 있다.
https://youtu.be/dU-tA9354CI?feature=shared
'백엔드 > Node.js' 카테고리의 다른 글
[Node.js] 네트워크, IP, port, HTTP 모듈로 서버 만들고 라우팅 하기 (0) | 2025.02.12 |
---|---|
[Node.js] path 모듈, file system 모듈 (0) | 2025.02.11 |
[Node.js] Node.js 백엔드 기초(2, 완) - express 프레임워크 설치, express로 간단한 API 만들기 (0) | 2025.02.07 |
[Node.js] Node.js 백엔드 기초(1) - node.js 시작하기, npm 정의와 기본 개념, npm 모듈 설치, 삭제 해보기 (0) | 2025.02.05 |
Node.js 로 웹사이트 만들기 위한 기술 스택 (0) | 2025.02.02 |