React와 Node.js의 관계
Node.js는 싱글 스레드 기반의 자바스크립트 런타임 환경이며, 크롬의v8엔진을 바탕으로 제작되었다.```
런타임 환경(영어: runtime environment)은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다.
즉 HTML안에 자바스크립트가 있고 각 회사마다 브라우저엔 JS해석엔진이 있고 구글의 CHROME엔 V8에 있는대 그 V8을 때어내서 기능을 덕지덕지 붙여서 나온게 NODE JS이다. 즉 근본은 JS 변환 툴인것.
그래서 나온게 컴퓨터 로컬 내에서도 다양한 용도로 확장하기 위한 JavaScript Runtime이다.
express란? NodesJS를 사용하여 쉽게 서버를 구성할 수 있게 만든 프레임워크
개발도구를 지원하진 않지만 적절한 코드를 사용하면 node js 자체만을 사용해서 서버를 만들수도잇으며
express 를 설치하면 더더욱 편리한 서버를 구축할수있다.
프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스이다.
스레드 : 프로세스 내에서 실행되는 흐름의 단위이다. 하나의 프로세스는 스레드를 여러개 가질 수 있다. 스랜드들은 부모 프로세스의 자원을 공유한다. 즉, 같은 메모리에 접근할 수 있다.
자바스크립트 그리고 node js는 싱글 스레드 작업 처리를합니다.
1.뭔가 계산을함
2.근대 연산 이후로 보내야됨. 그럼 연산이후 연산장치에 달린 버스타고 OS 지나서 브라우저까지 도착햇음
3.브라우저에 연산결과가 도착햇음. 그럼 이걸 다시 보내야함. 그럼 보내는 시간도 필요함. 반대로 처음에 받는시간도 필요함.
이 보내는시간+받는시간+연산하는시간을 다 합쳐서 서버가 응답하는시간임. RESPONSE TIME임.
요약하자면 연산시간 빼고, 프론트 단계의 코드에서 정보를 주고받는 시간을 I/O시간이라함.
https://www.youtube.com/watch?v=wB9tIg209-8
그럼 NON BLOCKING I/O가 뭐냐
CPU가 중간에 쉬는 시간을 없애줌. ->더 빡새게 굴릴수있음. 아 참고로 JS는 처음부터 NON BLOCKING임
non blocking 기능을 처음부터 못쓰는 언어들은 node js를 사용함으로서 가능하게할수있다.
요약하면 NODE JS가 좋은 점 중 하나는 많은 클라이언트 요청을 감당해야 할 때, 싱글 스레드 서버를 굉장히 효율적으로 사용하게 해준다.
이벤트 기반 작동방식은 이해 필요.
노드 js를 사용중인 회사
: walmart, ebay, paypal, dow jones, intuit, netflix, linked in , MS, uber, yahoo, etc
반대로 node js를 쓰면안되는 서비스 회사는
cpu ram gpu등 다양한 하드웨어를 사용하는곳은 쓰면안된다. [output이 너무많고 복잡하다]
이러한 환경에는 python이나 django가 낫다고한다.
특징3. 비동기 기반의 이벤트 처리.
자바스크립트는 싱글 스레드로 동작하고 node js도 마찬가지이다 이때 html 태그들은 동기화 방식으로 처리 하는대 node js의 js이벤트는 비동기 처리를 시킨다. 이는 사용자가 지정할수도있고, 연산량에따라 node js가 알아서 순서를 나눌수도있다.
이 비동기 기반의 이벤트 처리는 따로 문서를 마련해야 요약할수있다.
동기화란?: 연산 자원에 관해서 동시 접근을 막고 순차적으로 처리하는것을 말한다.
비동기화란?: 연산 자원에 관하여 동시 접근을 가능케 하고 우선순위에 따라 순서를 나눈 후 처리한다
동기/비동기와 CallBack,Promise and Async/Await
node js