Node.js(module)

2022. 11. 21. 22:47WEB개발/TIL

반응형

모듈(Module)

: 특정한 기능을 하는 함수나 변수들의 집합(여러 기능들에 관한 코드가 모여있는 하나의 파일)

  • 재사용 가능한 코드 조각

module 설명

  • 모듈은 이미 만들어진 것을 npm(노드 패키지 관리자)을 통해 설치해서 사용할 수 있으며, 자신만의 고유의 모듈을 만들어서 사용할 수도 있음

 

 

 

장점

  • 어떠한 코드에 의존적이지 않으며 독립적임. 때문에 코드수정을 보다 쉽게할 수 있음
  • 코드 재사용이 용이함. 코드를 반복적으로 작성하지 않고 , 필요한 코드를 불러와 사용할 수 있음

 

 

 

모듈 만들기

: 자바스크립트 파일은 모두 모듈이며, 파일의 확장자가 .js면 모듈.

  따라서, 모듈은 자바스크립트 문법으로 작성함.

 

1. 모듈 작성하기(내보내기)

const A = "안녕";
module.exports = A
  • module.exports를 사용하여 값을 내보냄.

 

2. 외부 모듈 불러오기

const B = require(’파일경로’);
  • require은 항상 nodule.exports를 리턴 받음

A = B; A의 값이 “안녕”이면 B의 값도 “안녕”임

 

 

모듈 작성 예시1

const a = 1;
module.exports = a; //case1
module.exports = {a}; //case2
---
const aa = require("파일경로")
console.log(aa);  //case1의 경우, 1
console.log(aa);  //case2의 경우, { a : 1 }
  • case2에서 { a: 1 }로 값이 나오는 이유

     : javascript는 {a}일 때 { a: a }로 자동인식 하기 때문

 

모듈 작성 예시2

const a = 3;
const b = 6;
function plus() {
	return a+b;
}
module.exports = {
	a, b, plus
}
---
const result = require("파일경로")
console.log(result); // { a: 3, b: 6, plus: [Function: plus] }
console.log(result.a); // 3
console.log(result["b"]; // 6
console.log(result.plus); // [Function: plus]
console.log(result.plus()); // 9

 

 

 

 

Node 내장 객체

1. global

: 노드의 전역 객체

  • 모든 파일에서(어디서든) 접근 가능
  • 생략하여 사용 가능

      앞서 사용된 require함수, console함수도 global이 생략된 것

      >>  global.require(), global.console.log()

//global함수 확인
console.log(global);

 

2. console

: 디버깅에 접근할 수 있는 객체, 브라우저마다 다르게 보여짐

  • 변수 값을 확인하기 위해 주로 사용됨
디버깅?
: 소스 코드의 오류 또는 버그를 찾아 수정하는 과정
//console함수 확인
console.log(console);

주로 사용하는 console함수

  • console.log(내용)
  • console.error(내용): 에러를 콘솔에 표시
  • console.time(레이블), console.timeEnd(레이블)

      : 같은 레이블을 가진 time과 timeEnd 사이의 시간 측정

console.time/timeEnd()

  • console.table(배열)

console.table()

  • console.dir(객체, 옵션): 객체의 구조를 보여줌
    • { color: true/false }: 글자색 유/무 차이, {depth: index}: 객체 나타낼 깊이 선택

console.dir()

  • console.trace(레이블): 에러가 발생지 추적

 

3. Timer 메소드

  • setTimeout(콜백함수, 밀리초): 밀리초 이후에 실행될 작업(지연함수)
  • setInterval(콜백함수, 밀리초): 시간마다 실행할 함수를 정함(반복적으로 실행하도록)
  • setImmediate( 콜백 함수 ): 함수가 나오는 즉시 실행하는 함수
  • clearTimeout( 아이디 ): setTimeout함수를 취소하는 함수
  • clearInterval( 아이디 ): setInterval함수를 취소하는 함수

 

Timer메소드 사용하기

const func1 = setTimeout(function() {
    console.log("setTimeout/1.5초 후 실행");
},1500);
const func2 = setInterval(function() {
    console.log("setInterval/1초마다 실행");
},1000);
const func3 = setImmediate(function() {
    console.log("setImmediate/즉시 실행");
});
const func4 = setImmediate(function() {
    console.timeLog("setImmediate/즉시실행2");
});
setTimeout(function() {
    clearTimeout(func1);
    clearInterval(func2);
},3000);
clearImmediate(func4);
// 결과
setImmediate/즉시 실행
setInterval/1초마다 실행
setTimeout/1.5초 후 실행
setInterval/1초마다 실행

 

4. __filename, __dirname

  • __filname: 현재 파일 경로
  • __dirname: 현재 파일이 위치한 폴더 경로
console.log(__filename);
console.log(__dirname);
// 결과
C:\Users\LG\desktop\SeSAC\github\practice\nodejs\02_module_obj1.js
C:\Users\LG\desktop\SeSAC\github\practice\nodejs

 

5. require 객체

: 모듈을 불러올 때 사용하는 객체

  • 주의: 모듈을 불러올 때 서로가 서로를 불러오는 순환참조가 나오지 않도록 해야 함

 

6. process 객체

: 현재 실행 중인 노드 프로세스에 대한 정보를 가지고 있는 객체

console.log("process.version: ", process.version);
console.log("process.arch: ", process.arch);
console.log("process.platform: ", process.platform);
console.log("process.cpuUsage: ",process.cpuUsage());
// 결과
process.version:  v16.18.1
process.arch:  x64
process.platform:  win32
process.cpuUsage:  { user: 46000, system: 31000 }

 

7. OS 모듈

: 운영체제의 정보를 담고 있는 내장 모듈

  • 내장 모듈은 내장 객체와 다르게 불러온 후 사용해야 함(내장 객체는 불러올 필요 없음)
const os = require("os"); //모듈 불러오기

console.log("os.type: ",os.type());
// console.log("os.cpus: ",os.cpus()); //너무 길어서 생략
console.log("os.homedir: ",os.homedir());
console.log("os.freemem: ",os.freemem()); //사용 가능한 메모리 용량
console.log("os.totalmem: ",os.totalmem()); //전체 메모리 용량
// 결과
os.type:  Windows_NT
os.homedir:  C:\Users\LG
os.freemem:  1479606272
os.totalmem:  8415100928

 

8. path 모듈

: 폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈

const path = require('path');
const file = __filename;
console.log("path.sep: ", path.sep); //sep: separater
console.log("path.dirname(): ", path.dirname(file));
console.log("path.extname(): ", path.extname(file));
console.log("path.basename(): ", path.basename(file));
console.log("path.parse(): ", path.parse(file));
// 결과
path.sep:  \
path.dirname():  C:\Users\LG\desktop\SeSAC\github\practice\nodejs
path.extname():  .js
path.basename():  02_module_obj2.js
path.parse():  {
  root: 'C:\\',
  dir: 'C:\\Users\\LG\\desktop\\SeSAC\\github\\practice\\nodejs',
  base: '02_module_obj2.js',
  ext: '.js',
  name: '02_module_obj2'
}

 

9. url모듈

: 인터넷 주소를 쉽게 조작할 수 있게 도와주는 모듈

url 설명

  • 인터넷 주소를 부분별로 분해하여 확인할 수 있음
  • 노드 URL 방식WHATWG URL방식이 있음

 

노드 URL 방식

const url = require('url');
console.log("url: ",url); //url 모듈 함수 확인
console.log("url.parse: ",url.parse);  // [Function: urlParse]
// 주소를 객체로 분해(parse)
var obj = url.parse("https://shopping.naver.com/hotdeal/p/luckto/index.naver?id=3750201&cat=1064&sort=pplr");
console.log("obj: ",obj);
// 분해된 url을 다시 합침(format)
console.log("url.format(): ",url.format(obj));
console.log("protocol: ",obj.protocol);
// 결과
url:  {
  Url: [Function: Url],
  parse: [Function: urlParse],
  resolve: [Function: urlResolve],
  resolveObject: [Function: urlResolveObject],
  format: [Function: urlFormat],
  URL: [class URL],
  URLSearchParams: [class URLSearchParams],
  domainToASCII: [Function: domainToASCII],
  domainToUnicode: [Function: domainToUnicode],
  pathToFileURL: [Function: pathToFileURL],
  fileURLToPath: [Function: fileURLToPath],
  urlToHttpOptions: [Function: urlToHttpOptions]
}
url.parse:  [Function: urlParse]
obj:  Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'shopping.naver.com',
  port: null,
  hostname: 'shopping.naver.com',
  hash: null,
  search: '?id=3750201&cat=1064&sort=pplr',
  query: 'id=3750201&cat=1064&sort=pplr',
  pathname: '/hotdeal/p/luckto/index.naver',
  path: '/hotdeal/p/luckto/index.naver?id=3750201&cat=1064&sort=pplr',
  href: 'https://shopping.naver.com/hotdeal/p/luckto/index.naver?id=3750201&cat=1064&sort=pplr'
}
url.format():  https://shopping.naver.com/hotdeal/p/luckto/index.naver?id=3750201&cat=1064&sort=pplr
protocol:  https:

 

WHATWG URL방식

  • searchParams 모듈

      : search부분(?문자 뒤)의 부분 처리를 도와주는 모듈

console.log("url.URL: ", url.URL); // [class URL]

var obj2 = new url.URL("https://shopping.naver.com/hotdeal/p/luckto/index.naver?id=3750201&cat=1064&sort=pplr");
console.log("searchParams: ", obj2.searchParams);
console.log("searchParams.getAll(): ", obj2.searchParams.getAll('id')); //key에 대한 값을 보여줌
console.log("searchParams.keys: ",obj2.searchParams.keys()); // 전체 key값 보여줌
console.log("searchParams.has: ", obj2.searchParams.has("cat")); // cat이라는 key의 존재 여부 확인(true/false)
console.log("searchParams.keys: ",obj2.searchParams.values()); // 전체 value값 보여줌
console.log("--------------------------------");
obj2.searchParams.append('puppy','cute'); // puppy라는 key추가, 값은 cute
console.log("puppy check: ", obj2.searchParams.has("puppy")); // 잘 들어갔는지 확인
// 결과
url.URL:  [class URL]
searchParams:  URLSearchParams { 'id' => '3750201', 'cat' => '1064', 'sort' => 'pplr' }
searchParams.getAll():  [ '3750201' ]
searchParams.keys:  URLSearchParams Iterator { 'id', 'cat', 'sort' }
searchParams.has:  true
searchParams.keys:  URLSearchParams Iterator { '3750201', '1064', 'pplr' }
--------------------------------
puppy check:  true

 

 

 

 

 

반응형