
Node.js는 크로스플랫폼 오픈소스 자바스크립트 런타임 환경으로 윈도우, 리눅스, macOS 등을 지원합니다. Node.js는 V8 자바스크립트 엔진으로 구동되며, 웹 브라우저 바깥에서 자바스크립트 코드를 실행할 수 있습니다.
[레퍼런스]https://ko.wikipedia.org/wiki/Node.js
V8 자바스크립트 엔진, 웹 브라우저 바깥에서 자바스크립트 코드 실행...
이게 다 무슨 말인지 싶죠?
하나하나씩 알아가 봅시다.
JavaScript는 웹 페이지에서 복잡한 기능을 구현할 수 있는 스크립팅 또는 프로그래밍 언어입니다. 웹 페이지가 단순히 정적인 정보를 표시하는 것 이상으로 시의적절한 콘텐츠 업데이트, 대화형 지도, 애니메이션 2D/3D 그래픽, 스크롤링 비디오 주크박스 등을 표시할 때마다 JavaScript가 관련되어 있을 가능성이 높습니다.
[레퍼런스] https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/What_is_JavaScript
즉, 단순히 정적인 페이지를 보여주기 위함으로는 html만 이용해도 되지만, 어떠한 동적인 기능(영화 예매 기능 등)을 구현하기 위해서는 html/css/javascript와 더불어서 사용하는 경우가 대다수입니다. 사실상 요즘 사용중인 대부분의 서비스는 위 세 표준웹기술을 이용한다고 보시면 됩니다.
그렇다면 자바스크립트, 스스로는 자기를 실행시키지는 않을 것입니다.
자바스크립트를 실행시키는 주체가 있어야 할텐데 대체 누굴까요?
자바스크립트는 웹브라우저, 크롬/마이크로소프트 엣지/사파리 등과 같은 브라우저들이 책임지고 스크립트를 실행해줍니다. 정확히 말하면 웹 브라우저 엔진이 실행시켜주는 것이죠.
엔진명은 여러가지가 있겠으나, 구글에서 만든 V8이라는 엔진에 대해 알아봅시다.
V8은 크롬 등에서 사용되고 있는 엔진입니다. 이 엔진은 구글에서 굉장히 잘 만들어져서
자랑삼아 따로 똑 떼어내어 실행파일로 출시했는데, 이게 바로 Node.js입니다.
바로 이 Node.js가 자바스크립트 파일 실행기로써 자바스크립트를 실행시켜주고 있는 것입니다.
그래서 Node.js만 있으면 브라우저 없어도 자바스크립트를 실행할 수 있습니다.
node.js는 non-blocking(비동기처리)때문에 좀더 빠른 웹서버를 개발하는 것이 가능합니다.
영화예매 서비스를 예시로 들어봅시다.
순서
1. 영화예매 요청하기
2. 영화 예매 후 결과를 유저에게 보내주는 프로그램 만들기
만약 비동기 처리가 아닌 동기처리(blocking)라면
먼저 온 사람들부터 일을 처리해주는 방식으로 예매요청을 처리합니다.
거진 모든 프로그래밍 언어는 한줄씩 위에서 밑으로 실행되기 때문에 그렇죠
여기서 문제가 발생합니다.
만약에 한사람이 발권을 200장한다면?
발권 한장당 1초라고 쳐도 200초를 기다려야합니다.
200초 기다리는게 별로 문제가 안된다고 생각할 수 도 있으나, 만약 복잡한 서비스를 이용한다고 하여 1장당 1분을 기다리게 된다고 하면... 200분이 되겠네요.
200분도 문제이지만 이후에 기다리는 사람도 200분 + a를 기다리게 되므로 문제가 커집니다.
그렇기 때문에 서버기능이 전체적으로 저하가 되는 것입니다.
그렇다면 Node.js는 어떻게 동작하는가?
1. 사람들이 요청한 정보들을 모두 모아 전부 받습니다.
2. 그 다음 빨리 처리가 완료되는 순서로 유저에게 처리 결과를 보내줍니다.
이는 요청한 순서와 상관없습니다. 업무 처리가 완료된 시점으로, 빠르게 완료가 된다면
해당 사람에게 결과값을 돌려주는 것입니다.
이를 non-blocking(비동기처리)라고 합니다.
정확히는 Node.js에서 비동기 처리를 지원하는 코드를 작성해야 한다는 것인데, 이미 파일 입출력이라던가 DB입출력 등 대부분 비동기 처리가 매우 쉽게 되기 때문에 기본으로 비동기 동작이 되는구나 생각하시면 됩니다.
ex. CPU를 많이 사용해야 하는 작업, 예를 들어
1. 이미지 변환
2. 동영상 압축
3. 숫자 계산 등...
과 같은 작업이 들어가면 Node.js에서 관련 라이브러리도 적고 하나의 스레드만을 이용하기 때문에 그런 작업이 필요하면 별로일 수 있습니다. (가볍고 많은 요청일 시에는 좋을수 있습니다.)
하지만.. 이런상황에도 해결책이 있습니다.
1. Node.js는 싱글스레드(하나의 스레드)에서 동작하기 때문에 코어/스레드가 여러개 달린 CPU를 비효율적으로 사용한다고 하긴 하지만, 내부적으로는 파일입출력/가비지컬렉션 과 같은 부가작업시 스레드를 여러개(멀티스레드)로 운영 가능합니다.
클러스터는 컴퓨터, 스토리지 장치, 네트워크 장치 등 여러 컴퓨팅 자원을 함께 연결하여 하나의 시스템처럼 작동하도록 만든 것이다.
클러스터는 일반적으로 성능 향상, 고가용성, 확장성 등을 위해 사용된다.
예를 들자면, 클러스터는 사장님 N명과 알바생 M명으로 이루어진 특정 서비스를 담당하는 하나의 가게이다.(클러스터 = 가게)
[레퍼런스] https://velog.io/@pjy707099/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EA%B8%B0%EB%A1%9D%ED%95%9C-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EB%85%B8%EB%93%9C-%EA%B0%9C%EB%85%90
지금보니까 cs에 대해서 많이 알지 못하는것 같으므로,,,, 공부를 좀더 해야겠다
(cs: Computer Science, 컴퓨터 과학)