node.js는 크롬 v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임(실행환경)이다.
+프레임워크 : 실행환경 + 각종 라이브러리
런타임 : 실행환경
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
논 블로킹 : 오래걸리는 함수를 백그라운드로 보내서 다음코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
노드 14버전 부터 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
기존의 멀티 프로세싱만 가능했던 아쉬움을 달래줌
호출 스택에 함수가 들어옴
그중 일부 코드(I/O) 백그라운드로 보냄
배그라운드에서 실행후 태스크 큐로 보냄
태스크 큐는 이벤트 루프로 이동함
이벤트 루프는 호출스택이 비워지면 실행
이벤트 루프는 태스크 큐에서 다음 함수가 들어올때 까지 대기
호출스택이 비워져있어야지만 태스크 큐에있는 콜백 함수가 호출스택에 올라가서 실행 될수 있기 때문에
프로미스 : 내용이 실행은 되었지만 결과는 아직 반환하지 않은 객체
.then 결과 실행
실행이 완료되지 않았으면 완료된 후에 then내부 함수 실행
resolve - then(성공)
reject - catch(실패)
finally 무조건 실행
promise.resolve(성공리턴값) : 바로 resolve하는 프로미스
promise.reject(실패리턴값) : 바로 reject하는 프로미스
promise.all([promise1, promise2]) : 두개 다 성공해야 then으로 이동
하나라도 실패하면 catch로 이동
async는 function앞이거나 화살표 함수의 경우
(req,res)매겨변수 앞
async function aa(){};
const a = async(req,res) =>{}
async는 프로미스를 반환
노드 10부터 지원
for await(변수 of 프로미스배열)
set메서드에 clear메서드가 대응
setTimeout(콜백함수, 밀리초) : 주어진 밀리초 후 콜백함수 실행
setInterval(콜백함수, 밀리초) : 밀리초마다 콜백함수 반복 실행
setImmediate(콜백함수) : 콜백함수 즉시 실행
clearTimeout(아이디) : setTimeout을 취소
cleatInterval(아이디) : setInterval을 취소
clearImmediate(아이디) : setImmediate를 취소
setImmediate는 콜백함수를 즉시 실행하는 데
clearImmediate가 필요한 이유
: 콜백함수가 즉시실행하여 태스크 큐로 가는데 호출스택이 비워져 있어야 실행이 가능하므로
어떤 함수안에서 셋이미디어트를 했으면 그 셋이미디어트가 백그라운드로 가서 태스크큐로 가도 호출스택에는 같은함수가 실행 중 일수 있고 만약 같은 함수 안에 클리어이미디어트가 있으면 태스크큐에있는 셋이미디어트의 콜백함수는 없어진다.
module.export 외에도 exports로 모듈을 만들 수 있음
exports는 module.export를 참조하고 module.exports는 {}를 참조
exports를 다른 값을 대입하면 참조관계가 깨지므로 에러!
이벤트 루프가 다른 콜백 함수들 보다 nextTick의 콜백함수를 우선적으로 처리함
Hash기법
암호는 가능하지만 복호화는 불가능
REST : 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것, 하나의 아키텍쳐
HTTP URL를 통해 자원을 명시하고 HTTP method를 통해 해당 자원에 대한 CRUD operation을 적용하는 것을 의미
클라이언트가 누구든 서버와 HTTP 프로토콜 규정을 통해 소통 가능
RESTful : REST API를 사용한 주소체계를 이용하는 서버
요청의 단점 : 누가 요청을 보냈는지 알수 없음
쿠키를 사용하면 단점 보안 매 요청마다 서버에 쿠키를 동봉해서 보냄
성공
200 요청 성공
201 작성 완료
리다이렉트
301 요청 주소 영구 이동
302 요청 주소 임시 이동
클라 에러
401 권한 없음
403 금지됨
404 찾을 수 없음
서버 에러
500 내부 서버 오류
502 불량 게이트 웨이
503 서비스를 이용할 수 없음
쿠키의 정보는 노출되고 수정되는 위험이 있음
중요한 정보는 서버에서 관리하고 클라이언트에는 세션 키만 제공
웹 서버에 SSL 암호화를 추가하는 모듈
SSL 암호화와 더불어 HTTP 프로토콜인 http/2를 사용하는 모듈
웹의 속도 개선
기본적으로 싱글 스레드인 노드가 CPU코어를 모두 사용할 수 있게 해주는 모듈
멀티스레드를 구현할수 있게 해주는 모듈
node package manager
익스프레스는 미드웨어로 구성됨