nodejs 교과서 중간고사 정리

신범철·2021년 10월 21일
0

21-1js수업

목록 보기
3/3

노드

node.js는 크롬 v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임(실행환경)이다.
+프레임워크 : 실행환경 + 각종 라이브러리
런타임 : 실행환경

노드의 특성(2가지를 쓰세요)

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

  • 이벤트의 예 : 클릭, 네트워크 요청, 타이머
  • 이벤트 리스터 : 이벤트를 등록하는 함수
  • 콜백 함수 : 이벤트가 발생했을 때 실행될 함수
    +거의 모든 UI가 존재하는 어플리케이션들은 이벤트 기반 언어

논블로킹 I/O

논 블로킹 : 오래걸리는 함수를 백그라운드로 보내서 다음코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행

  • 논 블로킹 방식하에 일부 코드는 백그라운드에서 병렬실행
  • 일부 코드 : I/O작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
  • 나머지는 블로킹 방식으로 처리
  • I/O작업이 많을 때 노드 활용성 극대화

프로세스 vs 스레드(차이점)

  • 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 공유 x
  • 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스는 자원 공유
    노드 프로세스는 멀티스레드이지만 다룰수 있는 스레드가 하나여서 싱글 스레드라고 표현

싱글 스레드

  • 싱글 스레드라 주어진 일을 하나 밖에 처리 못함I
    but 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행

멀티 스레드와 비교

  • 싱글 스레드는 스레드를 하나만 사용하기 때문에 에러를 처리 하지못하면 멈춤
    프로그램 난이도가 쉽고, CPU, 메모리 자원을 적게 사용
  • 멀티 스레드 모델은 에러 발생해도 새로운 스레드를 생성해여 해결 가능
    프로그래밍 난이도 높, 많은 자원을 사용함

멀티 스레드 vs 멀티 프로세싱

노드 14버전 부터 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
기존의 멀티 프로세싱만 가능했던 아쉬움을 달래줌

멀티 스레딩(하나의 프로세스를 사용하면서 안에 여러개의 스레드 사용)

  • 하나의 프로세스 안에서 여러 개의 스레드 사용
  • CPU작업이 많을 때 사용
  • 프로그래밍이 어렵다.

멀티 프로세싱(여러개의 프로세스 사용하면서 안에 하나의 스레드 사용)

  • 여러 개의 프로세스 사용
  • I/O 요청이 많을 때
  • 프로그래밍이 비교적 쉬움

노드 서버의 장단점

장점

  • 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용
  • I/O작업이 많은 서버에 적합
  • 멀티 스레드 방식보다 쉬움
  • 웹 서버가 내장되어 잇다.
  • 자바스크립트 사용
  • JSON 형식과 호환 쉬움

단점

  • 싱글 스레드라 CPU 코어 하나만 사용
  • CPU 작업이 많은 서버로 부적합
  • 하나 뿐인 스레드가 멈추지 않도록 관리해야함
  • 규모가 큰 프로젝트 관리 어려움
  • 어중간한 성능

위에 내용은 정말 다 나옴 무족권 외울것!!!!!!(10번문제까지임)

이벤트 루프


호출 스택에 함수가 들어옴
그중 일부 코드(I/O) 백그라운드로 보냄
배그라운드에서 실행후 태스크 큐로 보냄
태스크 큐는 이벤트 루프로 이동함

이벤트 루프는 호출스택이 비워지면 실행

이벤트 루프는 태스크 큐에서 다음 함수가 들어올때 까지 대기

문제로 나올것 : 타이머가 정확하지 않을수 있는 이유(settimeout)

호출스택이 비워져있어야지만 태스크 큐에있는 콜백 함수가 호출스택에 올라가서 실행 될수 있기 때문에

프로미스

프로미스 : 내용이 실행은 되었지만 결과는 아직 반환하지 않은 객체
.then 결과 실행
실행이 완료되지 않았으면 완료된 후에 then내부 함수 실행

resolve - then(성공)
reject - catch(실패)
finally 무조건 실행

promise.resolve(성공리턴값) : 바로 resolve하는 프로미스
promise.reject(실패리턴값) : 바로 reject하는 프로미스
promise.all([promise1, promise2]) : 두개 다 성공해야 then으로 이동
하나라도 실패하면 catch로 이동

async/await

async는 function앞이거나 화살표 함수의 경우
(req,res)매겨변수 앞
async function aa(){};
const a = async(req,res) =>{}

async는 프로미스를 반환

for await of

노드 10부터 지원
for await(변수 of 프로미스배열)

  • resolve된 프로미스가 변수에 담겨 나옴
  • await를 사용하기 때문에 async 함수 안에서 해야함
    반복문 개념으로 이해하면 쉬움
    프로미스 배열중 앞 배열이 실행하고 resolve타고 다음 배열 실행 모든 배열이 끝날때까지 기다려줌

promise.all vs for await of vs promise.foreach




참고 링크

타이머 메서드

set메서드에 clear메서드가 대응
setTimeout(콜백함수, 밀리초) : 주어진 밀리초 후 콜백함수 실행
setInterval(콜백함수, 밀리초) : 밀리초마다 콜백함수 반복 실행
setImmediate(콜백함수) : 콜백함수 즉시 실행

clearTimeout(아이디) : setTimeout을 취소
cleatInterval(아이디) : setInterval을 취소
clearImmediate(아이디) : setImmediate를 취소

setImmediate는 콜백함수를 즉시 실행하는 데
clearImmediate가 필요한 이유
: 콜백함수가 즉시실행하여 태스크 큐로 가는데 호출스택이 비워져 있어야 실행이 가능하므로
어떤 함수안에서 셋이미디어트를 했으면 그 셋이미디어트가 백그라운드로 가서 태스크큐로 가도 호출스택에는 같은함수가 실행 중 일수 있고 만약 같은 함수 안에 클리어이미디어트가 있으면 태스크큐에있는 셋이미디어트의 콜백함수는 없어진다.

module.exports과 export의 차이

module.export 외에도 exports로 모듈을 만들 수 있음
exports는 module.export를 참조하고 module.exports는 {}를 참조
exports를 다른 값을 대입하면 참조관계가 깨지므로 에러!

process.nextTick(콜백)

이벤트 루프가 다른 콜백 함수들 보다 nextTick의 콜백함수를 우선적으로 처리함

  • 너무 막 쓰면 다른 콜백 함수들 실행이 늦어짐
  • 비슷한 경우로는 promise가 존재(nextTick처럼 우선순위 상)

단방향 암호화(crypto)

Hash기법
암호는 가능하지만 복호화는 불가능

REST API

REST : 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것, 하나의 아키텍쳐
HTTP URL를 통해 자원을 명시하고 HTTP method를 통해 해당 자원에 대한 CRUD operation을 적용하는 것을 의미

HTTP 프로토콜

클라이언트가 누구든 서버와 HTTP 프로토콜 규정을 통해 소통 가능
RESTful : REST API를 사용한 주소체계를 이용하는 서버

쿠키의 필요성

요청의 단점 : 누가 요청을 보냈는지 알수 없음

쿠키를 사용하면 단점 보안 매 요청마다 서버에 쿠키를 동봉해서 보냄

상태 코드

성공
200 요청 성공
201 작성 완료

리다이렉트
301 요청 주소 영구 이동
302 요청 주소 임시 이동

클라 에러
401 권한 없음
403 금지됨
404 찾을 수 없음

서버 에러
500 내부 서버 오류
502 불량 게이트 웨이
503 서비스를 이용할 수 없음

세션 사용하기

쿠키의 정보는 노출되고 수정되는 위험이 있음
중요한 정보는 서버에서 관리하고 클라이언트에는 세션 키만 제공

https

웹 서버에 SSL 암호화를 추가하는 모듈

  • 오고 가는 데이터를 암호화해 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없음

http2

SSL 암호화와 더불어 HTTP 프로토콜인 http/2를 사용하는 모듈
웹의 속도 개선

cluster(클러스터)

기본적으로 싱글 스레드인 노드가 CPU코어를 모두 사용할 수 있게 해주는 모듈
멀티스레드를 구현할수 있게 해주는 모듈

npm

node package manager

  • 다른 사람들이 만든 소스 코드들을 모아둔 저장소
  • 남의 코드를 사용하여 프로그래밍 가능
  • 나도 올릴수 있다.
  • 오픈 소스 생태계 구성

미들 웨어

익스프레스는 미드웨어로 구성됨

  • 요청과 응답의 중산에 위치하여 미들웨어
  • app.use(미들웨어)로 사용
  • 순서대로 작동
  • next()로 다음 미들웨어로 넘어감
profile
https://github.com/beombu

0개의 댓글