Node.js 기초부터 튼튼히
(2)내장 모듈
안녕하세요!! 다들 5월 황금연휴는 잘 보내셨는지요. 노동절, 석가탄신일, 어린이날 줄줄이 붙어있다니~ 캬 ^0^/
다들 잘 쉬었다면 백 투더 일상으로 돌아와서 저와 함께 노드JS의 내장되어있는 모듈들을 공부해요~
Node.js는 다양한 모듈을 지원합니다. Node.js 문서를 참고하여 직접 실행해보면서 사용법을 익히도록 합시다.
↓↓↓↓↓↓최신 문서를 참고하시고 싶으신 분은 아래 링크로 이동 ↓↓↓↓↓
https://nodejs.org/docs/latest/api/index.html
자, 시작해볼까요?
음.... 본격적으로 내장 모듈을 알아보기 전에 내장 모듈 호출하는 법부터 익힙시다.
require( {모듈명} )
require()로 내장된 모듈 또는 객체를 부를 수 있습니다. 어? 이전글에서 분명 require함수에 js파일을 불러올 때 사용하지 않았습니까? 하실 수 있는데 Node.js에서는 하나의 자바스크립트 파일을 하나의 모듈로 인식합니다. 아래와 같이 모듈을 호출하시면 됩니다.
// os 모듈을 호출합니다. var os = require('os'); |
그럼 각 모듈에서 사용할 수 있는 함수들에 대해 알아보겠습니다.
os 모듈
(https://nodejs.org/docs/latest/api/os.html)
os모듈은 사용하시는 운영체제와 관련된 값 또는 수치를 제공하는 메서드입니다.
< OS 모듈 함수 >
hostname() type() platfrom() arch() release() uptime() loadavg() totalmem() freemem cpus getNetworkInterfaces() |
운영체제의 호스트명을 반환합니다. 운영체제의 종류를 반환합니다. 운영체제의 플랫폼을 반환합니다. 운영체제의 아키텍처를 반환합니다. 운영체제의 버전을 반환합니다. 운영체제의 실행시간을 반환합니다. 로드 에버리지 정보를 담은 배열을 반환합니다. 시스템 총 메모리를 반환합니다. 사용 가능한 메모리를 반환합니다. CPU의 정보를 담은 객체를 반환합니다. 네트워크 인터페이스의 정보를 담은 배열을 반환합니다. |
os모듈의 함수는 간단히 값을 반환하는 메서드로 console.log()를 이용하여 확인해보실 수 있습니다.
(cpu 정보와 NetworkInterface관련 정보는 너무 길어서 캡쳐 생략)
url 모듈
url모듈을 통해서 URL 문자열을 객체로 바꾸거나 URL 객체를 문자열로 변환 가능하며 파싱과 조합을 사용하여 URL과 관련된 정보를 가져올 수 있습니다.
< url 모듈 함수 >
parse(urlStr, [, parseQueryString=false, slashesDenoteHost=false])) format(urlObj) resolve(from, to) |
URL 문자열을 URL 객체로 변환하여 리턴합니다. URL 객체를 URL 문자열로 변환하여 리턴합니다. 매개변수를 조합하여 URL 문자열을 생성하여 리턴합니다. |
parse함수를 사용해 어떻게 url 객체로 변환되는지 파악해 보기위해 구글에 'nodejs' 라고 검색한 창의 주소를 사용하여 실행해보겠습니다.
// url 모듈 호출 var url = require('url'); // 구글에 nodejs라고 검색한 주소를 파싱 var parsedURL = url.parse('https://www.google.co.kr/search?q=nodejs&oq=nodejs&aqs=chrome.0.69i59l3j69i60l3.968j0j8&sourceid=chrome&ie=UTF-8'); |
엔터를 똭 치면
node js의 문서에 들어가보면 다음과 같이 나와있다. 예제로 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
주소를 객체로 쪼게어 본다면 다음과 같다고 한다.
┌─────────────────────────────────────────────────────────────────────────────┐
│ href │
├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤
│ protocol ││ auth │ host │ path │ hash │
│ ││ ├──────────┬──────┼──────────┬────────────────┤ │
│ ││ │ hostname │ port │ pathname │ search │ │
│ ││ │ │ │ ├─┬──────────────┤ │
│ ││ │ │ │ │ │ query │ │
" http: // user:pass @ host.com : 8080 /p/a/t/h ? query=string #hash "
│ ││ │ │ │ │ │ │ │
└──────────┴┴───────────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)
이렇게 파싱된 url객체를 잘 활용할 수 있을 뿐더러, resolve, format함수를 통해 조합하고 다시 url 객체로 변경할 수 도 있으니 요긴하게 사용될 것 같은 모듈이다.
Query String 모듈
(https://nodejs.org/docs/latest/api/querystring.html)
URL 객체의 쿼리와 관련된 모듈로 위에서 했던 url 모듈처럼 쿼리의 객체를 문자열로 변환하거나 반대로 문자열을 쿼리 객체로 변환하는 기능을 수행합니다.
< Query String 모듈 함수 >
stringify(obj[, sep='&', eq='=']) parse(str[, sep='&', eq='=']) |
쿼리 객체를 쿼리 문자열로 변환합니다. 쿼리 문자열을 쿼리 객체로 변환합니다. |
열을 쿼위에 nodejs를 검색한 주소를 파싱한 값을 사용하여 그 안의 쿼리문의 값을 변환 시켜 보겠습니다.
// queryStrig 모듈 호출 var qs = require('querystring'); var objQuery = qs.parse(parsedURL.query); var strQuery = qs.stringify(objQuery); console.log(objQuery); console.log(strQuery); |
쿼리문이 object형태로 표시되는것과 문자열로 다시 변환되어 일자로 나오는 것을 확인하실 수 있습니다.
Util 모듈
(https://nodejs.org/docs/latest/api/util.html)
< Util 모듈 함수 >
utill.format() utill.debug() utill.log() |
매개변수로 입력한 문자열을 조합해 반환합니다. 프로그램의 실행을 멈추고 입력값을 출력합니다. timesteamp 시관과 함께 메시지를 출력한다. |
이 외에도 다른 유용한 메서드들이 많으니 문서에 꼭 들어가 참고하기 바란다. util의 format함수는 문자열로 반환하는 기능을 하기에 익숙한 인자 %s, %d, %j, % 를 이용한다
// util모듈 호출 var util= require('util'); var data = util.format('%d%s %d%s',5, '월', 5, '일 어린이날')' console.log(data); |
원하는 결과값이 출력되는걸 확인할 수 있다.
Crypto 모듈
(https://nodejs.org/docs/latest/api/crypto.html)
crypto 모듈은 해시와 암호화 기능이 있습니다. 간단히 해시를 생성하여 암호화와 복호화 하는 부분만 보고 넘어가겠습니다. 자세하게 알고 싶으신 분들은 api 문서를 참조하시면 됩니다.
// crypto모듈 호출 var crypto= require('crypto'); // 해시 생성 var shasum = crypto.createHash('sha1'); shasum.update('crypto_hash'); var output = shasum.digest('hex'); console.log(output) var key = '비밀'; // 비밀키값 var input = 'password486' //암호화 var cipher = crypto.createCipher('aes192', key); cipher.update(input, 'utf8', 'base64'); var cipheredOutput = cipher.final('base64'); //암호화 해제 var decipher = crypto.createDecipher('aes192', key); decipher.update(cipheredOutput,'base64', 'utf8'); var decipheredOutput = decipher.final('utf8'); console.log(input) // 출력값 : password486
console.log(cipheredOutput) // 출력값 : 7OVfng/ujIZ8RkfxBIJAaA==
console.log(decipheredOutput ) // 출력값 : password486
|
File System 모듈
(https://nodejs.org/docs/latest/api/fs.html)
FileSystem을 줄여서 fs모듈이라 하는데요 파일 처리와 관련된 작업을 합니다. 굉장히 많은 메소드가 있어 위에 링크따라 들어가셔러 언급되지 않은 메소드들도 함께 보면 좋을것 같습니다.
대부분의 메소드들이 동기/비동기로 나뉘어지는데, 동기방식을 사용하는 메소드에는 Sync라는 키워드가 붙어잇다고 보시면 좋을 것 같습니다.
비동기 방식은 callback함수를 마지막에 추가하시면 되는데 파일을 읽어오는 함수 readFile(비동기)/readFileSync(동기)로 설명하자면 동기방식은 (파일 경로, 인코딩)이라면 fs.readFileSync( 'test.txt' , 'utf8' );
비동기 방식은 마지막 인자에 callback 함수를 추가해주시면됩니다.
fs.readFile('test.txt', 'utf8'. function(error, data){ console.log(data); });
파일 처리를 하면서 중요한 부분 중 하나는 예외처리인데요. 시스템이 비정상적으로 종료되지 않게 하기 위한 필수 사항입니다만 동기/비동기에 따라 예외처리하는 법이 다릅니다. 위에서 예상하실 수 있듯이, 비동기 방식에서는 callback함수에 예외처리가 가능합니다. 동기 방식에서는 try/catch 문으로 예외처리 하시면 됩니다.
그럼 예외처리까지해서 비동기 방식의 파일을 읽고 쓰기를 실행해보겠습니다.
비동기 방식
// 모듈을 호출합니다. var fs = require('fs'); // 파일 쓰기 fs.writeFile( 'test.txt' , 'testing~' , 'utf8', function (error) { if(error){ console.log(error); }else{ console.log('파일 작성 완료'); } }); // 파일 읽기 fs.readFile( 'test.txt' , 'utf8' , function (error, data){ if(error){ console.log(error); }else{ console.log(data); } }); |
작성하시면,
텍스트 파일이 생성되고 파일 읽기를 통해 console창에 test.txt에 적혀있는 'testing~' 이 출력됩니다.
동기방식은 크게 다를거 없이 callback함수를 지우시고 전체를 try문으로 감싼 후 catch문에 error가 발생했을 경우의 처리 방식을 작성하시면 됩니다.
(ex)
try{ fs.writeFileSync('test.txt', 'hello summer', 'utf8'); }catch(e){ console.log(e); } |
이 외에도 파일에 내용을 추가하는 appendFile/appendFileSync 파일이 존재하는지 확인하는 exists 파일의 이름을 재정의 하는 rename/renameSync 등등 다양한 메소드들을 제공하니 꼭 api문서에 들어가보시길 권장합니다.
그리고 가장 중요한 것은 복습!복습! 또 복습입니다!
막상 이렇게 쉽게 따라하다가도 갑자기 '어쩌구저쩌구' 파일을 읽고 거기안에 있는 글을 url객체로 바꾸고 쿼리문을 string으로 또바꿔서 마지막에 s를 추가해봐' 라든지 하게 되면 멘붕이 올 수 있다.
스스로 퀴즈를 내어서 api문서나 책을 참고하지 않고 소스를 작성해보는 것 또한 좋은 공부방법이 되실 겁니다.
그럼 다음 번에는 이벤트 관련된 내용으로 찾아오겠습니다!!!
Node.js 시리즈 3편에 대한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.
'프론트엔드' 카테고리의 다른 글
!# 해쉬뱅 알아보기 (0) | 2017.05.29 |
---|---|
React vs Angular : 리액트와 앵귤러 비교 (0) | 2017.05.22 |
[번역] 마이크로 서비스 보안을 위한 10가지 팁 (0) | 2017.04.12 |
Node.js 기초부터 튼튼히 (1) 시작하기 (0) | 2017.04.04 |
CSS vs JS Animation: Which is Faster? (0) | 2017.03.28 |