티스토리 뷰
NodeJS 등장
NodeJS 는 구글 크롬의 V8 (자바스크립트 엔진)으로 빌드 된 이벤트 기반 자바스크립트 런타임이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.
파이썬으로 만든 트위스티드, 펄로 만든 펄 객체 환경, 루비로 만든 이벤트머신과 그 용도가 비슷하다. 대부분의 자바스크립트가 웹 브라우저에서 실행되는 것과는 달리, NodeJS는 서버 측에서 실행된다. 일부 CommonJS 명세를 구현하고 있으며, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있다.
- 위키백과
V8 엔진 : 구글 크롬의 V8 엔진은 웹 브라우저를 만드는데 그 기반을 제공하는 오픈소스 자바스크립트 엔진이다. 속도향상을 위해 인라인 캐싱(inline caching)과 같은 최적화 기법을 적용하였다. 특히 2005년 Ajax가 부상하면서 빠른 JavaScript 엔진이 필요해졌고, V8은 주목받았다.
CommonJS : JavaScript를 브라우저뿐만 아니라, Back end 애플리케이션이나 데스크톱 애플리케이션에서도 사용하고자 시작되었다.
NodeJS는 이러한 모듈화 작업을 기반으로 등작하기 시작했으며, 실제 CommonJS의 Molule 1.0 명세를 기반으로 등장하였다.
이를 기반으로 NodeJS는 JavaScript 엔진으로써 등장하였고 이는 대표적인 서버사이드용 JavaScript Runtime이 되었다.
NodeJS의 생태계는 현재 Java Library가 확대되는 속도를 훨씬 뛰어넘고 있으며, 100만개 이상의 라이브러리를 자랑하고 있다.
NodeJS 특징
NodeJS JavaScript를 기동하는 Runtime으로 우리가 일반적으로 생각하는 웹서버와는 다르다. 웹서버와 동일한 역할을 하도록 구성하기 위해서는 다양한 npm module을 추가하고 개발해야 한다.
사실 노드는 그러한 역할로써 등장한 것이 아니기에 웹서버의 역할을 위해 사용한다면, 웹서버를 사용하기 바란다.
노드는 일반적인 JavaScript가 갖고 있는 단점을 보완하며 적은 CPU, Memory 사용률로도 서버 사이드 애플리케이션을 동작하게 하는데 그 목적이 있다.
- JavaScript Server Side Application : JavaScript를 가지고 Backend 비즈니스 로직을 구현할 수 잇다는 점이 가장 큰 특징이다. 일반적으로 클라이언트 사이드 개발 언어로 구분(이미 오래전 이야기이지는 하지만..)하던 JavaScript는 이제 서버사이드 애플리케이션을 빠르게 개발하고 적용할 수 있게 된다.
- Non-Blocking I/O : NodeJS가 제공하는 API는 비동기 방식으로 구성되어 있다. JavaScript가 기본 Single Thread로 동작하여 순차적인 프로세스 처리로 인한 Lock & 성능저하 등을 이르키곤한다. 이를 손쉽게 Non-Blocking 방식으로 처리할 수 있게 도와준다. 사실 100% Aync를 지원하는 것은 아니며, 하나의 Thread가 요청을 받으면, 바로 다음 요청을 전송해 두고 응답이 먼저 온 요청에 대해 이벤트 메커니즘을 통해 응답을 수신한다. 이러한 처리 방식은 동일한 Sigle Thread 방식으로 동작하지만 높은 성능과 확장성있는 아키텍처를 지원한다.
- npm node module : 역시 가장 큰 장점으로 이것을 뽑고 싶다. 100만개가 넘는 node library 생태계를 지원하며, 이는 빠른 개발과 개발 편의성을 제공한다. npm을 통해 library 디펜던시를 자동으로 관리해주어 이에 대한 관리에 노력을 기울일 필요가 없다.
- Light Weight Engine : 가벼운 엔진으로 인해 개발환경으로 매우 자주 사용된다. 최근 반응형 웹 (Angular, React, Vue 등)개발이 매우 활발하게 진행되며, 이에 대한 개발환경으로써 Node가 활용되고 있으며, 같은 JavaScript 기반으로 npm을 활용하여 손쉽게 통합할 수 있다.
NodeJS 활용
NodeJS는 대체로 가볍고 빠른 서비스에 어울린다. 최근 많은 프로젝트에서 MSA를 선호하고 있고 이러한 시스템은 독립적으면서 빠르게 대응할 수 있는 확장성을 확보한 시스템으로 발전하기를 원하고 있다.
이에 최근 it 시장을 주도하는 아키텍처 설계 방식이 바로 MSA이며, NodeJS는 이러한 MSA 사상에 적합한 웹 애플리케이션 프레임워크로써 자리잡아 가고 있다.
물론 아직도 SpringBoot와 같은 Java 기반 프레임워크가 가장 많이 사용되고 있지만, Java는 여전히 무겁고 SpringBoot가 최소한의 모듈만을 탑재했다고 하지만, Node를 대상으로 비교해 보자면, 여전히 무겁고 느리다.
특히 개발환경으로써 Java Plugin이나, Module을 추가하여 구성해 보면 NodeJS가 정말 얼마나 가볍고 빠른지 체험해 볼 수 있을 것이다.
- 빠르게 확장하고 장애에 즉시 대응하기 위한 시스템
- MSA 사상에 적합한 애플리케이션 구조
- 복잡하지 않은 비즈니스 구조로 개별 마이크로서비스의 성능을 향상시키고자 할때
- 리소스 사용량이 적은 애플리케이션으로 단순 반복적인 응답을 요구하는 서비스
- 비동기 & 실시간 서비스를 요구하는 애플리케이션 (채팅 서비스, 모니터링 서비스, 동영상 스트리밍 서비스 등)
- SPA (Single Page Application)
그래서 NodeJS는 어떻게 사용할래?
NodeJS는 최근 SPA 열풍을 주도하는 웹 프레임워크 중 하나이다. 기존에 Front-End 기술을 NodeJS와 접목하여 이제 Front-End는 Front-End + Back-End를 모두 포괄할 수 있는 완전한 애플리케이션이 되었다. (물론 JavaScript 만으로도 가능하지만, 그 복잡한 기술을 손쉽게 사용할 수 있도록 Node는 도와준다.)
최근 많은 스타트업 기업과 마이크로서비스를 도입하는 많은 회사에서 NodeJS를 적용하고 있다.
- 대표적으로 동영상 스트리밍 서비스로 유명한 Netflix에서 Node와 마이크로서비스 아키텍처 그리고 Netfiix Cloud Service를 조합하여 빠르고, 안정적인 서비스를 제공하고 있다.
- Linkedin과 Paypal은 NodeJS에서 소개하는 사례 중 하나이다. 기존 Legacy 환경을 완벽하게 전환을 완료한 사이트로 소개하고 있다. 특히 Java, Ruby 등의 언어를 성공적으로 전환하였으며, Node의 가벼운 서비스 집중 환경으로 인해 인프라 감소, 개발 효율성 향상, 성능 개선 등의 효과를 얻게 되었다.
NodeJS는 아직 한국 시장에서 많은 효과를 내고 있지는 않다. 최근 몇몇 스타트 업 기업과 마이크로서비스를 적용하는 이커머스 시스템에서 반응형 웹 개발 프레임워크와 함께 조합하여 Node를 사용하고 있다. 하지만, 이후 개인적으로 Node는 급격히 성장할 것이라 예상하고 있다.
그 이유에는 바로 마이크로서비스 아키텍처의 성장에 있다고 본다. 사실 4~5년의 Term을 가지고 성장해온 MSA 사상은 이제 그 꽃을 보고 있는 추세라 생각한다. 대부분의 많은 프로젝트에서 중심으로 또는 최소 요구사항으로 MSA를 적용하고자 노력하고 있으며, 이는 근본적으로 MSA 사상이 갖고 있는 장점이 어느정도 국내 기업에 어우러질 수 있는 포인트를 찾아 냈다고 생각하기 때문이다.
MSA의 모든 장점을 한번에 갖추고자 할수도 있지만, MSA가 갖고 있는 장점을 하나씩 적용해 나가는 것도 어느정도 효과를 얻을 수 있기 때문이다.
NodeJS는 바로 마이크로서비스에 적합한 Infra Structure Service이다. NodeJS의 제2의 성장에는 바로 MSA가 있기때문에 가능할 것이며, NodeJS는 가볍고 확장가능하며, API Service를 Aggregation하여 UI 환경에서 손쉽게 조합하기 위한 최고의 선택이 될것이라 판단한다.
"NodeJS는 MSA를 실현하는 그 가볍고 빠른 성능을 보장하는 Back-End Application 웹 프레임워크로써 지속적인 성장을 이뤄나갈 것이다."
'⑤ 개발, 데이터베이스 > ⓝ NodeJS' 카테고리의 다른 글
[Node.JS] Application (app.js & package.json) (0) | 2020.07.13 |
---|---|
[Node.JS] 기동 및 모니터링 (0) | 2020.07.13 |
[Node.JS] Express EJS Application 생성 (0) | 2020.07.13 |
[Node.JS] VSCode GitHub 연동하기 (0) | 2020.07.12 |
[Node.JS] VSCode 개발환경 구성하기 (7) | 2020.07.12 |
- Total
- Today
- Yesterday
- wildfly
- 쿠버네티스
- openstack token issue
- Docker
- JBoss
- node.js
- 아키텍처
- aa
- 마이크로서비스 아키텍처
- SWA
- jeus
- OpenStack
- TA
- SA
- Da
- aws
- kubernetes
- git
- API Gateway
- Architecture
- JEUS6
- openstack tenant
- nodejs
- 오픈스택
- webtob
- 마이크로서비스
- MSA
- apache
- k8s
- JEUS7
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |