본문 바로가기
코딩/군 장병 AI·SW 역량강화 교육

[군 장병 AI/SW 교육] Node.js 시작하기 2 / Express.js 기초 1

by 나는준이 2023. 11. 4.
반응형
 군 장병 AI/SW 교육 / 엘리스 코딩 / [초급] 웹 개발 프로젝트 / Express.js 기초1 / Node.js 시작하기의 노트 필기입니다

-- Node.js 시작하기 2 --

목차

 
1. Node.js 이해하기
2. Node.js의 특징  <==
    가. 싱글 쓰레드
    나. 비동기
    다. 이벤트 기반
3. Node.js 시작하기
 


2. Node.js의 특징

*Node.js의 특징 한줄 요약

싱글 쓰레드 - 비동기 - 이벤트 기반

 

가. 싱글 쓰레드

1) 쓰레드 : 명령을 실행하는 단위
-복잡한 명령을 한 단위로 실행하게 되면 굉장히 오래 걸릴 것
-명령을 여러 개의 단위로 쪼개서 실행시키면 실행 속도가 빨리 질 것이다. 
-한 개의 쓰레드는 한 번에 한가지 동작만 실행 가능
 
2) 싱글 쓰레드와 멀티 쓰레드 비교
싱글 쓰레드 - 한번에 한가지 동작만 수행
멀티 쓰레드 - 동시에 여러 동작 수행 가능
 

싱글 쓰레드 방식(좌)과 멀티 쓰레드 방식(우) / 출처 : 엘리스 코딩

 
3) Node.js의 쓰레드
-Node.js는 싱글 쓰레드 방식이다.
-싱글 쓰레드 방식은 다음과 같은 장/단점이 존재.
 
장점 : 쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적
단점 : 쓰레드 기반의 작업들의 효율이 떨어짐 (ex. CPU 연산 작업)
 

단점을 보완하기 위해 Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소화

 

 

나. 비동기

1) 비동기 방식
-비동기란 어떤 동작을 실행한 후 그 동작이 완료되는 것을 기다리지 않는 것.
-동작의 완료를 기다리지 않고 바로 다른 동작 실행 가능
 
2) 비동기가 가능한 이유
-내가 일을 직접 하는 것이 아닌 다른 사람한테 일을 시키고 결과만 받아오는 방식이기 때문
-Node.js는 비동기를 통해 싱글 쓰레드 상황에서 효율적으로 프로그램을 진행시킴
 
*동기는 동작을 실행한 후에 완료가 되기를 기다리는 방식
 
3) 멀티 쓰레드 동기 방식와 싱글 쓰레드 비동기 방식의 차이
그림으로 이해해보자
+이 부분은 강좌의 설명만으로는 충분히 이해되지 않아서 추가 자료를 찾아봄
++쓰레드에 대한 설명도 보충함
 
쓰레드가 싱글이냐 멀티냐에 따라 달라지고 동기 방식이 동기냐 비동기냐에 따라 또 달라진다.
유의해서 봐야 한다.
 
쉽게 생각하자면 아래 표와 같다.

동기 순서
쓰레드 공간

동기와 쓰레드에 대한 비유

 
따라서 아래와 같은 표로 동기 방식과 쓰레드 종류를 이해 할 수 있다.

즉, 멀티 쓰레드 동기 방식은 여러 공간에서 일을 처리하되 일을 순서대로 처리하는것이다. 싱글 쓰레드 비동기 방식은 하나의 공간에서만 일을 처리하되 일을 순서대로는 처리하지 않는 것이다.

동기 방식 동기 일을 순서대로 처리
비동기 일을 순서대로 처리X
쓰레드 종류 싱글 쓰레드 하나의 공간에서만 일을 처리
멀티 쓰레드 여러 공간에서 일을 처리

동기 방식과 쓰레드 종류에 대한 쉬운 이해

 
강좌에서는 멀티 쓰레드 동기 방식과 싱글 쓰레드 비동기 방식을 비교하고 있다.

 

싱글 쓰레드 비동기 방식에서 실행, 실행, 실행을 그냥 시켜버린다.

실행 시킨 내용이 Node.js 외부에서 일어난다.

 

반면에 멀티 쓰레드 동기 방식은 동시에 실행을 시키고 실행하는 동안 다른 작업을 하지 못하게 된다. 

즉, 그림의 빨간 부분의 동안에는 CPU의 리소스를 낭비하게 되는 것이다. 

 

멀티 쓰레드 동기 방식과 싱글 쓰레드 비동기 방식의 비교 / 출처 : 엘리스 코딩

 
조금 더 이해하기 좋게 필자가 PPT를 통해 그림을 다시 그려보았다.

 

멀티 쓰레드 동기 방식
싱글 쓰레드 비동기 방식

 

 

다. 이벤트 기반

1) 이벤트

- HTML, CSS, JavaScript 등에서 버튼을 누르거나 하는 등의 작업 의미

 

2) 이벤트 기반

- 비동기 동작의 완료를 처리하는 방법

- 특정 동작을 실행 후, 해당 동작을 신경 쓰지 않음

    -> 어떤 작업이 실행을 시작해도 그 작업의 완료를 기다리지 않는 것

-대신, 그 작업(외부에서 처리되는 중)이 완료되었을 때 실행할 함수를 미리 등록

 

Node.js는 싱글 쓰레드이기 때문에 비동기 동작이 필요. 이를 구현하기 위해 이벤트 기반으로 진행

 

 

반응형