2-7.[JS/Node]Node.js 모듈 사용법

해피데빙·2022년 1월 25일
0

TIL

목록 보기
7/45

브라우저에서 사용할 수 있는 비동기 흐름은 타이머 혹은 DOM 이벤트와 관련된 상황으로 다소 한정적
Node.js의 경우 많은 API가 비동기로 작성

Node.js는 '로컬 환경에서 자바스크립트를 실행할 수 있는 비동기 이벤트 기반 자바스크립트 런타임'

cf.런타임 : 환경

node.js 내장 모듈 사용방법

https://nodejs.org/dist/latest-v14.x/docs/api/

모듈이란?
건축으로부터 비롯된 단어
어떤 기능을 조립할 수 있는 형태로 만든 부분
fs모듈은 PC의 파일을 읽거나 저장하는 등의 일을 할 수 있게 도와준다

파일 시스템 모듈

파일을 읽거나 저장하는 기능을 구현할 수 있도록 돕는다
메서드 목록을 보면 파일을 읽을 때에 쓸법한 메서드 이름을 찾을 수 있다

모든 모듈은 '모듈을 사용하기 위해 불러오는 과정'이 필요합니다.
Node.js 에서는 자바스크립트 코드 가장 상단에 require 구문을 이용하여 다른 파일을 불러옵니다.

const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다
// 이제 fs.readFile 메소드 등을 사용할 수 있습니다!

readFile

파일 읽는 메서드

writeFile

파일을 저장하는 메서드

3rd-party 모듈을 사용하는 방법

서드 파티 모듈(3rd-party module)이란?
해당 프로그래밍 언어에서 공식적으로 제공하는 빌트인 모듈(built-in module)이 아닌 모든 외부 모듈을 일컫습니다. 서드 파티 모듈을 다운로드하기 위해서는 npm을 사용해야 합니다

ex. underscore 설치하는 방법

터미널

npm install underscore
[커맨드] underscore 모듈을 설치합니다.

이제 node_modules에 underscore가 설치되었습니다.
이제 Node.js 내장 모듈을 사용하듯 require 구문을 통해 underscore 를 사용할 수 있습니다.

const _ = require('underscore');
[코드] Node.js의 3rd-party 'underscore'를 사용할 수 있습니다.

Node.js 공식 문서 가이드 (feat. fs.readFile)

fs.readFile

로컬에 존재하는 파일을 읽어온다
https://nodejs.org/dist/latest-v14.x/docs/api/fs.html#fs_fs_readfile_path_options_callback

fs.readFile(path[, options], callback)
메서드 fs.readFile 은 비동기적으로 파일 내용 전체를 읽습니다.
이 메서드를 실행할 때에는 인자 세 개를 넘길 수 있습니다.

Asynchronously reads the entire contents of a file.

인자1: path \ | \ | \ | \
path에는 파일 이름을 인자로 넘길 수 있습니다.
네 가지 종류의 타입을 넘길 수 있지만 일반적으로 문자열()의 타입으로 넘깁니다.

filename or file descriptor

다음은 /etc/passwd 라는 파일을 불러오는 예제입니다.

fs.readFile('/etc/passwd', ..., ...)
[코드] '/etc/passwd' 파일을 불러오는 예제

인자 2 options \ | \
대괄호로 감싼 두 번째 인자 options는 넣을 수도 있고, 넣지 않을 수도 있습니다.

대괄호는 선택적 인자를 의미합니다. 공식 문서에서도 인자를 세 개를 넣는 경우와, 두 개를 넣는 경우를 예제와 함께 소개하고 있습니다.

options는 객체 형태 또는 문자열로 넘길 수 있습니다. 문자열로 전달할 경우 인코딩을 넘깁니다. 인코딩은 두 번째 예제를 참고하세요. 두 번째 예제에서는 'utf8' 을 두 번째 인자로 전달하는 것을 확인할 수 있습니다.

If options is a string, then it specifies the encoding:

let options = {
  encoding: 'utf8', // UTF-8이라는 인코딩 방식으로 엽니다
  flag: 'r' // 읽기 위해 엽니다
}

// /etc/passed 파일을 옵션을 사용하여 읽습니다.
fs.readFile('/etc/passwd', options, ...) 

[코드] 두 번째 인자 options에는 인코딩 정보를 전달합니다.

인자3 callback \
err \
data \ | \
콜백 함수를 전달합니다. 파일을 읽고 난 후에 비동기적으로 실행되는 함수입니다.

콜백 함수에는 두 가지 파라미터가 존재합니다. 에러가 발생하지 않으면 err 는 null 이 되며, data 에 문자열이나 Buffer 라는 객체가 전달됩니다. data 는 파일의 내용입니다.

질문: data 에는 문자열이나 Buffer 가 전달됩니다. 어떤 경우에 문자열로 전달되는 것일까요? 힌트는, 공식 문서의 다음 내용에 나와 있습니다.

If no encoding is specified, then the raw buffer is returned.

예제 코드를 통해 직접 코드를 작성하고 실험해 보세요. JavaScript 파일이 실행되는 디렉토리에, 적당한 텍스트 파일(test.txt)을 새롭게 생성한 후 실행하세요. 텍스트 파일의 내용은 어떤 것이든 괜찮습니다.

fs.readFile('test.txt', 'utf8', (err, data) => {
  if (err) {
    throw err; // 에러를 던집니다.
  }
  console.log(data);
});

[코드] 메서드 fs.readFile로 파일의 데이터를 읽어 들입니다.

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17

0개의 댓글