-
[TIL] 0118 Node.js 입문카테고리 없음 2024. 1. 18. 21:19
웹 서버
- 클라이언트의 HTTP 요청을 받아 정적인 콘텐츠를 제공하며, 대표적으로 Apache, Nginx 이 있다.
- 필요 시 클라이언트의 요청을 웹 어플리케이션 서버 (WAS) 로 전달하여 처리한다.
웹 어플리케이션 서버 (WAS)
- 웹 서버와 협력하여 동적인 컨텐츠를 제공한다.
JavaScript
- 정적인 문서(하이퍼링크만 존재)를 맥락, 상황을 반영할 수 있는 동적인 페이지로 표현할 수 있도록 만들어졌다.
- ECMAScript 라는 이름으로 자바스크립트 표준이 제정 되었다.
Node.js
- Javascript 를 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경을 만드는 웹 프레임워크 기술
- 논 블로킹 (Non-blocking) I/O, 싱글 스레드 (Single Thread), 이벤트 루프(Event Loop) 의 특성을 가진다.
1) Non-blocking I/O : 프로그램의 실행 흐름을 제어하는 방식으로 blocking 은 프로그램이 특정 작업을 수행하는 동안 다른 작업을 중단시키는 방식이며, Non-blocking은 프로그램이 여러 작업을 동시에 처리할 수 있다.
2) Single Thread : 스레드를 하나만 사용하여 리소스를 많이 소모하지 않는다. / 여러 스레드가 공유하는 자원에 대한 동시접근 문제인 Race condition 문제를 방지한다.
= 싱글 스레드로 동작하지만, I/O 작업이 발생한 경우에는 이를 비동기적으로 처리하여 여러 작업을 동시에 처리한다.
Call stack : 함수의 실행 순서를 추적하는 자료구조
- 호출 스택에 함수를 추가(push) 하고 함수가 완료되면 제거(pop)
- 비동기 작업에서 네트워크 요청 등 시간이 많이 걸리는 작업을 기다리는 동안 JS 는 다른 어떤 작업도 처리할 수 없게 된다.
= 이 문제 해결을 위해 이밴트 루프, 이벤트 큐 를 사용한다.
Event Loop : 여러 이벤트들과 같은 비동기 작업들을 모아서 관리하고, 어떤 순서대로 실행해야하는지 도와주는 도구
- 호출 스택과 이벤트 큐 를 관찰하면서 호출 스택이 비어있고, 이벤트 큐에 작업이 있다면, 이벤트 큐의 작업을 호출 스택으로 이동하는 역할을 담당한다. 이를 통해 JS 는 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리하고, 그 동안 다른 작업들을 처리할 수 있다.