개발일지

개발일지 29일차

index.ys 2023. 4. 14. 11:11

Node.js

  • Chrome V8 엔진으로 빌드된 JS런타임 환경
  • 브라우저 없이도 컴퓨터에서 작동할 수 있는 런타임환경
  • 구글이 Node.js를 만든건 아님 V8엔진만 만듬

Node.js 특징

논 블로킹

- 함수가 실행되는 중에도 다른 작업 동시에 진행가능, 작업이 끝나지 않은 코드가 있어도 실행이 가능한 다음 코드로 넘어감

싱글스레드

- 싱글 스레드란 스레드 하나를 사용하여 동시에 하나의 작업만 처리가능

  • 스레드: 프로그램이 동작할 때, cpu를 사용하는 단위

이벤트 루프

- 특정 이벤트가 발생하면 콜백함수를 호출, 호출할 콜백함수를 관리, 실행순서를 결정하는것

  • JS는 싱글 스레드 기반언어, 단 한개의 call stack을 가짐
  • 블로킹을 일으키는 이벤트들은 비동기적으로 실행
  • 이벤트 처리가 끝난 콜백 함수들은 큐에 순차적으로 쌓이고 이벤트 루프는 stack이 비었을때 큐에서 콜백을 꺼내 stack에 올리는 역할 수행

Node.js 장단점

장점 단점
싱글 스레드, 적은 컴퓨터 자원사용 cpu 코어 하나만 사용
Input/Output 작업이 많은 서버로 적합 cpu 작업이 많은 서버로 부적합
웹서버 내장 스레드가 한개
JS사용 서버 규모 관리 x
JSON형식과 호환  

동기 / 비동기

  • 동기: 먼저 실행된 코드의 처리결과가 나올때 까지 다음 코드가 실행되지 않고 대기 하는것
  • 비동기: 실행순서와 관계없이 먼저 처리된 코드부터 처리결과가 나옴

동기적 예시 놀이공원

- 놀이기구를 타기위해 대기하는 사람 === 실행이 되기위해 대기중인 코드

- 놀이기구를 타고 있는 사람 === 실행중인코드

- 놀이기구를 타고 나온 사람 === 실행이 끝난 코드

비동기적 예시 맛집, 영화관

- 맛집에 들어가기 위해 줄서 있는 사람 === 실행이 되기 위해 대기중인 코드

- 맛집에 들어가서 밥먹을 먹고 있는 사람 === 실행중인 코드

- 맛집에서 밥을 다 먹고나온 사람(들어간 순서와 관계없이 밥을 빨리 먹은 사람은 먼저나옴) === 실행이 끝난 코드 (실행 순서와 관계없이 처리가 먼저 끝난 코드먼저 실행)

 

- 영화관에서 티켓을 끊기위해 대기중인 사람 === 실행이 되기 위해 대기중인 코드

- 영화관에서 티켓을 1장을 끊으려는 사람들과 200장을 끊으려는 사람 ===  티켓 1장 ==가벼운 코드 ,  티켓 200장 == 무거운코드

- 티켓을 끊으려는 사람들의 주문을 한꺼번에 받고 1장인 티켓부터 결제 === 실행이 가벼운 코드 부터 처리하고 무거운 코드는 나중에 처리

 

내일 할일: REST API전체적인 흐름 이해하기, 서버와 DB연동하여 데이터 주고 받기, 각 요청 별로 데이터 처리 방법 연습하기, thunder client 익숙해지기, 에러처리,  req ,res 데이터 흐름 이해하기