Web #11. Node.js란? Node.js 개념
개요
node.js에 대한 이해
Node.js
Node.js와 연관된 React, Vue, Angular가 핫해지면서 이에 대한 정리가 필요함을 느낀다. 이번 포스팅에서는 Node.js가 무엇인지 그리고 어떤기능을하는지에 대해 알아보려한다.
참고했던 블로그 포스트
1. Node.js란
Node.js는 서버사이드 자바스크립트이다.Node.js 자체는 웹서버가 아니다. 자바스크립트 런타임으로 웹서버를 만들 수 있는 하나의 방법이다.
특징
- 빠른속도 : 구글의 자바스크립트 엔진인 V8 기반으로 구성된 소프트웨어 시스템
- 비동기 I/O 처리 : 이벤트 기반으로 개발, Non-Blocking I/O 를 지원 - > 비동기식 프로그래밍 가능
- 단일 쓰레드와 뛰어난 확장성 : Node.js는 쓰레드를 한개만 사용하고 아파치와 같은 웹서버보다 훨씬 많은 요청을 처리 가능
2. Node의 동작 원리
기존에는 클라이언트가 서버로의 요청에 대해 각각 새로운 쓰레드를 생성하고 그에 따라 메모리를 할당하여 사용자의 요청을 처리했던 반면, 노드에서는 각 연결이 하나의 이벤트로서 노드 엔진에서 처리된다.
노드는 일반적으로 어떤 일을 끝마치고 나면 Callback이 실행된다. 오직 한번에 한개의 Callback만 실행되며, 그 Callback수행이 종료되기 전까지는 다른 Callback은 계속 그 라인에 기다려야한다. 작업은 병렬로 실행되지만 종료되는것은 한개씩 종료된다. 이는 “여러사람에게 동시에 일을 주고 한번에 한명에게서만 결과 보고를 받는 개념“과 비슷하다.
그러므로 어느 콜백이 먼저 실행될지는 보장할 수 없다. 단, JavaScript single-threaded 특성때문에 같은 데이터 스트럭쳐에 동시에 접근하는 우려를 할 필요는 없다.
3. Why Node.js?
이렇게 보면 Spring으로 백엔드를 구성하는 관점과 비교해서 생각해 볼 수 있을 것 같다. 어짜피 React나 Vue는 자바스크립트를 사용한 UI(프론트엔드)용 프레임워크라는점을 생각했을때, Spring과 Node.js는 Java를 사용하느냐 혹은 Javascript를 사용하느냐에서 그 차이가 클 것 같다. 그 외의 Node.js를 이용해서 백엔드를 설계하는것의 이점은 아래와 같다.
- 효율이 높음 : 웹어플리케이션에서는 주요 응답시간 비용 = 모든 데이터 쿼리 수행에 걸리는 시간의 합. 즉, 노드를 사용하면 모든 쿼리를 한번에 실행 가능 => 가장 느린 쿼리를 실행하는 소모시간이 감소됨
- Javascript를 사용 : 사실 이부분이 가장 큰 장점인 것 같다. 백엔드단과 프론트엔드단에서 코드를 공유할 수 있다는 점(같은 조직내의 공통된 언어를 사용함으로써 공유의 용이성을 높일 수 있음), 또한, javascript 숙련자가 풀스택으로 개발이 가능하다는 효율성이 있음
- 빠른 처리 속도 : V8은 인터프리터 언어중 가장 빠른속도를 자랑함. 더불어 노드의 I/O가 정말 가볍기 때문에 시스템의 최대한 빠른 I/O 성능을 이끌어낼 수 있다.
4. Node.js의 사용성
Node.js를 쓰기 적합한 곳
- 낮은 응답시간과 높은 동시성이 중요한 곳
- 데이터의 실시간 처리가 필요한 애플리케이션(알림, 실시간 대화 등)
- 사용자의 입력과 출력이 잦은 애플리케이션
- 단일 페이지 기반의 애플리케이션
Node.js를 쓰기 적합하지 않은 곳
- 데이터 분석, 데이터 엔지니어링 등 데이터 사이언스분야 같이 복잡한 데이터를 다뤄야 하는 곳에는 적합하지 않음 (하드코어한 처리 목적으로는 적합하지 않음)
- 엔터프라이즈 환경, 덩치가 큰 프로젝트(사용가능한 라이브러리와 자원들을 고려, Spring 대비 안정성이 떨어짐)
Node.js를 사용하는 대표적인 회사 : Walmart, ebay, paypal, Linkedin, Cloude9IDE
해당 포스팅은 다음 블로그로부터 이전되었습니다 :)
https://zunoxi.github.io/programming/2021/02/03/dev-web-nodejs/
'Develop > Web' 카테고리의 다른 글
Web #12. 런타임(Runtime)과 컴파일타임(Compile time) (0) | 2021.06.05 |
---|---|
Web #10. Mode1패턴과 Model2패턴 (0) | 2021.06.04 |
Web #9. Servlet과 JSP (0) | 2020.08.11 |
Web #8. EJB에대한 이해 (0) | 2020.06.24 |
Web #7. 스프링부트(Spring-boot) jar 파일 만들기 (0) | 2020.06.24 |
댓글