[Node.js] 기초 module 정리 (util, fs, http)

dosilv·2021년 6월 11일
0
post-thumbnail

🎂 module?

🍰 정의

독립된 기능을 갖는 함수, 파일 등을 모아놓은 것
기능별로 모듈을 만들고 필요한 곳에서 이를 호출하여 사용하면 유지보수가 편해진다!

  • 내장모듈(기본모듈): NodeJS 내부에서 제공하는 모듈
  • 외장모듈(확장모듈): 일반 개발자들이 만들어 놓은 모듈로, npm(node package manager)을 통해 사용 가능

모듈 사용법과 아주아주 기본적인 내장모듈에 대해 알아보자!


🍰 사용법

🍒 모듈 생성하기

const myModule = {};

myModule.plus = function(a, b) {
  return a+b;
}

myModule.square = function(a) {
  return a*a;
}

module.exports = myModule;

🍒 모듈 불러오기

const myModule = require('./myModule');
//require([파일 경로(외장모듈)] or [모듈 이름(내장모듈)])

console.log(myModule.plus(1, 2))
//3
console.log(myModule.square(3))
//9

🍰 사용 가능한 내장 모듈

14.17.0LTS 버전 기준 여기서 확인 가능!



🎂 Utilities(util)

  • nodeJS의 유용한 보조 기능을 모아 놓은 모듈.... 이라고 하는데 진짜 그냥 다양한 메서드가 많은 듯!

🍰 util.format(가공형식 문자열, [추가전달인자])

전달인자를 특정한 형식에 넣어서 가공한 문자열을 리턴

🍒 가공형식 문자열에 들어갈 수 있는 대체문자들

%s - String
%d - Number(integer, float)
%i - parseInt
%f - parseFloat
%j - JSON
%% - % sign

🍒 사용 예시

util.format('I have %d %s', 4, 'candies')
👉 'I have 4 candies'

util.format('%s = %s', 'name', 'doeun')
👉 'name = doeun'

* 대체문자보다 전달인자가 많은 경우: 남은 인자들은 공백으로 구분해 연결됨
util.formate('I like %s, %s', 'apple', 'cherry', 'blueberry', 'mango')
👉 'I like apple, cherry blueberry mango'

* 대체문자보다 전달인자가 적은 경우: 나머지 대체문자는 변환되지 않음
util.format('I like %s, %s, %s, %s', 'apple', 'cherry')
👉 'I like apple, cherry, %s, %s'

🍰 util.isArray/isDate/isRegExp(객체)

객체의 형식(type)을 확인해 boolean 값 리턴

🍒 사용 예시

util.isArray([1, 2, 3])
👉 true


🎂 File System(fs)

  • 파일 처리와 관련된 모듈
  • 메서드에 Sync가 붙어 있으면 동기 방식, 없으면 비동기 방식

    🍒 다시 알아보는 동기&비동기

    동기: 해당 작업을 하면서 다른 작업을 동시에 할 수 없음! 다음 작업으로 넘어가려면 해당 작업이 끝날 때까지 기다려야 함
    비동기: 해당 작업을 하며 다음 작업을 동시에 수행하며, 해당 작업이 끝나면 매개변수로 전달한 callback 함수가 호출됨

🍰 fs.readFile(file, encoding, callback)

파일 읽기 (비동기 방식)

const fs = require('fs');

fs.readFile('./file.txt', 'utf-8', (err, data) => {
  if(error) console.log(error)
  else console.log(data)
}

콜백함수는 발생 에러읽은 데이터를 각각 첫 번째, 두 번째 인자로 받는다. 에러를 이용해 예외처리를 해 줘야 에러가 발생해도 프로그램이 종료되지 않음!


🍰 fs.readFileSync(file, encoding)

파일 읽기 (동기 방식)

const fs = require('fs');

const data = fs.readFileSync('./file.txt', 'utf-8');
console.log(data)

기본적으로 이렇게 사용할 수 있고, (콜백함수가 따로 없기 때문에 리턴값을 출력하기 위해서 변수에 담은 것)
예외처리는 다음과 같이 try-catch문으로 할 수 있다.

try {
  const data = fs.readFileSync('./file.txt', 'utf-8');
  console.log(data);
} catch(error) {
  console.log(error)
}

🍰 fs.writeFile(file, data, encoding, callback)

파일 작성하기 (비동기 방식)

const fs = require('fs');

fs.writeFile('./newFile.txt', "Hi I'm doeun", 'utf-8', (error) => {
  if(error) console.log(error)
  else console.log('done!')
})

콜백함수는 에러를 인자로 받고, 역시 이를 이용해 예외처리를 해 준다.


🍰 fs.writeFileSync(file, data, encoding)

파일 작성하기 (동기 방식)

const fs = require('fs');

fs.writeFileSync('./newFile.txt', "Hi I'm doeun", 'utf-8');

이렇게 사용하고, 예외처리는 마찬가지로 try-catch 이용

try {
  fs.writeFileSync('./newFile.txt', "Hi I'm doeun", 'utf-8');
  console.log('done!');
} catch(error) {
  console.log(error)
}	


🎂 Http

  • http 웹 서버와 관련된 모든 기능을 담은 모듈

🍰 http.createServer([callback])

server 객체를 생성하는 메서드
server 객체는 웹 서버를 만들 때 사용하는 객체로, server 객체의 listen(port, [callback]) 메서드를 통해 서버를 실행하고 close([callback]) 메서드를 통해 종료한다.

const http = require('http');
const server = http.createServer();

server.listen(3000, function() {
  console.log('서버 실행')
}

createServer의 매개변수로 올 수 있는 callback 함수는, 매개변수로 request 객체response 객체를 가질 수 있다.

🍒 request 객체의 메서드

method - 클라이언트의 요청 방식
url - 요청 url
heaers - 요청 메세지 header

🍒 response 객체의 메서드

writeHead(statusCode, statusMessage, headers) - 응답 헤더 작성
end(data, encoding, callback) - 응답 본문 작성



Reference

제로부터 시작하는 Node.js - 4. 기본 내장 모듈
[Node.js] module 사용하기

profile
DevelOpErUN 성장일기🌈

0개의 댓글