πŸ“‚ File System λͺ¨λ“ˆ

지은·2022λ…„ 9μ›” 26일
0

Node.js Library

λͺ©λ‘ 보기
5/14

Node.js

Node.js의 μ†Œκ°œ λ¬Έμ„œμ—μ„œ μ •μ˜ν•˜λŠ” Node.jsλŠ” "비동기 이벀트 기반의 JavaScript λŸ°νƒ€μž„"이닀.

About Node.js
As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications.

λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 비동기(Web APIs)λŠ” setTimeout(), DOM events, XMLHttpRequest()λ“±μœΌλ‘œ λ‹€μ†Œ ν•œμ •μ μ΄μ§€λ§Œ, Node.js의 경우 λ§Žμ€ APIκ°€ λΉ„λ™κΈ°λ‘œ μž‘μ„±λ˜μ–΄ μžˆλ‹€.

λ¨Όμ € Node.js λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜κ³ , 이λ₯Ό 톡해 비동기 상황을 μ—°μΆœν•˜κ³  μ—°μŠ΅ν•΄λ³΄μž.


Node.js λ‚΄μž₯ λͺ¨λ“ˆ (Node.js built-in modules)

λͺ¨λ“ˆ : μ–΄λ–€ κΈ°λŠ₯을 쑰립할 수 μžˆλŠ” ν˜•νƒœλ‘œ λ§Œλ“  것
Node.js v16.17.1 documentation (Node.js λ‚΄μž₯ λͺ¨λ“ˆ λͺ©λ‘)

require()

λͺ¨λ“  λͺ¨λ“ˆμ€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λΆˆλŸ¬μ˜€λŠ” 과정이 ν•„μš”ν•˜λ‹€.
Node.jsμ—μ„œλŠ” JavaScript μ½”λ“œ 상단에 require() ꡬ문을 μ΄μš©ν•΄ λ‹€λ₯Έ νŒŒμΌμ„ λΆˆλŸ¬μ˜¨λ‹€.

const fs = require('fs'); // File System λͺ¨λ“ˆμ„ λΆˆλŸ¬μ˜¨λ‹€.
const dns = require('dns'); // DNS λͺ¨λ“ˆμ„ λΆˆλŸ¬μ˜¨λ‹€.

3rd-party λͺ¨λ“ˆ

: ν•΄λ‹Ή ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ κ³΅μ‹μ μœΌλ‘œ μ œκ³΅ν•˜λŠ” 빌트인 λͺ¨λ“ˆμ΄ μ•„λ‹Œ λͺ¨λ“  μ™ΈλΆ€ λͺ¨λ“ˆ
underscoreλŠ” Node.js 곡식 λ¬Έμ„œμ— μ—†λŠ” λͺ¨λ“ˆμ΄λ―€λ‘œ μ„œλ“œ νŒŒν‹° λͺ¨λ“ˆμ΄λ‹€.

μ‚¬μš©λ²•

  1. μ„œλ“œ νŒŒν‹° λͺ¨λ“ˆμ„ λ‹€μš΄λ‘œλ“œν•˜κΈ° μœ„ν•΄μ„œλŠ” npm을 μ‚¬μš©ν•œλ‹€.
npm install underscore # underscore λͺ¨λ“ˆμ„ μ„€μΉ˜ν•œλ‹€.
  1. μ΄λ ‡κ²Œ node.modules 폴더에 λͺ¨λ“ˆμ„ λ‹€μš΄λ°›μ€ ν›„, Node.js λ‚΄μž₯ λͺ¨λ“ˆμ„ λΆˆλŸ¬μ˜€λŠ” 방법을 λ˜‘κ°™μ΄ require() ꡬ문을 μ΄μš©ν•΄ 뢈러였면 λœλ‹€.
const _ = require('underscore'); // underscore λͺ¨λ“ˆμ„ λΆˆλŸ¬μ˜¨λ‹€.

File system λͺ¨λ“ˆ (fs λͺ¨λ“ˆ)

: νŒŒμΌμ„ μ½κ±°λ‚˜ μ €μž₯ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ„λ‘ λ•λŠ” λͺ¨λ“ˆ
File System λͺ¨λ“ˆμ˜ λ©”μ†Œλ“œ λͺ©λ‘μ„ μ‚΄νŽ΄λ³΄λ©΄, νŒŒμΌμ„ 읽을 λ•Œ μ“Έ λ²•ν•œ λ©”μ†Œλ“œ 이름을 찾을 수 μžˆλ‹€.

  • readFile() : νŒŒμΌμ„ 읽을 λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œ
  • writeFile() : νŒŒμΌμ„ μ €μž₯ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œ

fs.readFile()

fs.readFile(path, [options], callback) : λΉ„λ™κΈ°μ μœΌλ‘œ 파일 λ‚΄μš© 읽은 ν›„ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” λ©”μ†Œλ“œ

  • 이 λ©”μ†Œλ“œλŠ” μ„Έ 개의 μ „λ‹¬μΈμžλ₯Ό λ°›λŠ”λ‹€. ➑️ path, [options], callback
  • λŒ€κ΄„ν˜ΈλŠ” 선택적 μ „λ‹¬μΈμžλ₯Ό μ˜λ―Έν•˜λ―€λ‘œ, λŒ€κ΄„ν˜Έλ‘œ 감싼 두 번째 μ „λ‹¬μΈμž optionsλŠ” 넣을 μˆ˜λ„ 있고, 넣지 μ•Šμ„ μˆ˜λ„ μžˆλ‹€.

fs.readFile() λ©”μ†Œλ“œ μ‚¬μš©λ²• - fs.readFile 곡식 API λ¬Έμ„œ

path

: 파일 이름을 μ „λ‹¬μΈμžλ‘œ λ°›λŠ”λ‹€.

  • string Buffer URL integer λ„€ μ’…λ₯˜μ˜ νƒ€μž…μ„ 전달할 수 μžˆμ§€λ§Œ, 일반적으둜 λ¬Έμžμ—΄ νƒ€μž…μ„ λ°›λŠ”λ‹€.
fs.readFile('/etc/password');
// /etc/password νŒŒμΌμ„ λΆˆλŸ¬μ˜¨λ‹€.

options

: μ˜΅μ…˜μ„ λ¬Έμžμ—΄ λ˜λŠ” 객체 ν˜•νƒœλ‘œ 받을 수 μžˆλ‹€.

  • λ¬Έμžμ—΄λ‘œ 전달할 경우 인코딩을 λ°›λŠ”λ‹€.
fs.readFile('/etc/password', 'utf8');
// /etc/password νŒŒμΌμ„ utf8을 μ‚¬μš©ν•΄μ„œ μ½λŠ”λ‹€.
  • 객체λ₯Ό 전달할 경우 더 ꡬ체적인 μ˜΅μ…˜μ„ 전달할 수 μžˆλ‹€.
let options = {
	encoding = 'utf8', // utf8 인코딩 λ°©μ‹μœΌλ‘œ μ—°λ‹€.
  	flag = 'r'         // 읽기 μœ„ν•΄ μ—°λ‹€.
}

fs.readFile('/etc/password', options);
// /etc/password νŒŒμΌμ„ utf8을 μ‚¬μš©ν•΄μ„œ 읽기 μ „μš©μœΌλ‘œ μ½λŠ”λ‹€.

callback

callback(err, data) : νŒŒμΌμ„ 읽고 λ‚œ 후에 λΉ„λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” 콜백 ν•¨μˆ˜λ₯Ό μ „λ‹¬λ°›λŠ”λ‹€.
μ΄λ•Œ, 이 콜백 ν•¨μˆ˜μ—λŠ” 2가지 λ§€κ°œλ³€μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€.

  • err
  • data (파일의 λ‚΄μš©)

μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ errλŠ” null이 되고, dataμ—λŠ” λ¬Έμžμ—΄μ΄λ‚˜ BufferλΌλŠ” 객체가 μ „λ‹¬λœλ‹€.

fs.readFile('test.txt', 'utf8', (err, data) => {
  if(err) {
  	throw err; // μ—λŸ¬λ₯Ό λ˜μ§„λ‹€.
  }
  console.log(data); // dataλ₯Ό μ½˜μ†”μ— 좜λ ₯ν•œλ‹€.
})

Buffer 객체

버퍼 ν˜•νƒœμ˜ 데이터λ₯Ό μ›λž˜μ˜ 문자둜 λ‹€μ‹œ λ°”κΎΈλ €λ©΄ toString() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ λœλ‹€.

data.toString()

μ˜ˆμ‹œ)

  • fs.readFile() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•΄ 파일의 λ‚΄μš©μ„ λΆˆλŸ¬μ˜€λŠ” ν•¨μˆ˜ getDataFromFile()
  • λ§Œμ•½ μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄, 콜백 ν•¨μˆ˜μ˜ 첫 번째 μΈμžμ— err, 두 번째 μΈμžμ— null을 μ „λ‹¬ν•œλ‹€.
  • μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄, 콜백 ν•¨μˆ˜μ˜ 첫 번째 μΈμžμ— null, 두 번째 μΈμžμ— data을 μ „λ‹¬ν•œλ‹€.
const fs = require("fs")

const getDataFromFile = function(filePath, callbackFn) {
	return fs.readFile(filePath, 'utf-8', (err, data) => {
    	if(err) {
        	callback(err, null);
        } else {
        	callback(null, data);
        }
    });
};

getDataFromFile('test.txt', (err, data) => console.log(data));
// λ§€κ°œλ³€μˆ˜λ‘œ err, dataλ₯Ό λ°›μ•„ μ½˜μ†” λ‘œκ·Έμ— dataλ₯Ό 좜λ ₯ν•˜λŠ” 콜백 ν•¨μˆ˜
profile
λΈ”λ‘œκ·Έ 이전 -> https://janechun.tistory.com

0개의 λŒ“κΈ€