주특기 입문
1. Node.js
1) 개요
- Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임
- Node.js를 통해 JS 애플리케이션들을 실행할 수 있으며, 주로 서버를 실행하는데 많이 사용
2) 상세
- JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램
- JavaScript V8엔진 위에서 동작하는 런타임(환경)
- 스크립트 언어가 아닌 프로그램
- 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어짐
- Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있는 것이 특징
3) Event-driven, Event Loop
- 이벤트 기반(Event-driven) : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 이벤트 기반 시스템은 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록
- 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기
- 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단
- 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복
4) 논 블로킹
- 작업들의 비동기 처리가 가능
5) 싱글 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스. 프로세스 간에는 메모리 등의 자원을 공유하지 않음
- 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
- 노드는 싱글 스레드 기반이기 때문에 JS코드는 동시에 실행될 수 없지만 논 블로킹 방식을 통해 이전 작업이 끝나기전에 다른 작업 수행이 가능함
6) 장단점
(1) 장점
- 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용
- I/O 작업이 많은 서버로 적합하며 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다
- 자바스크립트를 사용하기 때문에 JSON 형식과 호환이 잘됨
- 결론적으로 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 적합. 네트워트나 데이터베이스, 디스크 작업 같은 I/O에 특화되어있다. 실시간 채팅 애플리케이션, 주식 차트등이 예시
(2) 단점
- 작업이 스레드 하나에서 처리되기 때문에 코드가 CPU 연산을 많이 요구하면 스레드 하나로 감당하기 힘드므로 PU 부하가 큰 작업에는 적합하지 않음
'항해14기 본과정 > 항해14기 개발일지' 카테고리의 다른 글
[항해 14기] 개발일지13 (Node.js 입문) (0) | 2023.04.24 |
---|---|
[항해 14기] 개발일지12 (동기/비동기, 객체 리터럴) (0) | 2023.04.24 |
[항해 14기] 개발일지10 (프로그래머스 1LV - 카카오 기출) (1) | 2023.04.23 |
[항해 14기] 개발일지9 (프로그래머스 1LV) (0) | 2023.04.23 |
[항해 14기] 개발일지8 (프로그래머스 숙련) (0) | 2023.04.23 |