노드에서는 (당연한 이야기이지만) 코드를 모듈로 만들 수 있습니다. 여기서 말하는 모듈은 - 특정한 기능을 수행하는 함수나 변수들의 집합 - 을 의미합니다. 이는 모듈 자체로서도 하나의 프로그램이면서, 다른 프로그램의 부품으로써도 사용할 수 있죠. 이렇게 만들어둔 모듈을 통해 여러 프로그램에 재 사용이 가능합니다. 결국 이러한 메커니즘은 Javascript에서 코드를 재사용하기 위해 함수를 만드는 작업과 유사합니다. 통상적으로 파일 하나가 하나의 모듈로 취급됩니다.
추상적인 개념은 이해가 가셨을 것입니다. 노드에서는 크게 두 가지 형식의 모듈을 사용하는데, CommonJS와 ECMAScript 모듈입니다. 우선 CommonJS부터 살펴보겠습니다.
CommonJS 모듈은 표준 자바스크립트 모듈이 아님에도, 오랫동안 사용되어 왔기 때문에 널리 쓰이고 있습니다. 간단해 보이지만 예상외로 내용이 복잡하기 때문에, 차근차근 따라와야 하겠습니다. 우선, 모듈로 만들 파일과 사용할 파일이 필요합니다. [var.js], [func.js], [index.js]를 하나의 폴더에 생성하겠습니다.
/* var.js */
const odd = 'CJS 홀수';
const even = 'CJS 짝수';
module.exports = {
odd,
even,
};
위 파일에서는 우선 두 개의 변수 odd, even을 선언했습니다. 그리고 odd와 even을 담은 객체를 module.exports에 대입하였습니다.
· 결과적으로 이 [var.js] 파일은 모듈로 사용할 수 있는 상태가 되었습니다.
· 다른 파일에서 [var.js]파일을 불러오면 module.exports에 있는 값을 사용할 수 있게 되는 것입니다.
그럼 위에서 설명했다시피, [var.js]를 불러오는 파일을 하나 작성해 보겠습니다. 바로 [func.js]입니다. 역시 이번에도 생소한 관념들이 나오니 차근차근 따라오시기 바랍니다.
/* func.js */
const { odd, even } = require('./var');
function checkOddOrEven(num) {
if (num % 2) {
return odd;
}
return even;
}
module.exports = checkOddOrEven;
우선 첫 줄부터 생경하네요. 앞서 작성한 var 파일을 불러오는 과정인 듯합니다. 이는 다름 아닌 우리가 배웠던 "구조 분해 할당" 형식의 문법입니다.
위 내용 중 아래의 예제와 가장 비슷한 내용이 되겠네요.
var array = ['nodejs', {}, 10, true];
const [node, obj, , bool] = array;
console.log(node);
console.log(obj);
console.log(bool);
/* 출력
nodejs
{}
true
*/
구조 분해 할당 문법을 적용하게 되면, require를 이용해서 var를 불러오게 되는데 해당 var 모듈에 있는 odd와 even 변수를 각각 [func.js] 파일 내의 odd, even에 대입하는 형태가 됩니다.
여기까지 이해가 되었다면, 이제 require를 좀 더 자세하게 살펴봐야 하겠습니다. require에 전달된 파라미터는 './var' 형식이었습니다. 여기서는 확장자명 js(또는 json)이 생략되어 있습니다. 동일한 폴더이기 때문에 별도의 경로도 작성하지 않은 상태임을 감안하겠습니다.
또한, [index.js]의 경우에는 파일 자체의 작성을 생략할 수 있습니다. 예를 들어 ./routes/index.js를 불러오는 경우에는 require( './routes' ); 만 작성하면 되는 것입니다.
'Programming > Node.js' 카테고리의 다른 글
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : CommonJS 3 (0) | 2024.03.16 |
---|---|
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : CommonJS 2 (0) | 2024.03.15 |
4. Node 기능 살펴보기 (1) - REPL 사용 (0) | 2024.03.13 |
3. Front-end Javascript (4) - 데이터 속성과 dataset (0) | 2024.03.12 |
3. Front-end Javascript (3) - encode(decode)URIComponent (0) | 2024.03.09 |