일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 페이지교체알고리즘
- Vite 사용 이유
- tfjs
- 1796
- REACT
- TDD
- 2623
- WebRTC란
- RBT
- dp
- 자료구조
- LOLIN D32
- TDD란?
- 백준
- 13459
- 풀이
- 테스트주도개발
- mediastream
- stl
- 메모리계층
- 구현
- 백준 2133
- OpenVidu
- 9996
- c++
- 적두트리
- 구슬탈출
- 3XN 타일링
- 데이터 링크 계층
- ESP32
- Today
- Total
그냥 블로그
Node.js란? 본문
1) Node.js란 무엇인가?
노드(Node.js)는 자바스크립트를 이용해 서버를 만들 수 있는 개발 도구
Chrome V8JavaScript 엔진으로 빌드된 JavaScript 런타임이다.
웹서버의 개념이 아닌, javascript로 서버를 구축하고 서버에서 JavaScript가 작동되도록 해주는 런타임 환경(플랫폼)이다.
-> 예전에 브라우저 엔진 스파이더 몽키는 JIT, 컴파일러 없이 인터프리터로 JS를 실행했기 때문에 느렸다.
💡 웹 서버(web server)란?
- HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램
💡 런타임(runtime)이란?
- 프로그래밍 언어는 주로 고급 언어로, 기계(컴퓨터)가 바로 이해할 수 없기에 고급 언어로 작성된 소스 코드를 기계어로 변환하는 과정을 런타임이라 한다.
💡자바스크립트 런타임(javascript runtime)이란?
- 프로그래밍 언어로 작성된 javascript 언어를 컴퓨터가 이해할 수 있는 기계어로 변환시켜주는 역할을 의미한다.
💡자바스크립트?
- 스크립트 언어(인터프리터 언어)로 스크립트 작성 기능을 지원하는 소프트웨어(애플리케이션)을 제어하는 역할을 한다. (Python, JSP, Ruby 등이 함께 스크립트 언어에 속함)
- JavaScript는 웹 환경이 고도화되고 표준화되며 Node.js 런타임 환경 및 Electron 등이 등장하면서 스크립트 언어 자체만으로도 독립적인 프로그램의 개발이 가능해짐에 따라 소프트웨어를 제어하는 언어라고만 정의 할 수 없게 되었다.
=> 인터프리터 언어는 속도가 느리다. 이를 해결 하기 위해 구글에서 개발한 V8엔진.
=> V8엔진을 사용하면 엔진 내부에서 "컴파일"과정을 거치면서 성능 업!
-> 이 부분은 또 다른 곳에서 다뤄보겠다!
2) Node.js의 특징
1. 장점
- 단일 스레드(Single-Thread)의 논 블로킹(None-blocking I/O) 이벤트 기반 비동기 방식으로 처리되어 높은 처리 성능 ( 쓰레드 생성 없이 이벤트 루프로 비동기 처리 되기 때문에 메모리 사용이 적다)
- 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능.
- JavaScript 언어로 Front-end 뿐만 아니라 Back-end 개발 환경을 구성할 수 있어 생산성이 높고 러닝 커브 감소
- 다양한 패키지 매니저(npm : node Package Manager)를 기반으로 여러 모듈(패키지)을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있어 효율성이 좋다.
💡 블로킹 (blocking I/O)란?
- I/O가 동작되고 있는 동안 다른 일을 처리하지 못하는 상태, 함수가 모든 일을 마무리될 때까지 다음 처리가 안되는 것을 의미
💡 논 블로킹(Non-blocking I/O)란?
- I/O가 동작을 하며 request를 받으면 바로 다음 처리에 요청을 보내 놓고 다른 작업을 처리하다 먼저 요청한 작업이 끝나면 이벤트를 받아 응답을 보내는 것. ( JavaScript 에선, 콜백 함수 )
2. 단점
- Node.js의 모든 API는 '비동기 기반 처리 방식'이어서 서버의 로직이 복잡한 경우 '콜백 함수의 늪(callback hell)'에 빠질 수 있다.
- 단일 스레드(Single Thread)이기 때문에 하나의 작업이 오래 걸리는 웹 서비스에 경우 애플리케이션의 성능 저하 가능성 => CPU 집약적인 작업에 리스크가 있다. ex) MMORPG 게임, 코인 및 주식 거래 플랫폼....
- Node.js 는 단일 스레드인가 멀티 스레드인가? 콜스택이 하나기 때문에 단일 스레드다.
- java는 콜스택이 여러개임
- 해당 코드가 수행 되어야 코드에서 에러가 났는지 확인이 가능해 에러가 날 경우 프로세스 자체가 내려갈 수 있다.
- 세션을 공유할 경우 redis와 같은 부가적인 인프라가 필요
- 자바 스크립트가 동적 타입 언어이기 때문에 Java같은 정적 타입 언어보다 안정성이 떨어짐 => TypeScript로 해결
💡 동적 타입 언어, 정적 타입 언어
- 동적 타입 언어는 코드 실행 시 자동적으로 변수의 타입을 판단해 지정하는데, 실행 도중 변수에 예상치 못한 자료형들이 들어와 타입 에러를 발생시킬 수 있다. 한편 정적 타입 언어는 컴파일시 변수 타입이 결정되므로 타입 에러로 인한 문제점을 초기에 발견할 수 있다.
💡 콜백 함수(callback) 란?
- 함수를 등록하면 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수
- 비동기의 일종인데,, 나중에 비동기를 자세히 포스팅하면서 다뤄보자
3. Node.js를 쓰는게 좋은 상황?
- 하나의 언어로 FE/BE를 구성할 때
- 간단한 로직의 서비스
- 입출력(I/O)이 자주 발생하는 작고 빈번한 요청 처리 ex) 알림 혹은 채팅
- 비동기 방식에 어울리는 서비스( 네트워크 스트리밍 서비스, 채팅 서비스 등)
- 빠르게 환경 구성을하고 개발해야 하는 경우
- 특히, 스타트업에서는 빠르게 MVP(Minimal Virable Product : 최소 기능 제품)을 개발해 비즈니스 모델 검증을 해야하기 때문에 Node.js를 선호한다고.
- 넷플릭스, 링크드인, 페이팔 등등...
여전히 Java Spring을 쓰는 이유
- Node js는 아직 안정하지 않기 떄문에, 실제로 운영을 했을 때 스프링보다 더 많은 서버를 쓰기도 함
- 서버가 죽지 않도록 더 많은 서버를 쓰기 때문.
- 개발자의 짬밥문제도 있고, 스프링은 정형화된 프레임워크기 때문에 왠만한 사람들이 동일하게 코드를 쓰는 반면 노드는 높은 자유도 때문에 다르다.
면접을 위한 결론
예상 질문) Node.js 는 무엇이고, 사용 이유는 무엇인가?
Node.js란 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 확장성 있는 네트워크 애플리케이션(특히 Server Side) 개발에 사용되는 소프트웨어 플랫폼입니다. 작성 언어로 자바스크립트를 활용하며 None-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 갖고 있습니다.
사용 이유는
1) 자바 스크립트를 사용해 러닝 커브를 줄일 수 있다는 것입니다.
2) 개발이 빠르고 쉽습니다. 서버 설치~ 화면 띄우기까지 빠르게 처리됩니다.
[Node.js 선택 이유]
16년차 개발자가 말하는 Node.js를 선택해야 하는 이유 - 내일배움캠프 블로그
Node.js의 장점은 무엇일까요? 앞으로 취업 전망은 괜찮을까요? 현직 개발자에게 물어봤습니다. | 웹 개발, 👨🏻🚀멘토인터뷰
nbcamp.spartacodingclub.kr
[JavaScript는 인터프리터? + V8엔진]
[JS] JavaScript는 컴파일 언어인가요? 인터프리터 언어인가요?
자바스크립트 공부를 하던 중 컴퓨터는 자바스크립트를 어떻게 번역하고 그 내부에서는 어떤 일이 벌어지는지 궁금해졌다. 컴파일? 인터프리터? 무슨 말이죠? 이제 같이 알아보자!!!!!!!!!
velog.io
[Node.js란]
[Node] Node.js 이해하기-1(정의, 장단점)
헤딩 글의 목적은 간단하고 빠르게 그리고 하나의 언어로 Back-end 환경(서버)을 구성할 수 있는 ‘Javascript’ 언어를 이용한 Node.js에 대해서 이해하는 글입니다. 1) Node.js 란 무엇인가? 💡 Node.js는 C
adjh54.tistory.com
[Node.js 면접 예상 질문 출처]
[Node.js] 백엔드 기술면접 질문 정리 (+추가질문 및 답변)
더보기 정답지 - https://bit.ly/3KeeWYK 공부방법 => 한번 쭉 읽고 생각나는대로 적기 (모르면 컨닝하기) + 추가 정보 기입하기 1. HTTP METHOD에서 GET과 POST에 대해 설명해주세요. 더보기 Get은 가져온다는
pyoja.tistory.com
++Do it! Node.js 프로그래밍
'Back-End > Node.js' 카테고리의 다른 글
NestJS vs expressJS (0) | 2024.03.11 |
---|