티스토리 뷰

 

Node.js

V8 자바스크립트 엔진과 libuv 및 C/C++에 의존성을 가진 자바스크립트 런타임 환경

 

런타임 : 자바스크립트로 된 프로그램을 실행할 수 있는 프로그램

 

 

Node.js 구성요소

https://wikidocs.net/223219

구성요소 설명
Node.js API 자바스크립트 API
Node.js 바인딩 자바스크립트에서 C/C++ 함수를 호출할 수 있게 합니다
Node.js 표준 라이브러리 (C++) 운영체제와 관련된 함수들. 타이머(setTimeout), 파일시스템(filesystem), 네트워크요청(http)
C/C++ 애드온 Node.js 에서 C/C++ 소스를 실행할 수 있게 하는 애드온
V8(C++) 오픈 소스 자바스크립트 엔진, 자바스크립트를 파싱, 인터프리터, 컴파일, 최적화에 사용됩니다.
libuv(C++) 비동기 I/O에 초점을 맞춘 멀티플랫폼을 지원하는 라이브러리. 이벤트 루프, 스레드 풀 등을 사용합니다.
기타 C/C++ 컴포넌트 c-ares(DNS), HTTP 파서, OpenSSL, zlib

 

 

Node.js 아키텍쳐

https://wikidocs.net/223219

 

1️⃣ 애플리케이션에서 요청이 발생합니다. V8 엔진은 자바스크립트 코드로 된 요청을 바이트 코드나 기계어로 변경합니다.

2️⃣ 자바스크립트로 작성된 Node.js의 API는 C++로 작성된 코드를 사 용합니다.

3️⃣ V8 엔진은 이벤트 루프로 libuv를 사용하고 전달된 요청을 libuv 내부의 이벤트 큐 추가합니다.

4️⃣ 이벤트 큐에 쌓인 요청은 이벤트 루프에 전달되고, 운영체제 커널에 비동기 처리를 맡깁니다. 운영체제 내부적으로 비동기 처리가 힘든 경우(DB, DNS 룩업, 파일 처리 등)는 워커 스레드에서 처리합니다.

5️⃣ 운영체제의 커널 또는 워커 스레드가 완료한 작업은 다시 이벤트 루프로 전달됩니다.

6️⃣ 이벤트 루프에서는 콜백으로 전달된 요청에 대한 완료 처리를 하고 넘깁니다.

7️⃣ 완료 처리된 응답을 Node.js 애플리케이션으로 전달합니다.

 

 

Node.js 의 기술적인 특징

1. 싱글 스레드

자바스크립트를 실행하는 힙과 콜스택 중, 콜스택이 하나이다. 

하나이기 때문에 한 번에 하나의 작업만 가능하다.

 

2. 이벤트 기반 아키텍처

이벤트 기반 아키텍처를 사용하여 콜 스택에 쌓인 작업을 다른 곳에서 처리한 다음 처리가 완료되었을 때 알림을 받으면 스레드가 하나라도 빠르게 처리할 수 있다.

 

3. 이벤트 루프

이벤트 기반 아키텍처를 구축하는 데 반응자 패턴을 사용한다.

반응자 패턴에서 이벤트 루프는 필수이며, libuv에 있습니다.

 

 

반응자 패턴 : 이벤트를 추가하는 주체와 해당 이벤트를 실행하는 주체를 분리하는 구조

 

 

 

Node.js의 장점과 단점

 

 

익스프레스 프레임워크

Node.js에서 가장 널리 사용되는 오픈 소스 웹 서버

 

 

익스프레스 설치하기

1️⃣  디렉터리를 설정하여 해당 디렉터리로 이동한다.

2️⃣ 해당 디렉터리에서 npm을 사용해 익스프레스를 설치한다.

npm install express

 

3️⃣ 설치가 완료되면 [mode_modules] 디렉터리와 package-lock.json, package.json 이 보인다. 

 

 

익스프레스 서버 만들기

localhost:3000으로 접속하면 헬로 express를 반환하는 서버이다.

const express = require('express') // ❶ express 모듈 불러오기
const app = express(); // ❷ express를 초기화 후 app에 할당
const port = 3000;

app.get("/", (req, res) => { // ❸ /으로 요청이 오는 경우 실행됨
	res.set({"Content-Type": "text/html"; charset=utf-8}); ➍ 헤더값 설정
    res.end("헬로 express");
});

app.listen(port, () => {
	console.log(`start server : use ${port}`) // ➎ 서버를 기동해 클라이언트 요청을 기다림
});

 

❶ express 패키지를 로딩해 express에 할당한다.

❷ express()를 실행해 express 인스턴스를 만들고 app에 할당한다.

❸ app.get을 사용해 url의 path가 '/'이면서 http 메서드가 get()인 경우 콜백 함수를 실행한다.

❹ 반환할 콘텐츠의 정보를 설정한다. 결과의 콘텐츠 타입은 html이며 결과에 한글이 있으므로 캐릭터셋을 utf-8로 변경한다.

❺ listen() 함수를 사용해 클라이언트의 요청을 기다린다.

❻ ctrl + f5를 눌러 서버를 실행 후 브라우저에서 localhost:8000을 입력해 서버에 접속해 확인한다.

 

 

REST API

자원을 URL에 표현하고 자원을 가져오는 행위를 HTTP 메서드로 표현하는 규칙

 

  1. 확장성 : REST 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기를 조정. 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거.  관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거합니다. 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원
  2. 유연성 : 완전한 클라이언트-서버 분리를 지원.  부분이 독립적으로 발전할  있도록 다양한 서버 구성 요소를 단순화하고 분리. 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않음. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상
  3. 독립성 : REST API 사용되는 기술과 독립적. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트  서버 애플리케이션을 모두 작성 가능. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경 가능

 

 

API

애플리케이션 프로그래밍 인터페이스(API)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의

개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성

=> 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이

 

  1. 클라이언트 : 웹에서 정보에 액세스하려는 사용자, API를 사용하는 사람이거나 소프트웨어 시스템
  2. 리소스 : 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터로 다양한 애플리케이션이 클라이언트에게 제공하는 정보 (클라이언트에 리소스를 제공하는 시스템을 서버라고 한다.)

 

REST

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처

쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용

=> REST 아키텍처 스타일을 따르는 API를 REST API

 

  1. 무상태 : 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법
  2. 계층화 시스템 : 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계 => 클라이언트에 보이지 않는 상태로 유지
  3. 캐시 가능성 : RESTful 웹 서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원
  4. 온디맨드 코드 : 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정 가능

 

 

 

'공부' 카테고리의 다른 글

Kakao Oauth Key 발급 방법  (0) 2024.05.05
Google Auth Key 발급 방법  (0) 2024.05.05
원시 값과 객체의 비교  (0) 2024.04.12
용어정리..  (0) 2024.04.05
주소창에 주소를 입력하면 어떤 일이 벌어질까?  (1) 2024.04.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함