: 정적인 문서를 조금 더 동적으로 표현할 수 있도록 만들어주는 것
• 정적 페이지 : 미리 작성되어 확정된 페이지로, 실시간 정보나 맥락을 반영하지 못함
• 동적 페이지 : 맥락, 상황을 반영할 수 있는 페이지
: Javascript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경
• Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임
• 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적
• Node.js 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계
V8 엔진 : 구글이 개발하여 구글 크롬 브라우저에서 사용하는 자바스크립트 엔진
(브라우저 환경 이외에서도 자바스크립트 사용 가능)
libuv : Node.js가 비동기 I/O 작업을 수행할 수 있게 해주는 중요한 라이브러리
(블로킹 I/O 모델 -> 여러 요청을 효율적으로 처리 가능)
• 논 블로킹
• I/O 싱글 스레드
• 이벤트 루프
블로킹 I/O, 논 블로킹 I/O : 프로그램의 실행 흐름을 제어하는 방식
• 블로킹
: 프로그램이 특정 작업을 수행하는 동안 다른 작업을 중단시키는 방식
블로킹 I/O: 한 번에 하나의 작업만을 처리할 수 있으며,
호출된 함수가 자신의 작업을 모두 마칠 때 까지 호출한 함수에게 제어권을 넘겨주지 않습니다.
• 논 블로킹
: 프로그램이 여러 작업을 동시에 처리 가능
논 블로킹 I/O: 시스템 호출이 완료되기를 기다리지 않고 바로 다음 작업으로 즉시 넘어갈 수 있는 방식, 호출된 함수는 작업의 완료 여부와 상관없이 즉시 제어권을 호출한 함수에게 반환합니다.
• I/O : 데이터의 입력 (Input) / 출력 (Output)
: 스레드 하나를 사용, 동시에 하나의 작업만을 처리할 수 있음
• 스레드 : 프로그램이 동작할 때, CPU 또는 프로세서를 사용하는 단위
여러 스레드를 사용하면 여러 작업을 동시에 처리 가능 -> 복잡성 증가, 리소스 소모 증가
싱글 스레드 방식을 사용하는 이유
: Node.js에서 코드의 재사용성을 높이기 위해 작성된 독립적인 코드 조각
(일반적으로 프로젝트 내에서 사용되는 코드 조각을 의미)
: 모듈을 npm 또는 yarn 과 같은 패키지 매니저를 통해 업로드 하여 다른 개발자 들과 공유할 때
(모듈을 포함하고 있거나 다른 패키지에 의존하고 있는 코드의 집합)
: 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용하기 위한 툴
: Node.js 패키지의 설치, 업데이트, 삭제 등, 패키지간의 의존성을 관리
1) npm
2) yarn
해당 모듈이 참조하고 있는 다른 모듈에 대한 종속성(Dependency)을 관리하는 역할을 담당