Skip to content

Latest commit

 

History

History
72 lines (44 loc) · 2.45 KB

File metadata and controls

72 lines (44 loc) · 2.45 KB

1. 이벤트 중심 코드 실행

이벤트 중심 아키텍쳐는 Node.js 에게 무언가를 실행하도록 지시하고 그런다음
멀티 스레딩을 사용하는 운영 체제로 해당 프로세스를 보낸다.

  • 응답을 보냈다고 이벤트 리스너가 죽은것은 아니다.

  • 이벤트 리스너 코드를 만나면 코드를 즉시 실행하는 것이 아니라 이벤트 리스너에 등록 해놓는다.

  • 그리고 이벤트가 요청되면 콜백 함수를 실행한다.

  • writeFileSync vs writeFile

    • writeFileSync
      파일을 쓰기 전까지 다음 코드를 실행하지 않는다. (동기) 작은 텍스트를 보낼 때는 상관없지만 큰 파일일 경우는 실행 속도에 제한을 둔다.

    • writeFile
      파일을 쓰기전에 다음 코드를 실행한다. 인자로 callback 함수를 줄 수 있다.

      fs.writeFile('message.txt', message, err => { // 인자
          res.statusCode = 302;
          res.setHeader('Location', '/');
          return res.end();
      });

요약하자면 Node.js는 이벤트 리스너를 통해 코드 실행을 잠시 저장하고 다음 코드를 실행한다. 그리고 이벤트가 들어오면 콜백 함수를 실행한다. 따라서 성능이 뛰어나다.

2. Single Thred, Event Loop & Blocking Code

Node.js 가 작동하는 방식

Request > Server (Code [By single JavaScript Thread] ) > Event Loop (Handle Event Callbacks) or Worker Pool

실행 가능한 함수들은 Worker Pool 로 보내지고 이벤트 콜백은 Event Loop 에 저장 된다. 이후 이벤트가 실행된다.

블로킹 vs 논 블로킹

블로킹은 한 작업을 시작할 때 다음코드로 넘어가지 않는 패턴이고 논 블로킹은 비동기적 방식을 이용해 이벤트 루프에 콜백함수를 저장하는 패턴을 말한다.

  • 블로킹
    파일을 불러 올 때까지 시간이 걸린다.

    const fs = require('fs');
    const data = fs.readFileSync('/file.md'); // 파일을 읽을 때까지 여기서 블로킹
    console.log(data);
  • 논 블로킹 올바른 처리를 하기 위해 fs.unlink 를 fs.readFile 콜백함수 안에 사용했다.

    const fs = require('fs');
    fs.readFile('/file.md', (readFileErr, data) => {
      if (readFileErr) throw readFileErr;
      console.log(data);
      fs.unlink('/file.md', (unlinkErr) => {
        if (unlinkErr) throw unlinkErr;
      });
    });