내가 만든 API를 배포(공개) 해보자!
배포 환경에 4가지가 있다고?!
주소창에 자문쇠 붙이고 싶어!(자문쇠가 없는 사이트는 주의 요망이라고 표시가 뜬다)
배포를 하는데 있어서 24시간 동안 서버 컴퓨터를 켜놓기가 힘드니까 그 기능을 대신해주는 것이 클라우드이다!!
빠르게 서버 컴퓨터를 늘리는 이점이 있기에 클라우드 사용량이 늘기 시작했다.
스타트업은 대부분 모든 기능을 클라우드에 집어 넣는 AWS all in을 사용한다.
AWS: 가장많은 사용자!(오래됨, 대부분 사용)/ 메모리 4GB짜리 컴퓨터 한달에 5만원
GCP: AWS의 70%의 가격(초기 스타트업에서 사용함) / 메모리 4GB짜리 컴퓨터 한달에 4만원
Azure
클라우드는 비용경쟁력이 중요하다.
source(src) => 출발지
destination(dst) => 목적지
TCP => 양방향 통신 (속도 느림, 안정성 0) / http 1.1, http2.0 둘다 tcp기반으로 함
UDP => 단방향 통신 (속도 빠름, 안정성 x) / http 3.0은 udp기반으로 사용한다.
컴퓨터가 바껴서 해당 사이트로 들어가게 되는 것이다.
데이터들이 암호화되어있다.
자바스크립트가 한 번에 하나의 태스크만 실행할 수 있는 싱글스레드 기반으로 이루어져 있기 때문에 함수를 실행할 수 있는 창구가 단 하나이며, 동시에 2개 이상의 함수를 실행할 수 없습니다.
쉽게 설명해 보면 먼저 요청이 발생된 API 1에 대한 응답이 완료되기 전에,
API 2의 다른 요청이 발생하게 된다면, 앞서 발생된 API 1 실행이 완료될 때 까지 API 2의 실행은 이루어지지 않습니다.
이처럼 현재 실행 중인 태스크가 종료될 때까지 다음에 실행될 태스크가 실행되지 않고 block 상태가 되는 것을 동기 처리
라고 합니다.
동기 처리 방식은 태스크를 순서대로 실행하기에 실행 순서가 보장되지만, 동시에 여러 요청을 받을 수 없는 문제가 발생하게 됩니다.
자바스크립트는 실행될 때 stack이 발생하며 위에 함수들이 차례차례 쌓인다.스택(Stack)
큐(Queue)
만약, 콜 스택이 비어 있고 태스크 큐에 대기 중인 함수가 존재한다면
이벤트 루프는 FIFO 방식으로 태스크 큐에 대기 중인 함수를 콜 스택으로 이동시킵니다.
cpu한개라고 가정하면 싱글스레드는 정상적으로 작업을 하지만 멀티스레드는 중간중간 저자하는 컨텍스트 스위칭을하므로 느리다.
싱글스레드는 하나 처리하는 동안 다른 것들은 병목이지만, 멀티스레드는 안정적이다(병렬처리처럼 보이지만 병렬처리는 아니다).
정리하자면! 멀티스레드는 안정적이지만, 컨텍스트 스위칭이 일어나서 효율적이지 못하고
싱글스레드는 오래 걸리는 일을 만나면 문제가 생겨 간단한 일이 많은 곳에서 효율적이다!!
자바스크립트는 기본적으로 싱글스레드이지만 멀티스레드로 만들어주는 것도 가능하다!
// index.js const { Worker } = require("worker_threads"); const start = () => { let totalSum = 0; for (let i = 0; i < 9; i++) { const worker = new Worker("./worker.js"); worker.postMessage(1000000000); worker.on("message", (result) => { totalSum += result; console.log(`나는 ${i}번째 일꾼이고, 현재까지 총합은 ${totalSum}이야`); }); } }; start();
// worker.js const { parentPort } = require("worker_threads"); parentPort.on("message", (maxSize) => { let sum = 0; for (let i = 0; i < maxSize; i++) { sum += 1; } parentPort.postMessage(sum); parentPort.close(); });
멀티 스레드로 하니 매우 빠른 속도로 처리가 되며 싱글스레드는 cpu를 100을 넘게 쓰지 못하지만 멀티 스레드는 그 이상을 사용할 수 있다.