푸잉이의 기술블로그

[1주차] Node.js 교과서 본문

IT/Node.js

[1주차] Node.js 교과서

data고수 2024. 12. 16. 19:58

회사에서 친하게 지내는 멤버들이 자바의 자도 모르는 나를 포함하여 Node.js 스터디를 진행하기로 했다.

 

 

책: Node.js 교과서 개정 3판

길벗 출판사

 

공부 방법: 총 17장까지 구성된 책으로 1주일에 한 단원 씩 공부하고 5문제 출제하기로 하였다.

5문제 출제 하지 못한다면 다음날 스터디 멤버들에게 점심 쏘기 + 실 중앙에서 제로투ㅋㅋㅋㅋㅋㅋㅋㅋ

다들 개발자라 잘 알지만 나는... 후... 춤추기 싫으면 열심히 공부하고 기록하고자 몇 년 만에 티스토리를 틀었다... 열심히 할게... 

 

 

 

[1장] 노드 시작하기

1.1 핵심 개념 이해하기 

1.2 서버로서의 노드 

1.3 서버 외의 노드 

1.4 개발 환경 설정하기 

1.5 함께 보면 좋을 자료 

 

 

1.1 핵심 개념 이해하기 

 

Node.js란 (노드 공식 사이트)

: Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임

 

1.1.1 서버 

■ 서버

: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 or 프로그램

■ 클라이언트

: 요청을 보내는 주체 (사용자)

■ 노드

: 자바스크립트 프로그램이 서버로서 기능을 하기 위한 도구를 제공 (서버 역할)

 

1.1.2 런타임

■ 노드

: 자바스크립트 런타임

-> 자바스크립트 언어로 만든 프로그램을 실행할 수 있는 환경

■ 런타임

: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경

■ 자바스크립트 프로그램

기존) 웹 브라우저 위에서만 실행 가능

현재) 구글 V8 엔진 기반으로 노드 구현

*V8 : 오픈소스 자바스크립트 엔진

■ 라이브러리

: libuv

- 특성: 이벤트 기반, 논블로킹 I/O 구현

 

1.1.3 이벤트 기반

■ 이벤트 기반 (Event-driven)

: 이벤트(1. 클릭, 2. 네트워크 요청 등)가 발생할 때, 지정해 둔 작업 (1. 미리 등록, 2. 이벤트 리스너에 콜백함수 등록 등)을 수행하는 방식

■ 이벤트 루프 (Event loop)

- 이벤트 발생 시 호출할 콜백 함수들을 관리

- 호출된 콜백함수의 실행 순서를 결정하는 역할

- 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복

■ 백그라운드

- setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳

■ 태스크 큐

- 이벤트 발생 후, 백그라운드 -> 태스크 큐로 콜백 함수 보냄

 

1.1.4 논블로킹 I/O

■ 논블로킹 (Non-blocking)

: 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것

-> ex. setTime(콜백, 0)은 논블로킹으로 만들기 위해 사용하는 기법

■ 블로킹 (Blocking)

: 이전 작업이 끝나야만 다음 작업을 수행하는 것

■ 노드

: I/O 작업을 백그라운드로 넘겨 동시에 처리 함

 

1.1.5 싱글 스레드

■ 스레드

- 프로세스 내에서 실행되는 흐름의 단위

- 여러 개 생성해 여러 작업을 동시에 처리할 수 있음 

- 같은 주소의 메모리에 접근 가능 

■ 프로세스

- 운영체제에서 할당하는 작업의 단위

- 프로세스 간에는 메모리 등 자원 공유 x

-> ex. 노드나 웹 브라우저 같은 프로그램

■ 싱글스레드 & 블로킹

- 점원이 고객1의 주문 받고, 고객1에게 서빙 후 고객 2 주문 받고, 고객2 서빙

-> 비효율 

■ 싱글스레드 & 논블로킹

- 노드가 채택하고 있는 방식

- 점원이 고객1 주문 받고 주방에 전달, 고객2 주문 받고 주방에 전달, 고객3 주문 받고 주방에 전달

 

1.2 서버로서의 노드

Backgroud

: 서버는 기본적으로 I/O 요청이 많이 발생 함

- 싱글 스레드, 논블로킹 모델 사용

- 개수는 많지만 크기가 작은 데이터를 실시간으로 주고받는 데 적합

(네트워크나 DB, 디스크 작업 같은 I/O 에 특화되어 있기 때문)

-> ex. 주식 차트, 실시간 채팅 애플리케이션. JSON 데이터를 제공하는 API 서버

- 노드에는 웹 서버가 내장되어 있음 

 

단점) 

- 기본적으로 싱글 스레드라 CPU 코어 하나만 사용

- CPU 작업이 많은 서버로는 부적합

- 하나뿐인 스레드가 멈추지 않도록 관리 필요 

- 서버 규모가 커졌을 떄 서버를 관리하기 어려움

- 어중간한 성능 

 

 

+추가 공부


■ 웹 서버

: 웹 페이지와 웹 애플리케이션을 클라이언트에게 제공하는 역할을 수행하는 컴퓨터 프로그램 or 하드웨어

 

■ 클라이언트-서버

: 웹 서버와 웹 브라우저 (클라이언트) 사이의 통신 방식

 

■ 동작 원리

1. 사용자가 웹 브라우저를 통해 웹 사이트에 접속

2. 웹 브라우저는 해당 웹 페이지의 주소를 웹 서버에 요청 

3. 웹서버는 클라이언트 요청 받아들이고, 요청된 웹 리소스 (HTML 파일, 이미지, CSS, JavaScript 등) 위치 파악

4. 웹서버는 저장된 위치에서 파일 가져옴

5. 웹 서버는 요청에 따른 적절한 http 응답을 생성 (상태 코드, 헤더, 본문 등 포함)

6. 웹 브라우저는 받은 리소스를 기반으로 html 문서를 파싱 (주어진 데이터를 해석하고 분석하여 원하는 형식 또는 구조로 변환하는 작업), CSS 스타일링 적용, JavaScript 코드를 실행하여 웹 페이지 렌더링 

7. 웹 페이지에 표시

 

■ 웹서버의 종류 

- 아파치 (Apache): 가장 널리 사용되는 오픈 소스 웹 서버 소프트웨어

- 엔진엑스 (Nginx): 빠른 성능과 고가용성을 제공하는 웹 서버 및 리버스 프록시 소프트웨어

-> 많은 트래픽을 처리하는데 우수한 성능을 보여줌

 

 

Ref: https://wikidocs.net/208045

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments