Node.js는 웹이 발전함에 따라서 등장하게 되었다. 옛날에 web은 1.0, 2.0 이렇게 2가지 페러다임을 가지고 있다. web1.0은 단방향 통신위주로 어떤 사용자가 일반적으로 수용하는 통신 위주 소통을 진행하였다. 하지만 web2.0이 이후 등장하면서 사용자와 상호작용하는 방법으로 소통을 진행하여 사용자와 수신자가 송신 수신 둘다 상호작용하면서 통신 할 수 있는 방법을 사용할 수 있었다. 이러한 사용자와 상호작용을 할 수 있게 되면서 우리는 고성능의 JavaScript가 필요했었고, V8엔진이 등장하게 되었다.
이러한 V8엔징이 등장하면서 우리는 고성능 JavaScript를 실행 가능하게 되었고, 이후 우리는 JavaScript를 브라우저 외부에서 사용하면하는 생각이 들어 Node.js가 탄생하게 되었다. 이 Node.js는 자바스크립트를 어느환경에서나 실행 할 수 있게 해주는 실행기이다.
1) 브라우저에서 실행
2) 웹 내우 제한된 동작 => (html 태그에서 특정요소를 삭제하거나 수정하는 제한적인 동작)
3) 웹 프론트 개발자의 언어
1) 크로스 플랫폼 실행 ex) window, mac, Lenux,등
2) 제한이 없는 동작
3) 다양한 어플리케이션 개발
쓰레드란 명령을 실행하는 단위이다.명령을 실행하는 단위는 복잡한 프로그램을 한 프로그램으로 실행시킬려면 매우 오래걸릴것이다. 그래서 이것을 3개의 단위로 프로그램을 실행시킨다면 프로그램을 실행시키는데 효율적이것이다. 이러한 한개의 쓰레드는 한번에 한가지 동작만 실행 가능하며 위에 나타나와 있는 화살표가 쓰레드라고 할 수 있다.
앞서 봤던 예시에서 싱글스레드는 화살표가 하나인것을 의미하고 멀티 쓰레드는 화살표가 여러개가 있는것을 볼 수 있다. 그러므로 싱글 쓰레드는 한번에 한가지 동작만 수행을 하고, 멀티쓰레드는 동시에 여러 동작을 수행 가능하다.
장점 - 스레드가 늘어나지 않기 때문에 리소스 관리에 효울적
단점 - 스레드 기반의 작업들의 효율이 떨어짐 ex) CPU 연산작업
실제로 우리가 싱글 스레드를 그냥 사용하면 비효율적이다. 하지만 javascript는 이를 보안할 테크닉을 가지고 있다. 이 테크닉은 Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소하는 작업을 하고 있다.
비동기는 동기가 아니라는 뜻인데, 동기는 동작을 실행한 후 완료가 되길 기다리는 방식으로 비동기는 이러한 기다림을 하지않는 것으로 다른 작업을 다시 시작하는 방법으로 동작의 완료를 기다리지 않고 다른 동작을 바로 실행가능하게 Node.js는 싱글 스레드이기 때문에 비동기 방식을 사용하게 된다.
동기와 비동기의 차이
싱글스레드에서 실행을 단순하게 먼저 맡겨놓고, 완료가 될때까지 외부작업(데이터베이스 쿼리 )을 할 수있는것을 볼수 있다. 하지만 멀티 쓰레드 동기 방식을 보면 실행을 동시에 누르고 완료가 될때까지 cpu 리소스가 낭비되며 다른 작업을 할 수 없는 상태에 이르고 완료가 될 때까지 기다리게 된다.
이벤트 기반이란 비동기 동작의 완료를 처리하는 방법으로 특정동작을 실행한 후 해당 동작을 전혀 신경쓰지 않음을 나타내며 다시말해 어떤 작업을 실행하고 그 작업이 완료될때 까지 기다리지 않는것을 의미한다. 대신 해당 동작이 완료될 경우 실행할 함수를 미리 등록하고 비동기 동작이 완료가 되면 미리 동록된 함수를 실행하게 된다.
위의 그림을 보고 정리하자면 이벤트 기반이란 이벤트 등록을 하고 전달하고 이동했다가 이 작업이 완료됨에 따라 어떤 이벤트를 실행하는것이다. 즉 결과가 오면 실행되는것을 의미한다.
Node.js는 현재에도 빠르게 개발 중이고 보안 이슈 및 버그 수정, 최신기술에 빠르게 적용중이다. 급변하는 기술속에서 Node.js는 이중 가장 안정적인 최신 버전을 선택하는것이 최선으로 하고 있다.
LTS
Node.js의 가장 안정적인 최신 버전을 선택하기 위해 LTS라는 Long-Term Support 버전이 있고 이는 Node.js의 안정적이고, 오래 지원하는 버전의 명을 가지며 이후에 보안문제가 있더라고 더 유연하게 대응할 수 있는 능력을 가지고 있다.
왼쪽에는 안정적이고 오래 지원되는 버전인 16.13.0 LTS있고, 오른쪽에는 17.0.1현재 버전인 가장 최신기술이 적용된 버전이 있다.(이 본 강의는 안정적이고 오래 지원된느 버전으로 강의 를 진행하였다.)
감사합니다. 이런 정보를 나눠주셔서 좋아요.