본문 바로가기
TIL/디지털트윈

04.24~28 디지털 트윈 부트캠프 9~13일차 (1)

by saramnim 2023. 4. 30.
728x90

여지껏 한 번도 코로나 안걸렸다가 요번에서야 된통 걸려버렸다;;;;;;;

하필이면 내가 어려워하는 백엔드를 배우는 주간이였어서 문제가 좀 크다ㅜㅠ

차라리 자바스크립트를 배우는 주간이였으면 맘 편히 쉬지 않았을까,,,,킁

수업 내용을 완전히 따라가긴 어려우니 강사님이 올리신 과제와 추천 영상을 토대로 아예 24일~28일의 내용을 가볍게 짚고 넘어가기라도 하자..!


4월 24일

Node.js란?

자바스크립트를 실행시키는 런타임 환경

비동기 이벤트 주도 JS 런타임으로써 Node.js는 확장성 있는 네트워크 애플리케이션을 만들 수 있도록 설계됨 - 공식문서

 

런타임 환경

특정 언어로 만든 프로그램을 실행할 수 있도록 해주는 프로그램

 

비동기 이벤트

Promise, Async/Await => 콜백 기반 

비동기 함수 실행

=> 서버와의 통신을 담당하는 함수가 작업을 마친 후 응답을 받으면

=> 인자로 넘겨 준 콜백 함수를 통해 작업 실행

 

이벤트 주도

이벤트가 발생하면 지정한 작업이 수행되는 방식

운영체제

이벤트 주도와 반대되는 특성으로, 쓰레드 기반의 동시성 모델 사용

쓰레드: 하나의 작업이 실행될 수 있는 주체

동시성 모델: 작업의 수만큼 쓰레드 할당 => 빠른 속도로 전환 => 다수의 작업이 동시에 진행되는 것처럼 동작

=> 자원 낭비, 비효율적, 사용 어려움, 교착상태(데드락) 발생

 

이벤트 루프

라운드 로빈 방식(각 단계들 마다 특정 시간을 할당해 그 시간만큼 작업을 처리)으로 순환

지속적으로 요청을 처리할 수 있도록 동작

각 단계가 갖고 있던 콜백을 모두 실행해 목록이 empty

=> 다음 단계로 넘어감(Tick)

=> 각 단계는 서로 다른 종류의 콜백들을 담당

=> 유저가 어떤 동작을 가진 콜백을 이벤트 루프에 넣는지에 따라 콜백이 어느 큐로 들어갈지 정해짐

=> 콜백의 실행 시점 조절

 

  • 타이머 단계
    setTimeout(), setInterval()
    타이머 함수로 스케쥴링 한 콜백
  • 펜딩 단계
    CONNECTION_ERROR
    이전 루프에서 마무리 되지 못한 I/O 콜백들
  • Idle, prepare 단계
    내부의 작업 수행, I/O 폴링 사전 준비
    node.js 내부의 libuv 공간에서 작업 수행 후 내부에서 사용되는 I/O를 폴링하기 전에 수행하는 사전 준비
    내부적인 작업을 위해서만 사용, 외부에 노출x
  • poll 단계
    NETWORK_IO, FILE_IO
    새로운 I/O 이벤트를 가져와서 실행
    파일을 읽고 쓰거나 네트워크와 통신하는 등 위 단계에 올라가는 콜백들을 제외한 대부분의 콜백들이 poll 단계에서 처리
  • check 단계
    setImmediate()
    스케쥴링된 콜백들을 호출
    poll 단계 비어있고 유휴 상태 Idle이 되었을 때 setImmediate()로 스케쥴링된 콜백 존재 시 바로 check 단계로 넘어온다.
  • close 단계
    close 콜백 실행(소켓 종료)

 

논 블로킹 I/O 모델

Node.js에서 I/O를 직접 수행하는 함수는 거의 없으므로 프로세스는 블로킹 되지 않아 확장성 있는 시스템을 개발하는 게 아주 자연스럽다. - 공식 문서

비동기 작업들로 맡기고 이후 코드 진행

 

libuv

c언어로 이루어진 라이브러리

비동기 작업을 시스템 커널에 위임하며 동작

 

정리: Node.js 비동기 이벤트 주도, 논-블로킹, 자바스크립트 런타임 환경

위 내용들은 위 동영상 보고 학습

 

콜백 함수

다른 함수의 인자로써 넘겨진 후 특정 이벤트에 의해 호출되는 함수

비동기 방식으로 작성된 함수를 동기 처리하기 위해 필요

 

스레드 (Thread)와 프로세스 (Process)

  • 프로세스 (Process)
    운영체제에서 실행 중인 하나의 프로그램
    스레드와 달리 프로세스는 각자 독립적인 메모리 공간을 가지기 때문에 서로 간의 영향을 받지 않는다.
  • 스레드 (Thread)
    프로세스 내에서 실행되는 실행 흐름의 단위
    스레드는 하나의 프로세스 내에서 서로 다른 작업을 동시에 수행할 수 있다.

 

교착상태

두 개 이상의 프로세스나 스레드가 서로의 작업이 끝나기를 기다리며 무한히 대기하는 상태

이러한 상황은 블로킹(blocking) 작업이 있을 때 발생할 가능성이 높다.

블로킹 작업: I/O 작업이나 데이터베이스 조회 등의 작업

교착상태 발생상황

  • 한 스레드에서 다른 스레드가 사용 중인 자원에 접근하려고 할 때
  • 두 개 이상의 스레드가 동시에 하나의 자원을 사용하려고 할 때
  • 이벤트 루프가 블로킹되는 작업을 수행할 때

 

큐 (Queue)

기본적인 자료구조, 선입선출(先入先出, First In First Out; FIFO)의 구조로 저장된다.

나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념

 

라운드 로빈 방식 (Round Robin)

평등하게 자원을 분배하는 분배 방식이다.

ex) 메인이 5개의 자원을 3명에게 분배할 때, 3명 모두에게 하나씩 분배를 마친 뒤 다시 첫번째 타자로 돌아가 나머지 2개를 순서에 따라 분배

 

쓰레드 풀 (Thread Pool)

Node.js의 디폴트 개수는 4개

백엔드의 성능 처리 기법, 방법 여러가지 중 하나

작업처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 

작업처리 요청이 폭증되어도 스레드의 전체개수가 늘어나지 않으므로(제한해서 하나씩 처리하기 때문)

시스템 성능이 급격히 저하되지 않는다.

 

커넥션 (Connection)

프론트엔드와 백엔드의 연결, DB와의 연결, 클라이언트와 서버간의 연결 등이 있다.

커넥션을 만드는 것도 자원이다.

통로를 만들어 놓는 것이다.

 

인터페이스 (interface)

서로 다른 사물이나 시스템 간에 커뮤니케이션(소통)이 가능하도록 설계한 상호 작용 방식

(2개 이상의 장치나 소프트웨어 사이에서 정보나 신호를 주고 받을 수 있도록 하는)

즉 하드웨어이거나 소프트웨어가 될 수 있다.

구현된 것이 아무것도 없는 밑그림만 있는 기본 설계도.(양식)

 

빌드, 컴파일, 배포(Deploy)

  • 빌드 (Build)
    코드를 컴퓨터가 실행할 수 있는 독립적인 형태로 변형하는 과정
    사용자가 작성한 소스코드 파일(.java)을 컴파일해서 컴파일된 코드(.class)가 되면,
    이것을 컴퓨터가 실행할 수 있는 상태로 변환
  • 컴파일 (Compile)
    사용자가 작성한 소스코드 파일(.java)을 컴퓨터가 이해할 수 있는 기계어로 번역
  • 배포 (Deploy)
    실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치

 

http
하이퍼텍스트 전송 프로토콜(HTTP)

프로토콜? → 인터넷 통신 규약

주로 html 문서를 받는다.

 

서버 포트 (server port)

서버에 있는 웹서버 프로그램간을 연결해주는 플러그와 같은 역할을 하는 포트(자원)

 

utf-8

전세계의 표준이 된 캐릭터셋

인코딩 디코딩해주는 방식

한글, 영어, 한자 등을 변환

  • 인코딩: 문자 -> 0,1
  • 디코딩: 0,1 -> 문자

 

REST API (Representational State Transfer)와 APIWEB API

  • REST API
    HTTP 프로토콜을 기반으로 하며 자원을 식별하고 상태를 전송하기 위한 일정한 규칙을 따르는 웹 API의 한 형태
  • API
    일반적으로 다른 응용 프로그램과 상호 작용할 수 있도록 인터페이스를 제공하는 것을 의미
  • Web API
    HTTP 프로토콜을 사용하여 인터넷 상의 다른 응용 프로그램과 상호 작용하는 API를 의미

 

RESTful

REST(Representational State Transfer) 아키텍처 스타일을 따르는 웹 서비스를 구현하는 방법

ex) RESTful API를 사용하여 블로그 게시물을 작성 및 조회 가능

블로그 게시물은 URI를 통해 고유하게 식별되며,

GET 메서드를 사용하여 게시물을 읽고,

POST 메서드를 사용하여 새 게시물을 작성하고,

PUT 메서드를 사용하여 게시물을 수정하고,

DELETE 메서드를 사용하여 게시물을 삭제

 

JSON(JavaScript Object Notation)

경량의 데이터 교환 형식 중 하나로, 텍스트 기반의 데이터 교환을 위해 사용

자바스크립트 객체 표기법과 유사한 형태를 가지고 있으며, 다양한 프로그래밍 언어에서 사용할 수 있다.

객체 리터럴 형식으로 생김

728x90
반응형

댓글

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."