JS + Node.js + Express 개념? 정리

Uhan33·2024년 4월 22일
0

TIL

목록 보기
68/72

저번 주에 삽질만 계속 해서 마땅히 쓸만한 내용이 없다..
그래서 기본적인 내가 사용하고 배우고 있는 node에 대해 본인이 정리한 개념을 작성하려고 한다.
그러다보니 JS도, Express도 추가로 작성해 두면 좋을 것 같아서 정리했다.(엄청 간단하게함.)

Javascript

자바스크립트는 ‘웹페이지에 생동감을 불어넣기 위해’ 만들어진 프로그래밍 언어입니다.
자바스크립트는 브라우저뿐만 아니라 서버에서도 실행할 수 있습니다.
이 외에도 자바스크립트 엔진(JavaScript engine)이라 불리는 특별한 프로그램이 들어 있는 모든 디바이스에서도 동작합니다.

자바스크립트는 ‘안전한’ 프로그래밍 언어입니다. 메모리나 CPU 같은 저수준 영역의 조작을 허용하지 않습니다

Node.js 환경에선 임의의 파일을 읽거나 쓰고, 네트워크 요청을 수행하는 함수를 지원합니다.

브라우저 환경에선 웹페이지 조작, 클라이언트와 서버의 상호작용에 관한 모든 일을 할 수 있습니다.

자바스크립트의 강점

  • HTML/CSS와 완전히 통합할 수 있음
  • 간단한 일은 간단하게 처리할 수 있게 해줌
  • 모든 주요 브라우저에서 지원하고, 기본 언어로 사용됨

Node.js

Node.js란 “V8 Java Script 엔진으로 빌드 된 Java Script 런타임이다. + libuv 라이브러리
JavaScript 엔진은 자바스크립트 파일을 컴퓨터가 읽을 수 있도록 변환해주는 역할

Java Script를 웹 브라우저로부터 독립시켜 서버 구현을 가능케 했다.
JavaScript 프론트엔드 영역뿐만 아니라 백엔드 영역까지 아우를 수 있는 언어

특징

  • 비동기 이벤트 기반 환경
  • 이벤트 기반의 Node.js는 비동기를 구현할 수 있으며 이 덕분에 Non-Blocking을 하나의 스레드로 수행할 수 있다.
  • Blocking: Node.js 프로세스에서 한 작업의 실행을 위해 다른 작업이 완료될 때까지 기다려야 하는 방식
  • Non-Blocking: A라는 작업 중 B작업을 실행시켜야 할 때 A작업이 끝나지 않더라도 기다리지 않고 B작업이 실행될 수 있도록 하는 방식

Node.js는 이벤트 기반 시스템으로 구성되어 있기 때문에 스레드 환경과 달리 병렬적으로 처리되는 특징을 가지고 있다.
JSON 형식의 데이터를 쉽게 처리할 수 있어 api 서버를 만드는 데 용이하게 사용될 수 있다.

libuv: node.js 에서 비동기 처리를 담당하는 라이브러리
libuv는 기본적으로 4개의 스레드를 가지는 스레드 풀을 생성한다.(최대 128개까지 스레드 개수를 늘릴 수도 있다)
이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체다.

libuv는 윈도우 커널, 리눅스 커널을 추상화해서 wrapping하고 있다.
nodejs는 기본적으로 libuv 위에서 동작하며, node 인스턴스가 뜰 때, libuv에는 워커 쓰레드풀(default 4개)이 생성된다.
위에서 블로킹 작업(api콜, DB Read/Write 등)들이 들어오면 이벤트루프가 uv_io에게 내려준다고 하였다.
libuv는 커널단(윈도우의 경우 IOCP, 리눅스는 AIO)에서 어떤 비동기 작업들을 지원해주는지 알고 있기때문에,
그런 종류의 작업들을 받으면, 커널의 비동기함수들을 호출한다.
작업이 완료되면 시스템콜을 libuv에게 던져준다. libuv 내에 있는 이벤트루프에게 콜백으로서 등록된다.

v8엔진: javascript 엔진으로써 자바스크립트를 실행하는 라이브러리


Express.js

Express란 Node.js를 사용하여 쉽게 서버를 구성할 수 있게 만든 클래스와 라이브러리의 집합체
Express는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크이다

Express는 프레임워크이므로 웹 어플리케이션을 만들기 위한 각종 러이브러리와 미들웨어 등이 내장되어 있어 개발하기 편하고,
수많은 개발자들에게 개발 규칙을 강제하여 코드 및 구조의 통일성을 향상할 수 있다.

0개의 댓글