본문 바로가기

Server/Node.js

<노드JS> 노드 내장 모듈

1. os & path

* os

 - 운영체제의 정보를 담고 있다.

 

const os = require('os');

console.log(os.arch()); // x64
console.log(os.platform()); // win32
console.log(os.type()); // Windows_NT
console.log(os.cpus());
// [
//   {
//     model: 'Intel....',
//     speed: 9999,
//     // ...
//   },
//   {//...},
//   {//...},
//   {//...},
// ]

console.log(os.freemem()); // 123456789
console.log(os.totalmem()); // 1234567890

 

 - os.arch() : prcess.arch와 동일하게 프로세서 아키텍처 정보를 보여준다.

 - os.platform() : process.platform과 동일하게 운영체제 플랫폼 정보를 보여준다.

 - os.type() : 운영체제의 종류를 보여준다.

 - os.cpus() : 컴퓨터의 코어 정보를 보여준다. 이 때 보이는 코어 갯수만큼 서버를 구성할 수 있다.

 - os.freemem() : 사용 가능한 메모리(RAM)을 보여준다.

 - os.totalmem() : 전체 메모리 용량을 보여준다.

* path

 - 경로를 쉽게 조작할 수 있도록 하는 모듈이다.

 

// path.js
const path = require('path')

const filename = __filename;
console.log(filename); // 'C:\Harry\Practice\path.js

console.log(path.dirname(filename)); // 'C:\Harry\Practice
console.log(path.extname(filename)); // .js
console.log(path.basename(filename)); // path.js

console.log(path.parse(filename))
// {
//   root: 'C:\\',
//   dir: 'C:\\Harry\\Practice',
//   base : 'path.js',
//   ext : '.js',
//   name : 'path'
// }
console.log(path.format({
  dir: 'A:\\Harry\\Practice',
  name: 'path',
  ext: '.js',
}));
// A:\Harry\Practice\path.js

console.log(path.relative('C:\\Harry\\Practice\\path.js', 'C:\\')); // ..\..\..
console.log(path.join(__dirname,'..','hi.js')); // A:\Documents\GitHub\hi.js
console.log(path.resolve(__dirname,'..','hi.js')) // A:\Documents\GitHub\hi.js

 

 - path.dirname(경로) : 파일이 위치한 폴더 경로를 보여준다.

 - path.extname(경로) : 파일의 확장자를 보여준다.

 - path.basename(경로, 확장자) : 파일의 이름을 보여준다. 이 때 두 번째 인자로 확장자를 넣어주면 확장자를 제외하고 보여준다.

 - path.parse(경로) : 파일 경로를 root, dir, base, ext, name으로 분리하여 객체형태로 보여준다.

 - path.format(객체) : parse로 분리된 경로를 합칠 수 있다.

 - path.relative(경로, 경로) : 첫 번째 경로에서 두 번째 경로로 가는 방법을 보여준다.

 - path.join(경로, ...) : 여러 인자를 받아서 하나의 경로로 합쳐준다. '..' 과 '.'도 알아서 처리해준다. 

 - path.resolve(경로, ...) : join과 비슷한 역할을 하지만 /를 상대경로가아닌 절대경로로 처리한다.

 

2. url 모듈

* WHATWG 방식

// url1.js
const url = require('url');
const { URL } = url;

const myURL = new URL('https://haesoo9410.tistory.com/191?category=880541');
console.log(myURL);
console.log(url.format(myURL));

// URL {
//   href: 'https://haesoo9410.tistory.com/191?category=880541',
//   origin: 'https://haesoo9410.tistory.com',
//   protocol: 'https:',
//   username: '',
//   password: '',
//   host: 'haesoo9410.tistory.com',
//   hostname: 'haesoo9410.tistory.com',
//   port: '',
//   pathname: '/191',
//   search: '?category=880541',
//   searchParams: URLSearchParams { 'category' => '880541' },
//   hash: ''
// }
// https://haesoo9410.tistory.com/191?category=880541

 

 - url 모듈 안에는 URL 생성자가 있다. 이 생성자에 주소를 넣어 객체를 만들면 주소가 부분별로 정리된다.

 

 - WHATWG 방식이므로 username, password, origin, searchParams 속성이 있다.

 

 - searchParams는 WHATWG 방식에서 쿼리스트링 부분 처리를 도와준다. 위의 주소에서 ? 뒷 부분을 의미한다. 위의 예시를 예로 들면 myURL.searchParams.keys() 와 같이사용한다. 메서드들은 다음과 같다.

 

   - getAll(key) : 키에 해당하는 모든 값들을 가져온다.

   - get(key) : 키에 해당하는 첫 번째 값을 가져온다.

   - has(key) : 해당 키가 있는지 검사한다.

   - delete(키) : 해당 키를 제거한다.

   - keys() : searchParams의 모든 키를 이터레이터객체로 가져온다.

   - values() : searchParams의 모든 값을 이터레이터객체로 가져온다.

   - append(키, 값) : 해당 키를 추가한다. 만일 이미 있다면 하나 더 추가한다.

   - set(키, 값) : 같은 키의 값들을 모두 지우고 새로 추가한다.

   - toString() : 조작한 searchParams객체를 다시 문자열로 만들며, 이를 search에 대입하면 주소 객체에 반영된다.

 

 

* 기존 노드 방식

// url2.js
const url = require('url');

const parseUrl = url.parse('https://haesoo9410.tistory.com/191?category=880541');
console.log(parseUrl);
console.log(url.format(parseUrl));

// Url {
//   protocol: 'https:',
//   slashes: true,
//   auth: null,
//   host: 'haesoo9410.tistory.com',
//   port: null,
//   hostname: 'haesoo9410.tistory.com',
//   hash: null,
//   search: '?category=880541',
//   query: 'category=880541',
//   pathname: '/191',
//   path: '/191?category=880541',
//   href: 'https://haesoo9410.tistory.com/191?category=880541'
// }
// https://haesoo9410.tistory.com/191?category=880541

 

 - url.parse(주소) 를 사용하여 주소를 분리한 객체를 만들어 낼 수 있다. WHATWG 방식과 달리 username과 password없이 auth가 존재하며, searchParams 대신 query가 있다.

 

 - url.format은 동일하게 사용할 수 있다.

 

 - 기존 노드 방식은 쿼리스트링을 querystring모듈로 처리한다.

 

// url3.js
const url = require('url');
const querystring = require('querystring');

const parseUrl = url.parse('https://haesoo9410.tistory.com/191?category=880541&test=harrytest');

const query = querystring.parse(parseUrl.query);

console.log(query);
// [Object: null prototype] { category: '880541', test: 'harrytest' }

console.log(querystring.stringify(query));
// category=880541&test=harrytest

 

 - querystring.parse(쿼리) : url의 쿼리부분을 객체로 분해한다.

 - querystring.stringify(객체) : 분해된 쿼리객체를 문자열로 조립한다.

 

3. 파일 시스템

* fs

 - fs는 파일 시스템에 접근하는 모듈이다. 이를 이용해서 파일이나 폴더를 생성하거나 삭제, 읽기, 쓰기가 가능하다.

 

const fs = require('fs');

fs.readFile('./readtext.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
  console.log(data.toString());
});


// <Buffer ed 85 8d ec 8a a4 ed 8a b8 20 ec 9d bd ea b8 b0 20 ec 98 88 ec a0 9c>
// 텍스트 읽기 예제

 

 - toString메서드로 버퍼를 문자열로 변경해주었다.

 

* fs 프로미스

 - 위는 콜백 방식이므로 콜백지옥에 빠질 위험이 있다. 프로미스 방식을 사용해보자. 간단하게 뒤에 promises를 붙이기만 하면 프로미스를 반환하도록 만들어져있다.

 

 - 이번 예시에서는 파일을 쓰고 읽는 예시이다.

 

const fs = require('fs').promises;

fs.writeFile('./writetext.txt', '텍스트 쓰기 예제')
  .then(() => {
    return fs.readFile('writetext.txt');
  })
  .then((data) => {
    console.log(data.toString());
  })
  .catch((err) => {
    console.error(err);
  })

// 텍스트 쓰기 예제

 

* 기타메서드

 - fs.access(경로, 옵션, 콜백) : 폴더나 파일에 접근할 수 있는지를 체크한다.

 - fs.mkdir(경로, 콜백) : 폴더를 만든다. 이미 폴더가 있으면 에러가 발생하므로 access메서드를 먼저 호출해서 확인하자.

 - fs.open(경로, 옵션, 콜백) : 파일의 아이디(fd 변수) 를 가져온다. 파일이 없으면 생성하고 아이디를 가져온다. 이 아이디를 이용하여 fs.read()나 fs.write()로 읽거나 쓸 수 있다. 두 번째 인자로 동작을 명시할 수 있다. 'w'(쓰기), 'r'(읽기), 'a'(추가) 를 사용한다.

 - fs.rename(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾼다. 같은 폴더일 필요는 없으므로 잘라내기 같은 역할도 가능하다.

 - fs.readdir(경로, 콜백) : 폴더 내부의 파일과 폴더를 배열로 확인할 수 있다.

 - fs.unlink(경로, 콜백) : 파일을 지울 수 있다.

 - fs.rmdir(경로, 콜백) : 폴더를 지울 수 있다. 폴더 내에 파일이 있으면 에러가 발생한다.

 

 

 

 


참고

 

 

 

문서 | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 

 

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의

노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스

www.inflearn.com

 


 

'Server > Node.js' 카테고리의 다른 글

<Node> M1 Mac에서 Rosetta로 노드 패키지 설치하기  (0) 2022.06.14
<노드JS> http 서버 만들기  (0) 2021.07.17
<노드JS> 노드 내장 객체  (0) 2021.07.16
<노드JS> 노드 JS란  (0) 2021.07.15