● JavaScript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경.
장점은?
1. 논 블로킹(Non-blocking) I/O
- 블로킹(Blocking)은 프로그램이 특정 작업을 수행하는 동안 다른 작업을 중단 시키는 방식
→ 한 번에 하나의 작업만 처리 하는 것
= 파일을 읽는 동안 다른 작업 함께 수행 불가능
- 논 블로킹(Non-Blocking)은 프로그램이 여러 작업을 동시에 처리할 수 있음
→ 시스템 호출 완료되기까지 기다리지 않고 바로 다음 작업으로 넘어감
= 즉시 제어권을 호출한 함수에게 반환
2. 싱글 스레드(Single Thread)
- Thread : 프로그램이 동작할 때, CPU 또는 프로세서를 사용하는 단위
- I/O 작업 발생 시 비동기적으로 처리하여 여러 작업을 동시 처리 가능
- 컴퓨터 리소스를 효율적으로 사용 가능
- 동시성 문제 방지 (=Race condition)
3. 이벤트 루프(Event Loop)
- 호출 스택(Call Stack)과 이벤트 큐(Event Queue)를 관찰하면서
호출 스택 비어있고, 이벤트 큐에 작업이 있을 때 이벤트 큐 작업 호출 스택으로 이동시킨다.
- 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리.
그 동안 호출 스택에서 다른 작업들을 계속 처리할 수 있다.
→ 이벤트 루프는 중요하니 예시로 설명
function firstFunction() {
console.log('firstFunction 입니다.');
secondFunction();
}
function secondFunction() {
// 2 초간 기다린다.
setTimeout(function () {
console.log('secondFunction 입니다.');
}, 2000);
}
firstFunction();
console.log('전역 코드 실행 중!');
// print: firstFunction 입니다.
// print: 전역 코드 실행 중!
/** 2 초간 기다린다. **/
// print: secondFunction 입니다.
- 코드를 순서대로 설명
1. firstFunction 호출 스택에 추가(=push)되고 실행 → 'firstFunction 입니다' 콘솔에 표시
2. 후에 secondFunction 호출 → 호출 스택에 추가되고, setTimeout 실행
3. setTimeout은 비동기 함수로, 이벤트 큐에 넣고 secondFunction을 호출 스택에서 제거(=pop)
4. firstFunction도 호출 스택에서 제거 → '전역 코드 실행 중!' 콘솔에 표시
5. 2000ms 지난 후 'secondFunction 입니다' 출력하는 작업 이벤트 큐에서 호출 스택으로
6. 호출 스택이 비어있음으로 이벤트 루프가 이 작업을 호출 스택으로 이동
'IT > Server' 카테고리의 다른 글
[Server] HTTP Status Code (1) | 2024.11.29 |
---|---|
[Server] 서버, 클라이언트 / 웹 어플리케이션 서버, 게임 서버 (0) | 2024.11.25 |
[Nods.js] 4. Middleware (0) | 2024.11.21 |
[Node.js] 3. Request, Response (2) | 2024.11.20 |
[Node.js] 2. Express.js, API, REST API (1) | 2024.11.19 |