블로킹 I/O
: 코드 실행을 중간에 막는 것 → 코드 실행이 멈추는 것
💡 블로킹의 문제 사례
// 서버에서 블로킹 I/O // 시간이 많이 걸리는 코드가 있다면 ? const http = require("http"); const server = http.createServer((req, res) => { if (req.url === "/home") { res.end("HOME"); } else if (req.url === "/about") { for (let i = 0; i < 1000; i++) { for (let j = 0; j < 1000; j++) { console.log(`${i}${j}`) } } res.end("ABOUT"); } else { res.end("Not Found"); } }); server.listen(3000, () => { console.log("3000번 포트에서 서버 실행 중"); })
/about으로 요청하게 되면 로딩이 발생하여 시간이 걸려 다른 요청을 하더라도 모두 멈추게 된다. → 즉, 서버가 뻗는 증상 발생!
논블로킹 I/O
: 블로킹이 생기지 않게 비동기 처리를 하는 것
- 백엔드 개발을 할 때 네트워크를 통해 클라이언트와 서버 간에 자료를 주고 받아야 하는 작업에서 주고 받는 데이터 양과 네트워크 속도가 일정하지 않으므로 시간 지연을 항상 고려해야 함 → 네트워크와 관련된 작업을 할 때 중간에 멈추는 일이 없도록 비동기 처리를 하는 것 ! 논블로킹 I/O !
// 논블로킹 I/O
const fs = require("fs");
const data = fs.readFile("example.txt", "utf8", (err, data) => {
if (err) {
console.error(err);
}
console.log(data);
});
console.log("코드 끝!"); // 파일 읽기 전에 실행

'[NodeJS] 노드' 카테고리의 다른 글
| [NodeJS] 비밀번호 암호화하기-bcrypt 모듈 (0) | 2024.06.03 |
|---|---|
| [Express] express-async-handler (0) | 2024.06.03 |
| RESTful API (0) | 2024.05.28 |
| [Javascript] let과 const 그리고 var (0) | 2024.05.27 |
| 버퍼와 스트림 (0) | 2024.05.23 |