ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 는 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리하고, 그 동안 다른 작업들을 처리할 수 있다. 

Designed by Tistory. KYW