* 본 내용은 [Node.js 교과서 개정2판]의 요약본입니다.
* 추후 계속해서 업데이트 될 예정입니다.
Node.js에 대해 한 달 전쯤만 해도 알지 못했다.
이름정도만 들어본 적 있었으나 끝에 js가 붙어있어서 가끔 UI 코드를 검색했을 때 나오는 CoffeeScript(이것도 잘 모름)같은 자바스크립트 친구인가 하고 그냥 넘어갔다.
이처럼 나는 자바스크립트를 Front단에서 사용해왔다.
UI 기능을 위한 부분에서 사용했으며, 데이터 입출력같은 경우에는 Ajax를 사용하는 정도로만 이용을 했다.
아! 그리고 API 사용 정도? (뭐야! 내가 프로젝트에서 한 전부같다!)
아무튼! 이제 Node.js를 사용할 날이 많을 것 같아서 공부하고 있으며 그걸 찬찬히 꾸준히 정리해보자.
Node.js란?
- Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이다.
1. 서버 실행
- 자바스크립트 프로그램이 서버로서 기능하기 위한 도구 제공
- 자바스크립트 애플리케이션을 실행할 수 있으며 서버 애플리케이션을 실행할 수 있다.
2. 런타임
- 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있다.
- V8과 libuv 라이브러리 사용
3. 이벤트 기반
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 이벤트 루프 : 호출할 콜백 함수들 관리, 호출된 콜백 함수의 실행 순서 결정, 노드가 종료될 때까지 이벤트 처리를 위한 작업 반복
- 백그라운드 : 타이머나 이벤트 리스너들 대기, 여러작업이 동시에 실행될 수 있음
- 태스크 큐 : 정해진 순서대로 콜백들이 줄을 서 있음
4. 논 블로킹 I/O
- I/O : 입력(input)/출력(Output)
- 이전 작업이 완료될 때까지 대기하지 않고 다음 작업 수행
- 블로킹 : 이전 작업이 끝나야만 다음 작업 수행
- 논 블로킹방식과 블로킹 방식은 성능이 크게 달라지며, 논 블로킹 방식으로 코딩하는 습관을 들여야 함
5. 싱글 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간에는 메모리 등의 자원을 공유하지 않음, 스레드를 여러 개 생성해 여러 작업 동시에 처리 가능
- 스레드 : 프로세스 내에서 실행되는 흐름의 단위, 부모 프로세스의 자원을 공유, 같은 주소의 메모리에 접근 가능하므로 데이터 공유 가능
- Node.js는 싱글 스레드이지만 논 블로킹 모델이므로 스레드 혼자서 많은 일을 처리할 수 있다.
- 노드가 싱글 스레드로 동작하지 않는 경우 : 스레드풀, 워커 스레드
- 멀티 스레딩보다 멀티 프로세싱이 효율적이므로 멀티 프로세싱을 많이 사용
6. 서버로서의 노드
- 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합함
- CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어려움
- 웹 서버가 내장되어 있음
6. 서버 외의 노드
- 노드 기반 웹 프레임워크 : 앵귤러, 리액트, 뷰 등
오늘은 우선 개념에 대해 정리해 보았다.
Node.js를 사용하면 FrontEnd부터 BackEnd까지 한 언어로 구성할 수 있다는 장점이 있는 것 같다.
열심히 공부해보자!
'TIL' 카테고리의 다른 글
[Git] 내가 보려고 정리하는 git 명령어 (0) | 2021.03.15 |
---|---|
[AWS] CodeCommit 터미널 사용하여 git clone 하기 (0) | 2021.03.02 |
[Spring] Session ArrayList 배열 추가하기 (0) | 2021.02.28 |
[Spring] PropertyNotFoundException : 타입 [java.lang.Integer]에서 프로퍼티 을(를) 찾을 수 없습니다 - JSTL (0) | 2021.01.13 |
[Spring] parameter 두개 이상 mapper로 넘겨주기 (0) | 2021.01.12 |