Node.js

Fox·2024년 9월 27일
0
post-thumbnail

Node.js란?

  • Node.js는 Chrome V8 JavaScript 엔진을 기반으로 서버 측에서 JavaScript를 실행할 수 있도록 해주는 오픈소스 런타임 환경이다.
  • 웹 브라우저뿐만 아니라 서버에서도 JavaScript를 사용할 수 있게 하여, 프론트엔드와 백엔드 모두에서 JavaScript를 사용할 수 있는 풀스택 개발을 가능하게 한다.
  • 또한, 비동기 I/O를 처리하는 이벤트 기반 서버 환경으로, 대규모의 실시간 애플리케이션에서 강력한 성능을 발휘한다.

장단점

장점

  • 빠른 실행 속도: Node.js는 V8 엔진을 사용하여 매우 빠르게 JavaScript를 실행한다.
  • 비동기 I/O: 비동기적 처리 덕분에 서버는 높은 처리량을 유지할 수 있으며, 블로킹 없이 효율적으로 데이터를 처리한다.
  • 단일 언어 사용: 프론트엔드와 백엔드를 모두 JavaScript로 개발할 수 있어, 개발 속도와 생산성이 향상된다.
  • 확장성: 모듈화된 코드와 npm(Node.js 패키지 관리자)를 통해 다양한 라이브러리와 패키지를 손쉽게 통합할 수 있다.
  • 실시간 애플리케이션에 적합: WebSocket과 같은 양방향 통신이 필요한 실시간 애플리케이션에서 특히 강점을 보인다.

단점

  • CPU 집약적 작업에 부적합: Node.js는 단일 스레드 기반으로 동작하기 때문에 CPU를 많이 사용하는 작업에 비효율적이다.
  • 콜백 지옥: 비동기 프로그래밍 방식으로 인해 복잡한 비동기 로직을 다루다 보면 콜백 지옥에 빠질 수 있다.
  • 성숙도가 낮은 패키지: 일부 npm 패키지는 성숙도가 낮아, 신뢰할 수 없는 패키지를 사용할 위험이 있다.

주요 특징

비동기 이벤트 기반 모델

Node.js는 비동기 이벤트 기반 모델을 채택하여 논블로킹 I/O를 처리한다.
이는 요청을 처리하는 동안 스레드가 블로킹되지 않고, 다음 요청을 처리할 수 있게 하며,
이런 구조는 높은 성능을 필요로 하는 실시간 웹 애플리케이션에서 매우 유용하다.

비동기 예시:

const fs = require('fs');

// 비동기 방식으로 파일 읽기
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log("파일 읽기 요청 완료");

이 코드는 파일을 비동기적으로 읽기 때문에 console.log("파일 읽기 요청 완료")가 파일이 읽히기 전에 실행된다.

npm(Node Package Manager)

Node.js의 가장 큰 장점 중 하나는 npm을 통해 방대한 패키지를 손쉽게 설치하고 관리할 수 있다는 점이다.
전 세계 개발자들이 만든 모듈라이브러리를 npm을 통해 간편하게 사용할 수 있어 개발 속도를 높일 수 있다.

# Express 모듈 설치
npm install express

설치 및 환경 설정

1. Node.js 설치

Node.js를 사용하기 위해서는 먼저 Node.js를 설치해야 한다.
공식 Node.js 웹사이트에서 운영체제에 맞는 설치 파일을 다운로드한다.
설치 후에는 터미널이나 명령 프롬프트에서 nodenpm 명령어로 버전을 확인할 수 있다.

# Node.js 버전 확인
node -v

# npm 버전 확인
npm -v

2. Node.js 프로젝트 초기화

Node.js 프로젝트를 시작하려면 먼저 프로젝트 디렉토리를 생성하고 npm init을 사용하여 package.json 파일을 생성한다.

# 프로젝트 디렉토리 생성 및 이동
mkdir my-node-app
cd my-node-app

# npm을 사용해 프로젝트 초기화
npm init -y

이 명령어는 package.json 파일을 생성하며, 이 파일에 프로젝트의 메타 정보와 의존성 패키지 목록을 기록하게 된다.


3. Express 설치 및 간단한 서버 만들기

Node.js의 Express는 웹 서버를 쉽게 만들 수 있는 프레임워크다.

# Express 설치 
npm install express

설치 후 index.js 파일을 만들어 서버를 구성한다.

const express = require('express');
const app = express();

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

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

서버를 실행하려면 터미널에서 다음 명령어를 사용한다.

node index.js

이제 브라우저에서 http://localhost:3000에 접속하면 "Hello, World!" 메시지를 확인할 수 있다.


4. 환경 변수 관리

Node.js에서 데이터베이스 접속 정보나 API 키와 같은 민감한 정보를 환경 변수로 관리할 수 있다.
이를 위해 dotenv 패키지를 설치하고 사용한다.

# dotenv 설치
npm install dotenv

프로젝트 루트에 .env 파일을 만들고 환경 변수를 정의한다.

PORT=3000
DATABASE_URL=mongodb://localhost/mydb

그리고 dotenv를 통해 환경 변수를 로드하여 사용할 수 있다.

require('dotenv').config();

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

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

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

Node.js의 주요 사용 사례

1. 실시간 애플리케이션

Node.js는 WebSocket을 통한 양방향 통신을 효율적으로 처리할 수 있어, 채팅 애플리케이션이나 실시간 데이터 스트리밍 서비스에 적합하다.

2. API 서버

Node.js는 REST APIGraphQL API 서버를 구축하는 데 자주 사용됩니다. 빠른 응답 속도와 비동기 I/O 덕분에 효율적으로 API 요청을 처리할 수 있다.

3. 마이크로서비스 아키텍처

Node.js는 모듈화가 용이하여, 마이크로서비스 구조의 애플리케이션에서 자주 사용된다.

4. 스케일링

Node.js는 클러스터링을 통해 여러 CPU 코어를 활용한 확장이 가능하다.
이는 대규모 트래픽을 처리해야 하는 환경에 적합하다.


Node.js의 발전

Node.js는 2009년 처음 개발된 이후, JavaScript의 인기를 바탕으로 빠르게 성장했으며, Express.js, NestJS, Koa 등 다양한 프레임워크가 등장하면서, 서버 측 애플리케이션 개발의 표준 기술로 자리 잡았다.
현재는 웹 서버뿐만 아니라 마이크로서비스, IoT, 데스크톱 애플리케이션 등 다양한 분야에서 활용되고 있다.

profile
주니어개발자 Fox 입니다 🦊

0개의 댓글