웹 서비스 개발(FB,BE,SERVER,DB)/Node.js

1. Node.js

Zoo_10th 2024. 3. 11.

1. Node.js란?

1-1. Node.js의 정의

Node.js의 정의와 기본 개념

1) 기본 설명: Node.jsⓇ는 오픈 소스, 크로스 플랫폼 자바스크립트 런타임 환경으로, 서버 측과 네트워크 애플리케이션 개발을 위해 설계되었다.

2) 엔진: Node.js는 구글의 크롬 V8 자바스크립트 엔진을 기반으로 구축되어, 빠르고 효율적인 코드 실행을 가능하게 한다

서버로서의 Node.js

1) 서버 런타임: Node.js 자체는 서버가 아니지만, 서버 기능을 수행할 수 있는 능력을 가진 자바스크립트 런타임이다.

2) 서버 구축: Node.js를 사용하여 HTTP 프로토콜을 기반으로 하는 웹 서버를 쉽게 구축할 수 있다.

3) 모듈 제공: Node.js는 서버를 실행하기 위해 필요한 여러 모듈-http, https, http2 등.을 기본적으로 제공한다 이 모듈들은 네트워크 요청을 처리하고 응답을 반환하는 기능을 간편하게 구현할 수 있도록 도와준다.

Node.js의 장점

1) 비동기 I/O 처리: Node.js는 이벤트 기반의 비동기 I/O를 사용하여, 높은 처리 성능을 유지할 수 있다. 이는 서버가 동시에 많은 네트워크 연결을 효과적으로 처리할 수 있도록 해준다.

2) 단일 언어 사용: 프론트엔드와 백엔드 개발 모두 자바스크립트를 사용할 수 있으므로, 개발 과정에서 언어의 일관성을 유지할 수 있다.

3) NPM: Node.js의 패키지 관리자인 NPM-Node Package Manager.은 세계에서 가장 큰 소프트웨어 레지스트리를 제공하며, 다양한 라이브러리와 툴을 쉽게 설치하고 관리할 수 있게 해준다.

실용적인 활용 예

웹 애플리케이션: RESTful API, 실시간 채팅 애플리케이션, 싱글 페이지 애플리케이션-SPA. 등 다양한 웹 애플리케이션을 Node.js를 통해 개발할 수 있다.

네트워크 애플리케이션: 뛰어난 스케일링 능력으로 대용량 네트워크 애플리케이션을 구축하는 데 적합한다.

1-2. 런타임

1) 노드의 역할: Node.js는 자바스크립트 런타임이며, 자바스크립트로 작성된 프로그램을 실행할 수 있게 해주는 환경을 제공한다

2) 런타임의 정의: 런타임은 프로그래밍 언어가 실행되는 환경을 말한다 즉, 특정 언어로 작성된 코드를 컴퓨터에서 실행할 수 있도록 하는 가상 머신의 상태나 환경이다.

3) 노드의 기반 기술: Node.js는 구글 크롬의 V8 엔진을 사용하여 자바스크립트 코드를 해석하고 실행한다

4) 웹 브라우저와의 비교: 웹 브라우저-크롬, 엣지, 사파리, 파이어폭스 등. 역시 자바스크립트 런타임을 제공하지만, 노드는 서버 측에서의 실행에 중점을 두고 있다.

5) 역사적 배경: 노드 이전에도 자바스크립트 런타임을 구현하려는 시도가 있었으나, 엔진 속도의 제약으로 인해 성공하지 못했다.

1-3. 내부 구조

2. Node.js의 특성

2-1. 이벤트 기반 (Event-Driven)

1) 작동 원리: Node.js에서는 이벤트가 발생할 때마다 미리 지정해둔 작업을 수행한다.

2) 이벤트 예시: 사용자의 클릭, 네트워크 요청 수신, 타이머 만료 등 다양한 이벤트들이 있다.

3) 이벤트 리스너: 이벤트 발생을 감지하고 해당 이벤트에 반응하기 위해 등록하는 함수이다.

4) 콜백 함수: 이벤트 발생 시 호출되어 실행되는 함수로, 이벤트 처리 로직을 담고 있다.

2-2. Non-Blocking I/O (비동기 입출력)

1) 논 블로킹의 개념: 시간이 많이 소요되는 작업을 백그라운드에서 처리하고, 메인 스레드는 다음 코드의 실행을 계속 진행한다.

2) 병렬 처리: I/O 작업(파일 시스템 접근, 네트워크 요청 등), 압축, 암호화 작업과 같이 오래 걸리는 작업들이 백그라운드에서 병렬로 처리된다. 

3) 효율성: I/O 작업이 많이 필요한 애플리케이션에서 Node.js를 사용하면 효율성이 극대화된다.

2-3. 프로세스와 스레드

1) 프로세스: 운영체제가 작업을 수행하기 위해 메모리에 할당하는 단위로, 각 프로세스는 독립된 메모리 영역을 가진다.

2) 스레드: 프로세스 내에서 실행되는 흐름의 단위로, 같은 프로세스 내의 스레드들은 메모리와 자원을 공유한다.

Node.js의 스레드 처리

1) 싱글 스레드: Node.js는 기본적으로 싱글 스레드로 작동한다. 노드의 메인 스레드는 하나이며, 모든 I/O 작업을 비동기적으로 처리하여 효율성을 높인다.

2) 비효율적인 상황: 단일 스레드로만 작동할 경우, 블로킹 작업이 발생하면 다른 모든 작업이 대기 상태에 놓일 수 있다. 

멀티 스레드 모델과의 비교

3. Node.js의 활용

3-1. 서버로서의 Node.js

1) 서버의 정의: 서버는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 시스템이나 소프트웨어다.

2) 클라이언트의 정의: 클라이언트는 서버에 요청을 보내는 주체로, 브라우저, 데스크탑 프로그램, 모바일 앱 또는 다른 서버일 수 있다.

3) 노드와 서버: Node.js는 자체적으로 서버가 아니다. 하지만, Node.js는 HTTP 모듈을 포함하여 서버를 구성할 수 있는 기능을 제공한다.

3-2. 노드 서버의 장단점

1) 장점

 - 이벤트 기반과 논 블로킹 I/O 모델로 인해, I/O가 중요한 애플리케이션에서 효율적이다.

 - 실시간 데이터 처리가 필요한 애플리케이션(예: 채팅 서버)에 적합하다.

 - 페이팔, 넷플릭스 등 많은 대기업에서 메인 또는 보조 서버로 사용하고 있다.

2) 단점

 - CPU를 많이 사용하는 작업(CPU-bound tasks)에는 적합하지 않을 수 있다.

 - 높은 트래픽을 처리해야 하는 경우, 별도의 서비스(AWS Lambda, Google Cloud Functions 등)를 사용하거나, 클러스터링을 통해 여러 노드 인스턴스를 운영해야 할 수 있다.

3-3. 서버 외의 Node.js 사용

1) 다양한 용도: Node.js는 단지 웹 서버에만 국한되지 않고, 다양한 형태의 애플리케이션 개발에 사용된다.

2) 웹 프레임워크: Angular, React, Vue, Meteor와 같은 웹 프레임워크는 Node.js 위에서 구동되며, 서버사이드 렌더링 등의 기능을 제공한다.

3) 모바일 애플리케이션: React Native와 같은 모바일 앱 프레임워크는 Node.js를 사용하여 모바일 앱을 개발하는 데 사용된다.
4) 데스크탑 애플리케이션: Electron은 Node.js를 기반으로 하여 Atom, Slack, Visual Studio Code, Discord 등의 데스크탑 애플리케이션을 개발하는 데 사용된다.

 

728x90

'웹 서비스 개발(FB,BE,SERVER,DB) > Node.js' 카테고리의 다른 글

5. Node.js WebServer 2  (0) 2024.03.13
4. Node.js WebServer  (0) 2024.03.12
3. Node.js_Basic2  (0) 2024.03.11
2. Node.js_Basic  (0) 2024.03.11
0. Node.js 설치하기  (0) 2024.03.11

댓글