서버 렌더링 express → 웹애플리케이션 서버 → data(db에서 나온) + template(html 구조형태) <pug, ejx> → templating , rendering(렌더링) → response(todolist가 포함된 html을 클라이언트에 전달) → 그대로 브라우저는 렌더링해서 보여짐
html을 직접 .html로 만들고 데이터는 서버에서 데이터를 받아 넣기
node.js와 express
Node.js 를 사용하는 이유?
Node.js의 중요한 특징은?
Node.js의 내부 구조와 동작 방식
Node.js는 싱글 스레드인가? 멀티 스레드인가?
비동기란 무엇인가?
OS가 IO를 처리하는 방식?
운영체제의 커널에 IO 요청 → 처리 큐에 쌓인 대로 처리가 안됨
libuv ⇒ 싱글스레드 비동기 작업을 수행할 때 쓰레드 풀에서 작업하는데, 이 쓰레드 풀이 멀티쓰레드 쓰레드 풀이 있기 떄문에 블로킹 작업을 수행할 떄 쓰레드 풀에서 쓰레드를 가져와 작업을 수행함
자바스크립트가 빠른 이유 바이트코드라서 장점이 있음 바이트코드는 기본적으로 두 가지 방식으로 실행됨
- interpreter가 해석해서 실행
- 자주 사용하는 코드는 compiler에 의해 기계어가 되어 실행(JIT Compiler) 속도가 빨라짐에 따라 범용적으로 사용하기 위해 외부에서도 자바스크립트를 사용할 수 있는 런타임인 node.js를 만듦 초기에는 IO를 비동기(non blocking i/o)로 처리하기 위해 만들어짐
tomcat → 동기 Io 방식이라 io가 끝날 때까지 계속해서 기다리는 유휴 상태 nodejs는 바로 리턴하기 때문에 메모리 측면에서 이득이 있음 디스크는 병렬 작업이 안되기 때문에 사실상 io의 성능은 같은데 작업의 효율성 자체가 올라가는 것 단위시간당 사용자 처리량 → 싱글스레드가 멀티스레드보다 더 높음
c10k문제 아파치 → 프로세스가 1만개 생김 커널 내부에서는 프로세스가 거기서 거기 이를 해결하려 나온 것이 ngnix, node.js
twobytwo 동기블로킹 비동기 논블로킹
turboFan → 최적화된 코드 코드를 내가 짠 대로 실행시켜주지 않는 optimizer
Jit Compiler 자바에서 hotspot vn chrom v8에 주로 사용 1970년대 즉시 실행 → 인터프리터가 빠름 TurboFan → 반복적으로 사용되는 코드에 사용
IOpolling
- epoll
- 비동기 처리하기 위한 OS 커널에서 제공해주는 기능
- windows에서는 iocp
- bsd계열(mac) kqueue
- io multiplexing - 한 소켓이 하나를 담당하도록 쓰레드를 만듦. 여러 io를 하나의 쓰레드에서 처리할 수 있도록 처리해주는 os 자체의 기능으로, nodejs와 비슷한 방식으로 응답됨
- 이전 select와 poll 같은 경우 busy waiting때문에 cpu 자원이 많이 소모됨. 이를 해결하기 위한 기술
- 운영체제의 비표준
- kqueue
- event loop의 처리를 위해 운영체제의 도움을 받고 있고, 운영체제마다 다르게 동작한다.