-
node.js, moduleNote 2020. 11. 16. 22:14
node.js
node.js는 chrome v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임
런타임: 프로그래밍 언어가 구동되는 환경
자바스크립트를 컴파일 해주는 엔진으로 빌드 된 자바스크립트가 구동 중인 환경
예전에는 자바스크립트 런타임이 브라우저 밖에 존재하지 않았는데 node.js가 등장하였다.
node.js를 이용하여 서버를 구성할 수 있고, npm으로 모듈 관리나 웹팩과 같은 CLI를 구동할 수 있다.
장점
- 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있고 새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버 기술을 빨리 개발할 수 있음
- 이벤트 기반 비동기방식이라 서버 무리가 적음
- npm(node package manager)을 통한 다양한 모듈(패키지) 제공, npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 개발 속도와 효율성이 크게 향상
단점
- 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다.
- 코드를 순차적으로 실행하는 것이 아니라 비동기 방식으로 이벤트를 보내고, 응답이 오면 처리하는 방식이기 때문에 java 개발을 했던 방식으로 설계하고 프로그래밍하면 큰 문제가 발생한다.
모듈
건축으로부터 비롯된 모듈이라는 단어
어떤 기능을 떼서 조립할 수 있는 형태로 만든 부분을 말한다.
fs(File System) module
파일을 읽거나 저장하는 등의 일을 할 수 있게 돕는 node.js의 한 부분
무엇이든 간에 모듈을 사용하기 위해서는 이를 불러오는 과정이 필요하다.
브라우저에서는 다음과 같이 <script> 태그를 이용했다면,
<script src= "불러오고싶은_스크립트.js" ></script>
node.js 에서는 자바스크립트 코드 가장 상단에 require 구문을 이용하는 것으로 시작한다.
const fs = require('fs') // 파일 시스템 모듈을 불러온다 const dns = require('dns') // DNS 모듈을 불러온다 // 이제 fs.readFile 메소드 등을 사용할 수 있다~~~!!
3rd-party 모듈을 사용하는 방법
3rd-party라는 용어는 프로그래밍 세계에서 공식적으로 제공하는 것이 아닌 다른 모든 "제3자"의 것을 의미한다. node.js 문서에 존재하지 않는 것은 공식적으로 제공하는 것이 아니므로 나머지는 전부 3rd-party라고 할 수 있다.
예를 들어, node.js에서 underscore를 사용한다고 가정하자. 이때에는 모듈을 다운로드하기 위해 npm을 이용해야 한다.
다음과 같이 underscore를 설치할 수 있다.
$ npm install underscore
이제 nude_modules에 underscore가 설치되었으니, node.js 내장 모듈을 사용하듯 require 구문을 통해 underscore를 사용할 수 있다.
const _ = require('underscore');
fs.readFile을 통해 알아보는 node.js 공식 문서 가이드
fs.readFile은 로컬 파일을 읽어오는 메소드
nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_fs_readfile_path_options_callback
File system | Node.js v12.19.0 Documentation
nodejs.org
fs.readFile(path[, options], callback)
fs.readFile 메소드는 파일의 전체 내용을 비동기적으로 읽는다. 메소드를 실행할 때 인자 세 개를 넘길 수 있다.
path <string> | <Buffer> | <URL> | <integer>
path에는 파일 이름을 인자로 넘길 수 있다. 네 가지 종류의 타입을 넘길 수 있지만 보통은 문자열(<string>)로 넘긴다.
/etc/test라는 파일을 불러오는 예제
fs.readFile('/etc/test', ..., ...)
options <Object> | <string>
대괄호로 감싼 두 번째 인자 options는 넣을 수도 있고, 넣지 않을 수도 있다. 대괄호는 선택적 인자를 의미한다. 공식 문서에서도 인자를 세 개를 넣는 경우와, 두 개를 넣는 경우를 예제와 함께 소개하고 있다. options는 객체 형태 또는 문자열로 넘길 수 있습니다. 문자열로 전달할 경우 인코딩을 넘긴다. (두 번째 예제 참고, 'utf8'로 넘기는 것을 확인)
let options = { encoding: 'utf8', // UTF-8이라는 인코딩 방식으로 연다 flag: 'r' // 읽기 위해 연다 } // /etc/test 파일을 옵션을 사용하여 읽는다 fs.readFile('/etc/test', options, ...)
callback <Function>
- err <Error>
- data <string> | <Buffer>
콜백 함수를 넘긴다. 파일을 읽고 난 후에 비동기적으로 실행되는 함수
콜백 함수에는 두 가지 파라미터가 존재한다. 에러가 발생하지 않으면 err는 null 이 되며, data에 문자열이나 Buffer라는 객체가 전달될 것이다. data는 파일의 내용이다.
fs.readFile('test.txt', 'utf8', (err, data) => { if (err) { throw err; // 에러를 던진다 } console.log(data); });
'Note' 카테고리의 다른 글
BMP, JPG, PNG (0) 2020.11.17 HTTP 응답 코드 (0) 2020.11.16 HTTP 프로토콜 (0) 2020.11.12 Asynchronous & Promise (0) 2020.11.10 Ajax, SPA (0) 2020.11.09