서버 렌더링 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의 처리를 위해 운영체제의 도움을 받고 있고, 운영체제마다 다르게 동작한다.