Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

Node.js 1일차 본문

TIL(Today I Learned)

Node.js 1일차

JavaCPP 2024. 11. 18. 21:00

Node.js

 

Node.js는 서버 사이드에서 JavaScript를 실행하기 위한 오픈소스 런타임 환경입니다. Chrome의 V8 JavaScript 엔진 위에서 작동하며, 비동기 I/O와 이벤트 기반 모델을 통해 높은 성능과 확장성을 제공합니다. 아래에 Node.js에 대한 자세한 설명을 제공합니다.


1. Node.js의 특징

(1) 비동기 및 이벤트 기반

  • Node.js는 논 블로킹(non-blocking) I/O를 지원하여, 파일 읽기/쓰기, 데이터베이스 요청, 네트워크 요청 등을 동시에 처리합니다.
  • 이를 위해 이벤트 루프(Event Loop)를 사용하며, 이를 통해 단일 스레드에서 여러 작업을 처리할 수 있습니다.

(2) 단일 스레드 구조

  • Node.js는 단일 스레드에서 실행되지만, libuv라는 C++ 라이브러리를 통해 작업을 효율적으로 관리합니다.
  • CPU를 많이 사용하는 작업보다는 I/O 중심 애플리케이션에 적합합니다.

(3) 크로스 플랫폼

  • Windows, macOS, Linux 등에서 동작하며, 다양한 환경에서 손쉽게 배포 가능합니다.

(4) 빠른 속도

  • V8 엔진(Google Chrome에서 사용하는 JavaScript 엔진)을 기반으로 빠른 실행 속도를 자랑합니다.
  • JIT(Just-In-Time) 컴파일 방식을 사용하여 코드를 빠르게 실행.

(5) NPM 생태계

  • Node.js는 NPM(Node Package Manager)을 통해 수많은 라이브러리와 도구를 제공합니다.
  • NPM 레지스트리에는 200만 개 이상의 패키지가 있어 개발 시간을 단축하고 다양한 기능을 쉽게 구현할 수 있습니다.

2. Node.js 아키텍처

(1) 이벤트 루프(Event Loop)

  • Node.js는 이벤트 루프를 통해 작업을 처리합니다. 이는 단일 스레드로 작동하며, 작업 요청을 큐에 저장하고, 작업이 완료되면 콜백 함수를 실행합니다.
  • 비동기 작업의 흐름:
    1. Node.js는 요청을 받습니다.
    2. 비동기 작업(예: 파일 읽기)은 백그라운드에서 실행됩니다.
    3. 작업 완료 시 이벤트 루프가 콜백을 실행합니다.

(2) 논 블로킹 I/O

  • 비동기 작업으로 인해 하나의 작업이 완료될 때까지 기다리지 않고 다른 요청을 처리합니다.

(3) 모듈 기반 설계

  • Node.js는 모듈을 통해 코드를 구조화하며, 기본적으로 제공되는 코어 모듈과 외부 라이브러리를 활용할 수 있습니다.
    • 코어 모듈 예: http, fs, path, os 등.
    • 외부 모듈 예: express, mongoose, axios 등.

3. 주요 사용 사례

(1) 웹 서버

Node.js는 HTTP 서버를 쉽게 설정할 수 있습니다. Express.js 같은 프레임워크와 함께 사용하면 더욱 편리합니다.

const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello, World!');
});

server.listen(3000, () => {
    console.log('서버가 http://localhost:3000 에서 실행 중입니다.');
});

(2) 실시간 애플리케이션

  • 실시간 채팅, 온라인 게임, 협업 도구 등에 사용됩니다.
  • WebSocket을 다룰 수 있는 Socket.IO 라이브러리가 대표적입니다.

(3) REST API

  • Node.js와 Express.js를 사용하여 RESTful API를 쉽게 구축할 수 있습니다.
  • JSON 형식으로 데이터를 주고받아 클라이언트와 서버 간 통신에 적합.

(4) CLI 도구

  • Node.js는 커맨드라인 도구 개발에도 적합합니다.
  • 예: npm, eslint, webpack.

4. Node.js 핵심 모듈

Node.js는 다음과 같은 코어 모듈을 제공합니다:

모듈 이름설명

http HTTP 서버/클라이언트를 생성.
fs 파일 시스템 작업(읽기, 쓰기 등).
path 파일/디렉터리 경로 관리.
os 운영 체제 관련 정보 제공.
stream 스트림 데이터 처리.
crypto 암호화 및 해싱.

5. Node.js 생태계: 주요 라이브러리

Express.js

  • 간단한 웹 서버와 REST API를 쉽게 구현 가능.
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello, Express!');
});

app.listen(3000, () => {
    console.log('서버 실행 중: http://localhost:3000');
});

Mongoose

  • MongoDB 데이터베이스와 상호작용하기 위한 ODM(Object Data Modeling) 라이브러리.
  • 스키마 정의 및 데이터 검증 제공.

Socket.IO

  • 실시간 WebSocket 통신을 지원.

dotenv

  • 환경 변수를 쉽게 관리.
 

 

 

Express.js란?

1. Express.js의 특징

(1) 간단하고 유연한 라우팅 시스템

  • HTTP 요청(GET, POST, PUT, DELETE 등)에 대해 다양한 라우트를 설정할 수 있습니다.
  • 요청 URL과 HTTP 메서드에 따라 적절한 처리 로직을 연결하는 방식으로, 복잡한 로직을 간단하게 관리할 수 있습니다.

(2) 미들웨어 지원

  • 미들웨어는 요청과 응답 사이에서 실행되는 함수로, 요청을 가공하거나 응답을 수정하는 등의 작업을 할 수 있습니다.
  • Express는 기본 미들웨어 기능 외에도, 커스텀 미들웨어나 서드파티 미들웨어를 쉽게 통합할 수 있습니다.

(3) RESTful API 지원

  • RESTful API 설계를 쉽게 할 수 있도록 돕는 다양한 기능을 제공, 특히 JSON 형식으로 데이터를 주고받는 웹 서비스 구현에 유용합니다.

(4) 템플릿 엔진 통합

  • 다양한 템플릿 엔진(Pug, EJS, Handlebars 등)을 사용하여 서버 사이드에서 동적으로 HTML 페이지를 생성할 수 있습니다.

(5) 확장성

  • Express는 매우 경량화되어 있으며, 필요한 기능만 추가할 수 있도록 설계되었습니다.
  • 다양한 미들웨어와 라이브러리를 통합하여 확장 가능합니다.

 

2. Express.js 주요 기능

(1) 라우터

  • Express에서는 다양한 방식으로 라우팅을 처리할 수 있습니다.
  • 여러 개의 라우트를 그룹화할 때 express.Router()를 사용하여 모듈화된 라우팅을 구현할 수 있습니다.

(2) 미들웨어

  • 미들웨어는 요청을 수정하거나 응답을 변경하기 위한 함수입니다.
  • 다양한 미들웨어를 사용하여 요청 전처리, 로그 기록, 인증, 오류 처리 등을 구현할 수 있습니다.

(3) 오류 처리

  • Express에서는 오류를 처리하기 위한 오류 처리 미들웨어를 설정할 수 있습니다.
    javascript
    코드 복사
    app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something went wrong!'); });

(4) 파일 제공

  • Express는 express.static() 미들웨어를 사용하여 정적 파일(HTML, CSS, JS, 이미지 등)을 제공합니다.
    javascript
    코드 복사
    app.use(express.static('public'));

4. Express.js 사용 예시

(1) 간단한 RESTful API

Express를 사용하면 간단하게 RESTful API를 만들 수 있습니다. 예를 들어, To-Do 리스트 API를 만들 수 있습니다.

const express = require('express');
const app = express();
app.use(express.json());

let todos = [];

app.get('/todos', (req, res) => {
    res.json(todos);
});

app.post('/todos', (req, res) => {
    const todo = req.body;
    todos.push(todo);
    res.status(201).json(todo);
});

app.listen(3000, () => {
    console.log('To-Do API 서버 실행 중: http://localhost:3000');
});

(2) MongoDB와 연결

Express와 MongoDB를 사용하여 데이터베이스와 연동할 수도 있습니다. MongoDB의 ODM 라이브러리인 mongoose를 사용하면 쉽게 데이터 모델링을 할 수 있습니다.


5. Express.js의 장점

  1. 간결하고 직관적인 API: 라우팅과 미들웨어 처리가 매우 간단하여 빠르게 개발할 수 있습니다.
  2. 다양한 미들웨어 지원: 인증, 로깅, 파일 업로드, 세션 관리 등 다양한 기능을 쉽게 추가할 수 있습니다.
  3. 커뮤니티와 지원: Express는 Node.js에서 가장 인기 있는 프레임워크로, 활발한 커뮤니티와 문서가 존재합니다.
  4. 확장성: 필요에 따라 기능을 확장할 수 있습니다.

'TIL(Today I Learned)' 카테고리의 다른 글

Node.js 간단한 메모장 만들기  (0) 2024.11.20
Node.js 2일차  (0) 2024.11.19
정렬 알고리즘(버블/삽입/선택)  (0) 2024.11.15
개인과제 4일차(트러블 슈팅)  (0) 2024.11.14
개인과제 3일차(트러블 슈팅)  (0) 2024.11.13