Node.js 에 대해 알아보자
Node.js
- 구글 크롬의 자바스크립트 엔진(V8 Engine)에 기반해 만들어진
Javascript 런타임
- 이벤트 기반, 비동기 I/O 모델을 사용해 가볍고 효율적
- npm 패키지는 세계에서 가장 큰 오픈 소스 라이브러리
런타임이란?
- 프로그래밍 언어가 구동되는 환경
- Javascript의 런타임 환경은 웹 브라우저만 존재 했었다
-> Javascript를 서버단 언어로 사용하기 위해 나온 것이 node.js
-> 웹 브라우저 없이 실행 가능
npm
Node Packgae Manager
노드 패키지를 관리해주는 틀 (npm에 업로드 된 모듈, 패키지들 간 의존 관계가 존재)
package.json
- 패키지들이 서로 의존되어 있어, 문제가 발생할 수 있는데 이를 관리하기 위해 필요한 것
- 프로젝트에 대한 정보와 사용중인 패키지 이름 및 버전 정보가 담겨 있는 파일
"name" : 패키지 이름
"version" : 패키지의 버전
"main" : 자바스크립트 실행 파일 진입점 (문답식에서의 entry point)
"description" : 패키지에 대한 설명
"scripts": npm run 을 이용해 정해놓는 스크립트 명령어
"license": 해당 패키지의 라이센스
npm 사용하기
npm init
- 프로젝트를 시작할 때 사용하는 명령어
- package.json에 기록 될 내용을 문답식으로 입력한다.
npm init --y
- pacakge.json이 생성될 때 기본값으로 생성된다.
npm install 패키지 이름
- 프로젝트에서 사용할 패키지를 설치하는 명령어
- 설치된 패키지의 이름과 정보는 package.json의 dependencies에 입력된다.
Node.js 특징
- 자바스크립트 언어 사용
- Single Thread
- Non-blocking I/O
- 비동기적 Eevent-Driven
Single Thread
프로세스
- 실행 중인 프로그램
- 운영체제에서 할당하는 작업의 단위
Thread(스레드)
- 프로세스 내에서 실행되는 흐름의 단위
- 하나의 프로세스에는 n개의 스레드가 존재하며 동시에 작동할 수 있다.
Node.js는 사용자가 직접 제어할 수 있는 스레드는 하나이다.
- 싱글 스레드가 주어진 일을 하나밖에 처리 못한다.
- Non-blocking I/O 기능으로 일부 코드는 백그라운드(다른 프로세스)에서 실행 가능
- 에러를 처리하지 못하는 경우 멈춘다.
- 프로그래밍 난이도가 쉽고, cpu, 메모리 자원을 적게 사용한다.
에러를 처리하지 못하면 프로그램이 아예 중단됨
Non-blocking I/O
동기 (Synchronous)
- 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
- 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어진다.
- 한 요청에 서버의 응답이 이루어질 때까지 계속 대기해야 한다
비동기 (Asynchronous)
- 동시에 일어나지 않는 것
- 요청한 후 응답을 기다리지 않고 다른 활동을 한다.
I/O 작업 : 파일 시스템 접근 ( 읽기, 쓰기, 만들기 등 ), 네트워크 요청
Node.js는 표준 라이브러리의 모든 I/O 메서드를 비동기 방식으로 제공한다.
Event-Driven
- Event-Driven: 이벤트가 발생할 때 미리 지정해둔 작업을 수행
- ex) 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너 (Event Listener)
-> 이벤트 등록 함수
- 콜백 함수 (Callback Function)
-> 이벤트가 발생했을 때 실행되는 함수
Call Stack
Event Loop
Node.js의 역할
- 간단한 로직
- 대량의 클라이언트가 접속하는 서비스 (입출력이 많은 서비스)
- 빠른 개발 요구, 빠른 응답시간 요구
- 비동기 방식에 어울리는 서비스(스트리밍 서비스, 채팅 서비스 등 )
결론
서버에 데이터를 요청할때 필요한 axios fetch를 같이 알아봤다. 여기에 Ajax 등도 있다.
개인적으로 axios/fetch 이 두 가지를 사용하게 될거 같다.
다음에는 예제 등을 가져와 코드를 추가로 보충하겠다.
참고
[코딩온] 웹개발자 풀스택 과정 8주차 ppt