노드JS의 특징
Detail about 노드JS 특징의 3,4번.
const http = require('http')
: 노드에는 http라는 기본 모듈이 존재.
그 모듈을 불러오기 위해서는 require을 사용.
이후에는 http 모듈이 제공하는 여러가지 함수들을 사용 가능.
ex_2) 모듈 만들어, 사용하기
< maith.js >
function sum(a, b) {
return a + b;
}
module.exports = {
sum: sum //sum 키에 sum 함수 할당
}
< index.js >
const math = require('/math.js')
const result = math.sum(1, 2);
console.log(result);
nodejs로만든 application은 보통 client가 사용.
client가 application으로 요청을 보냄.
nodejs는 클라이언트의 요청을 event로 만들어 Event Que 에 차곡차곡 쌓아놓는다.
EventLoop는 Event QUE에 있는 Event 하나하나 뽑아서 실행한다.
이 EventLoop는 singleThread이며, 기본적으로 job을 처리한다.
그래서 job을 처리한 후, 요청한 client에게 결과를 응답 해 주다.
☞ nodejs는 singleThread다! 하는 이유!
EvnetLoop가 event를 하나씩 처리하는데, 그 event가 바로 실행되서 응답 될 수 없는 많은 시간이 필요한 작업 ( 디스크 파일 일기, 외부 네트워크 통신 등) 은 EventLoop가 직접 실행하지 않는다. 이는 다른 thread에게 위임한다.
무거운 jobd을 실행하는 worker.
이곳에서 실행이 완료되면, 결과를 다시 Event 형태로 que에 전달한다. 그럼, EventLoop는 Event Que에 있는 Event를 실행하다가 Worker Thread에서 보내준 event를 Event Que 에서 뽑으면, 다시 그 event를 실행한다.
실행이 완료되면 그 결과를 Client에게 보내주는 구조.
Summary
- Client가 보낸 모든 요청을 Event로 처리.
- 무거운 job들은 workerThread에게 전달해, 비동기로 처리.
비동기 세계
: 노드는 기본적으로 비동기로 동작하므로, 비동기 사용을 잘 할 줄 알아야 한다.
비동기 코드를 쓸 때 콜백 함수(err,data) 사용 & 실행 순서 유의!
readFile()
비동기 방식으로 파일을 읽는 함수
https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback
readFileSync()
동기 방식으로 파일을 읽는 함수
https://nodejs.org/api/fs.html#fs_fs_readfilesync_file_options