반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Promise.any
- Array.from
- React
- JSP
- await
- Redux
- 자바스크립트
- JSX문법
- 방법..?
- javascript
- 이벤트위임
- Promise.race
- stopPropagation
- ES6
- 이벤트캡쳐
- memo()
- 상태관리도구
- 모던자바스크립트
- 이벤트버블링
- 게시판구현
- 하자있는방법
- 포트폴리오
- 리액트
- hook
- Promise.allSettled
- 변수할당
- this바인딩
- state
- 프로그래밍
- React.memo();
Archives
- Today
- Total
무브라더
[Nodejs] 스터디 내용 정리 본문
반응형
SMALL
1장 노드 시작하기
1.1 핵심 개념 이해
Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js는 이벤트 기반, 논블로킹 I/O모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
- Javascript Runtime
- 이벤트 기반
- 논블로킹 I/O 모델
- (추가적) 싱글쓰레드
1. 자바스크립트 런타임
- V8 : C++로 작성된 구글의 고성능 자바스크립트 및 웹어셈블리 엔진이다.(출처 : V8 공식홈페이지)
- 런타임(Runtime) : 컴퓨터 과학에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말한다.(출처 : 위키백과)
- Node js = V8 + libuv
- libuv : C, C++로 작성된 이벤트기반, 논블로킹 I/O 모델 구현 라이브러리이다.
- Node.js 아키텍처
출처 : https://sjh836.tistory.com/79
2. 이벤트 기반
이벤트 기반 : 이벤트가 발생할 때 미리 저장해둔 작업을 수행하는 방식을 말한다. ex) 클릭이나 네트워크 요청 등이 있다.
- Node.js도 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.
- Node.js 내부 구조
- 이벤트 루프(Event Loop) : 여러 이벤트 동시 발생시 어떤 순서로 콜백 함수를 호출할지 판단하는 역할 담당. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라 부린다.
- 태스크 큐(Task Queue or Callback Queue) : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부른다.
- API에 따라 마이크로 태스크 큐를 사용하거나, 매크로 태스크 큐를 사용한다.
- 마이크로 태스크 큐(Event Queue) : requestAnimationFrame, I/O, UI rendering, setTimeout, setInterval, setImmediate
- 매크로 태스크 큐(Job Queue) : process.nextTick, Promises, queueMicrotask(f), MutationObserver
- 백그라운드(Background) : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳.
출처 : https://velog.io/@yejineee
- 이벤트 루프 동작 방식
1. 매크로 태스크 큐에서 가장 오래된 태스크 를 꺼내서 실행시킨다.
2. 마이크로 태스크 큐에 있는 모든 태스크를 실행시킨다.
3. 렌더링 작업을 실행한다.
4. 매크로 태스크 큐에 새로운 매크로 태스크가 나타날 때까지 대기한다.
5. 1번으로 돌아간다.
3. 논블로킹 I/O 모델
논블로킹 : 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 뜻한다.
출처 : Node.js 교과서(저자 : 조현영)
- 블로킹보다 논블로킹 방식이 같은 작업을 더 짧은 시간 동안 처리할 수 있다.
- 하지만 싱글 스레드라는 한계 때문에 자바스크립트의 모든 코드가 이 방식으로 시간적 이득을 볼 수 있는 것은 아니다. => 노드 프로세스 이외 다른 컴퓨팅 자원을 사용할 수 있는 I/0 작업이 주록 시간적 이득을 많이 보기 때문에 이를 고려하면 좋을 것 같다.
- 논블로킹,블로킹 / 동기, 비동기에 대한 너무 잘 정리된 블로그를 발견해서 첨부한다.
4. 싱글 스레드
스레드(Thread) : 프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 스레드를 여러개 가질 수 있음. 스레드들은 부모 프로세스의 자원을 공유
프로세스(Process) : 운영체제에서 할당하는 작업의 단위. Node.js나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스. 프로세스 간 메모리 자원 공유 X
- 노드 프로세스는 내부적으로 스레드를 여러개 가지고 있지만 직접 제어할 수 있는 스레드는 하나 뿐 👉🏻 싱글 스레드라고 부름
- 싱글 스레드, 논블로킹 모델
- 효율적
- 점원이 아파서 못나오면 매우 치명적
- 주문을 받거나 서빙하는데 시간이 오래 걸린다면 주문이 많이 들어왔을 때 버거울 수 있음.
출처 : Node.js 교과서(저자 : 조현영)
- 멀티 스레드, 블로킹 모델
- 점원 한 명에게 문제가 생겨도 다른 점원으로 대체 가능
- 손님의 늘어날 수록 점원 수도 늘어남
- 손님 수가 줄었을 때 일하지 않고 노는 점원이 문제
- 점원을 새로 고용하거나 기존 점원을 해고하는 데 비용 발생
출처 : Node.js 교과서(저자 : 조현영)
👉🏻 Node.js에서는 cluster와 pm2 패키지를 통해 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식 채택
5. 정리(장 단점)
장점단점단점 커버
멀티 스레드 방식에 비해 컴퓨터 자원 적게 사용 | 싱글 스레드라서 CPU 코어 하나만 사용 | 멀티 프로세싱으로 커버 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 | AWS Lambda나 Google Cloud Functions 같은 서비스에서 작업 처리 지원해줌으로써 커버 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야 함 | try catch문으로 에러처리로 커버 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌으 때 서버를 관리하기 어려움 | nginx 등의 웹서버와 노드 서버 연결로 극복 |
자바스크립트를 사용함 | 자바스크립트 자체의 문제점(ex. 암시적 형변환 등..) | Typescript를 사용해 커버 |
JSON 형식과 호환하기 쉬움 |
👉🏻 에어비엔비, 우버, 넷플릭스, 링크드인, 페이팔, 월마트, 이베이 등에서 Node.js를 사용 중.
참고자료
- Node.js 정리 잘 된 블로그
- Node.js 교과서(저자 : 조현영)
- Node.js 공식문서
- V8 공식문서
반응형
LIST
'Programming > WEB' 카테고리의 다른 글
프론트엔드 아키텍처의 SSL 구현방법 및 보안 고려 사항 (0) | 2023.12.20 |
---|---|
프론트엔드 아키텍처의 구현 전략 (0) | 2023.12.20 |
프론트엔드 아키텍처란? (0) | 2023.12.20 |
[Nodejs] 간단한 api 구현해보기 (0) | 2023.08.21 |
[Web] HTTP와 HTTPS의 개념 및 차이점 (0) | 2022.03.31 |
Comments