BE_intro_1. What is Node.js?_10.25

송철진·2022년 10월 25일
0

요약

  • Node.js : Chrome 브라우저의 V8 Javascript 엔진을 탑재한 Server Side 오픈소스 Javascript 런타임.
    • 주로 이벤트 기반의 높은 처리 성능을 낼 수 있는 네트워크 서버(API)를 구축 시 활용.
  • Node.js 기반의 네트워크 서버(API)의 장점 :
    1. Frontend와 Backend 기술 스택 통합
    2. 빠른 처리 속도와 높은 동시 요청 처리 성능
    3. MSA (Micro Service Architecture)에 적합
  • NVM (Node Version Manager) : node.js의 버전 관리.
  • javascript 코드 실행 방법
    1. REPL (Read Eval Print Loop)
    2. .js 파일에 코드 작성 및 실행

1. Node.js는 뭘까, 왜 쓸까

1-1. Node.js가 뭘까?

Chrome 브라우저의 V8 Javascript 엔진을 탑재한 Server Side 오픈소스 Javascript 런타임

키워드로 이해하기

Javascript, Chrome V8 엔진, Server Side, Runtime

  • Javascript : 브라우저(Chrome, Safari, Internet Exploere)에서 HTML 요소 생성부터 모든 페이지 및 기능을 동적으로 처리할 수 있도록 만들어주는 브라우저에서 실행되는 프로그래밍 언어.
    👉 Google Maps 등 JS로 웹 서비스 개발 수요가 늘어나면서 더욱 빠르게 실행시킬 수 있는 엔진이 필요해짐.

  • V8 Javascript 엔진 : 2008년, Google이 주도하여 C++로 개발한 Javascript 언어로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 변환하는 엔진.
    👉 Javascript를 웹 브라우저 외에서도 수요가 커지게 됨

  • Node.js: Chrome 브라우저의 V8 Javascript 엔진을 탑재한 이벤트 기반의 Server Side 오픈소스 Javascript 런타임

  • 2009년 11월, Joyent의 라이언 달(Ryan Dahl)이라는 미국 소프트웨어 공학자가 브라우저의 자바스크립트 엔진뿐만 아니라 그 이외의 환경에서도 동작할 수 있도록 V8 엔진을 브라우저에서 독립시킨 Javascript의 또 다른 실행 환경(runtime)인 Node.js 발표.
    👉 (브라우저에선 할 수 없는) 운영체제의 파일 시스템 접근, 파일 조작 등의 다양한 일들이 가능해짐

당시 최고였던 웹 서버 Apache HTTP Server의 최대 10,000개 이상의 동시 요청을 다루지 못하는 이슈가 있었고 자바스크립트(Javascript)를 그대로 활용, 이벤트 기반의 동시요청 처리에 높은 성능을 낼 수 있는 Network Server를 만들자~
👉 Node.js 탄생

현재: 페이팔, 넷플릭스, 월마트, 링크드인, 우버 등 메인/서브 백엔드 서버를 만드는데 사용됨.

1-2. 왜 쓸까?

HTTP API 서버를 만드는 방법이 다양한데,
왜 Node.js 기반으로 API 서버를 구현해야 하는가?
(익숙한 언어가 따로 없다면)

Frontend와 Backend 기술 스택 통합

  • 프론트엔드와 백엔드 양쪽에서 동일한 언어를 사용하면 코드를 모듈로 만들어서 재사용 가능.
  • 서버 측 프로그래밍에 노력 최소화.
  • 현대 웹 개발에서 가장 중요한 개발팀의 전반적인 생산성 향상.

빠른 처리 속도와 동시 요청 처리 성능

  • JIT 컴파일 방식: V8 엔진의 JavaScript로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 변환

JIT(Just In Time, 즉시) 컴파일 방식

  • 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일하는 방식
  • 같은 코드를 매번 해석하는 대신 처음 실행될 때 인터프리트를 하면서 자주 쓰이는 코드를 캐싱한 뒤, 이후에는 캐싱된 코드를 가져다 쓰기 때문에 인터프리터의 느린 실행 속도를 개선
  • 최적화. 속도 빠름
  • libuv: 비동기 I/O에 중점을 둔 오픈 소스 라이브러리
    👉 이벤트 기반(Event Driven), Single Thread, non-blocking I/O 모델 구현으로 지연(blocking) 없이 동시 요청을 빠르게 처리.

이벤트 기반(Event Driven) 리액터 패턴❓

Single Thread ❓

non-blocking I/O 모델 구현 ❓

MSA (Micro Service Architecture)에 적합

  • 마이크로 서비스 아키텍처: 애플리케이션이 서비스 모음으로 개발되는 애플리케이션 아키텍처의 한 유형
  • MSA 구조 내 기능이 추가될 때마다 기존 시스템에 더해지는 것이 아니라 가벼운 시스템을 새롭게 구축하여 확장
    👉 Node.js는 상대적으로 가벼운 런타임이기 때문에 MSA와 조화됨.

기타

  • 풍부한 생태계(라이브러리 약 80만개).
  • JSON 형식을 그대로 사용.
  • 속도와 확장성을 요구하는 집중적인 I/O가 있는 실시간 애플리케이션, 웹, 앱 어플리케이션 개발에 적합.
  • 엔터프라이즈급(Netflix, NASA, 페이팔 등)에서 활발히 사용됨.

2. 브라우저 밖에서 자바스크립트 실행하기

방법 1. REPL (Read Eval Print Loop)

  • Javascript 코드 및 node.js에서 제공하는 다양한 표현식을 실시간으로 처리하는 대화형 쉘(Shell)
  • 사용자가 입력한 Javascript 코드를 읽고, 코드 행을 해석한 결과를 평가하고, 결과를 사용자에게 출력하고, 사용자가 종료 신호를 보낼 때까지 이 과정을 반복한다.
  • 파일을 생성하지 않고도 Javascript 코드를 테스트하는 빠른 방법

실행 및 활용

(node.js를 설치했다는 전제 하에)

$ node // node.js에 진입하기

자바스크립트에서 한 것처럼, 문자와 숫자의 연산, console.log() 등을 사용할 수 있다

node.js에 내장된 모듈 require()를 실행하면 'fs'(file system)에 있는 모듈을 가져온 후에 상수 a에 할당할 수 있다.
그리고 상수 a를 출력하면 여러가지 함수가 내장된 것을 확인할 수 있다;

작성한 코드가 제대로 동작하는지 테스트하는 용도

방법 2. JS파일 직접 실행하기

편집기(vim, vscode)에서 .js확장자 파일 생성, 코드 작성, 실행한다

터미널에서 vim 으로 실행하기

  1. 파일 생성 및 확인: touch hello.js 👉 ls
  2. 코드 작성: vi hello.js 👉 i키 👉 console.log("hi") 👉 esc키 👉 :wq
  3. 실행: node hello.js
  4. 파일 삭제 및 확인: rm -rf hello.js 👉 ls

터미널에서 vscode 실행하기
1. vscode 설치 및 실행
2. 환경 경로 설정: [command + shift + p] 👉 'shell' 입력 👉 'install code command in path' 클릭
3. 터미널에서 vscode 실행 code .

vscode에서 터미널 열기 : [shift + control + `]

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글