티스토리 뷰
▶NodeJS 소개
1. Node의 정의
- 노드는 서버인가?
- 서버의 역할도 수행할 수 있는 자바스크립트 런타임
- 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상머신(크롬의 V8 엔진 사용)의 상태
- 다른 런타임으로는 웹 브라우저(크롬, 엣지, 사파리, 파이어폭스 등)가 있습니다.
- 서버의 역할도 수행할 수 있는 자바스크립트 런타임
결론적으로는 서버 자체는 아니며,
서버 역할도 할 수 있는 자바스크립트 런타임이라고 정의할 수 있겠습니다
즉, 노드로 자바스크립트로 작성된 프로그램(서버)를 실행할 수 있습니다.
또한, 노드는 서버 실행을 위해 필요한 http/https/http2 모듈(express)를 제공합니다.
express가 무엇인지는 차차 알아봅시다 :)
2. Node의 내부구조
- 2008년 V8 엔진 출시, 2009년 노드 프로젝트 시작
- 노드는 V8과 libuv를 내부적으로 포함
- V8 엔진: 오픈 소스 자바스크립트 엔진 → 속도 문제 개선
- libuv: 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리
결론적으로 우리는 왼쪽 아래의 V8엔진(오픈 소스 자바스크립트 엔진) 덕분에 자바스크립트를 읽어서 작동시킬 수 있겠습니다.
3. Node의 특성
1) 이벤트 기반
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식(이벤트 기반 프로그래밍 방식)
- 이벤트의 예 : 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너: 이벤트를 등록하는 함수
- 콜백 함수: 이벤트가 발생했을 때 실행될 함수
참고로, 언제 이벤트가 들어올지 모르기 때문에 위 순서와는 다르게 실행되는 경우도 존재합니다.
2) Non-Blocking I/O
- 논 블로킹: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
- 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
- 일부 코드: I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
- I/O 작업을 제외한 나머지 코드는 블로킹 방식으로 실행됨
- 따라서 I/O 작업이 많을 때 노드 활용성이 극대화!
두 방식은 함수가 바로 리턴되는지 여부로 구분할 수가 있습니다.
- 블로킹 방식
- 작업1이 종료되기 전까지는 작업2가 막혀있음
- 논 블로킹 방식
- 오래 걸리는 함수는 백그라운드로 보내고
- 그 다음 코드를 먼저 실행시키고 나중에 오래 걸리는 함수를 실행 가능
- 병렬로 실행이 가능
- 시간적 이득↑
4. Node의 역할
1) 서버로서의 node
- 서버: 네트워크를 통해 클라이언트에게 정보가 서비스를 제공하는 컴퓨터 또는 프로그램
- 클라이언트: 서버에게 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
- 예시
- 브라우저(클라이언트, 요청)가 특정 웹사이트(서버, 응답)에 접속
- 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드
- 노드 != 서버
- 그러나, 노드는 서버를 구성할 수 있게 하는 모듈을 제공
2) node 서버의 장단점
장점 | 단점 |
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 CPU 코어를 하나만 사용 |
I/O 작업이 많은 서버로 적합 | CPU 작업(연산)이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야 함 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바스크립트를 사용함 | 어중간한 성능 |
JSON 형식과 호환하기 쉬움 |
- 페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용
3) 서버 외의 활용
- 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음
- 웹, 모바일, 데스크탑 애플리케이션에도 사용
- 웹 프레임워크: Angular, React, Vue, Meteor 등
- 모바일 프레임워크: React Native
- 데스크탑 개발 도구: Electron(Atom, Slack, VSCode, Discord 등 제작)
5. Node 설치 - https://nodejs.org/en/
Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
- LTS(Long-term support) 버전 권장
- 설치가 제대로 되었는지 확인
node --version
728x90
LIST
'백엔드 > NodeJS' 카테고리의 다른 글
[NodeJS] prettier & eslint 설정하기 (0) | 2022.12.27 |
---|---|
[NodeJS] body-parser란? (0) | 2022.12.02 |
[NodeJS] NodeJS(express) + React 연동하기 (0) | 2022.11.24 |
[NodeJS] nodeJS + mongoDB + EC2 권한 문제 해결하기(배포) (0) | 2022.11.24 |
[NodeJS] NodeJS 처음 시작하기 (2) | 2022.11.20 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- jest
- react
- rtl
- 프로젝트 회고
- 파이썬
- 자바스크립트 기초
- Python
- 머신러닝
- 타입스크립트
- testing
- 프론트엔드 공부
- 디프만
- 프론트엔드
- JSP
- 딥러닝
- TypeScript
- styled-components
- 인프런
- 데이터분석
- react-query
- 스타일 컴포넌트 styled-components
- 리액트 훅
- 리액트
- 자바
- 자바스크립트
- next.js
- CSS
- HTML
- frontend
- 프론트엔드 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함