IT's Jenna

NodeJs Architecture 본문

Backend/Backend 기본

NodeJs Architecture

developer Jenna 2021. 1. 9. 23:44

NodeJS를 쓰는 이유!

  1. Nodejs를 통해 javascript 언어 하나로 홈페이지, 서버, 모바일앱을 한 번에 개발할 수 있다.
  2. NodeJS는 이벤트 루프 기반의 비동기성 방식으로 멀티스레딩 방식보다 서버의 성능을 더 높일 수 있다.
  • 서버의 성능 : 서버에서 1초당 처리할 수 있는 요청수가 높을수록 좋다. (서버 성능은 벤치마크 테스트를 통해 확인할 수 있음)

이벤트 루프 기반의 비동기성 방식이란 개념을 이해하기 위해 알아야 할 것!

  1. 프로그램 : 저장 장치에 저장되어 있는 정적인 상태의 코드의 집합
  2. 메모리 : CPU가 프로그램을 실행시키기 위해 할당하는 공간
  3. 프로세스 : 메모리에 올라가 있는 동적인 상태의 프로그램의 인스턴스
  4. 스레드 : 프로세스 내에서 동작되는 여러 실행의 흐름 (실행의 기본 단위)
  • 프로그램이란, 저장 장치(하드디스크)에 저장되어 있는 코드의 집합을 말한다. 즉, 단순한 코드 덩어리이며 어떠한 동작도 하지 않는 정적인 상태.
  • CPU는 이 프로그램을 메모리(RAM)를 통해 실행시킨다.
  • 프로세스란, 프로그램을 메모리에 올려서 실행시켰을 때의 동적인 상태를 의미한다. 실행되고 있는 컴퓨터 프로그램.
  • 시간의 흐름에 따라 프로그램이 복잡해 지면서 하나의 프로세스로 전체 프로그램을 돌리는데 한계가 왔다. 다수의 프로세스로 하나의 프로그램을 돌리는 것은 프로세스 간 메모리 공유가 안되기 때문에 불가하다(같은 자원을 이용하지 못 함). 
  • 이러한 단점을 극복하기 위해 나온것이 스레드, 프로세스 보다 한 단계 작은 실행 단위로서 프로세스 내에서 동시 다발적으로 돌아가는 각각의 실행 함수(가장 작은 실행 단위)라고 생각할 수 있다.

PC에 있는 ‘한글’이란 코드 덩어리 (프로그램) -> CPU가 메모리를 통해 한글을 실행 -> 실행되고 있는 한글 프로그램의 상태 : 프로세스 -> 한글 프로그램을 사용하면서 실행시키는 동작(함수)들 : 스레드

 

두 개의 스레드를 실행하고 있는 하나의 프로세스

 

  • 이때, 하나의 프로세스에서 하나의 스레드를 실행하면 싱글 스레드
  • 하나의 프로세스가 다수의 제어 스레드를 가지고 있으면 멀티 스레드

NodeJS는 싱글 스레드 방식을 사용!

  • Reason 1. 요청에 대해 빠르게 반응 : 다양한 요인이 결합된 데이터가 필요한 경우 멀티 스레드 방식이 필요하지만, 빠른 반응이 필요한 네트워크 서버의 경우 단일 스레드가 더욱 적합하다.
  • Reason 2. 자원 관리 용이 : 다수의 스레드가 공용 자원을 사용할 경우 동시 다발적으로 공용 자원을 수정하는 것을 막기 위해 공용 자원에 대한 접근이 통제되어야 하고 해당 과정은 상당히 복잡하다. 싱글 스레드 방식은 그러한 노력이 필요하지 않다.

이벤트 루프 기반 비동기식 NodeJS

  • NodeJS는 비동기식(None-Blocking) : 하나의 함수가 완료될 때까지 다른 함수가 기다리지 않고 먼저 실행되는 방식
  • 이벤트 기반 : 함수가 값을 반환(이벤트 발생)하면, 미리 지정해 둔 해당 값에 대한 동작을 수행하는 방식

결과 : 이벤트 루프 기반의 비동기식 NodeJS란, 하나의 스레드가 멈추지 않고 함수들을 실행시키며 어떤 값이 출력될 때마다 반응하는 방식의 javascript 실행환경

 

 

<참고>

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://beenlife.tistory.com/114

https://m.blog.naver.com/PostView.nhnblogId=isaac7263&logNo=221585732365&proxyReferer=https:%2F%2Fwww.google.com%2F

'Backend > Backend 기본' 카테고리의 다른 글

Express 환경 사용하기 1  (0) 2021.01.18
NodeJS 사용 시 필요한 패키지 및 사이트  (0) 2021.01.13
Server 2  (0) 2021.01.13
Server  (0) 2021.01.11
백엔드 기본 개념 및 용어 정리  (0) 2021.01.09
Comments