0265

BE

[Node.js] 백엔드 서버 환경 세팅 시 자주 설치하는 라이브러리 모음 (Node.js + Express 기준)

Node.js와 Express로 백엔드 서버를 처음 구성할 때, 매번 설치하게 되는 기본 라이브러리 세트가 있다.

이 라이브러리들은 프로젝트를 더 안전하고 편리하게 만들기 위해 필수적으로 쓰인다.

이번 글에서는, 실무에서 반복적으로 사용되는 핵심 라이브러리 몇가지언제, 왜 쓰는지까지 포함해 자세히 설명해보겠다.

1. dotenv

: 환경변수를 코드 밖 .env 파일에 분리하여 보안성과 유연성을 확보하는 도구

Node.js에서 백엔드를 구성하다 보면, 데이터베이스 비밀번호, API 키, 포트 번호처럼 코드에 직접 넣기엔 민감하거나 환경마다 달라져야 하는 정보가 생긴다.

이럴 때 .env 파일을 만들어 정보들을 따로 저장하고, dotenv 라이브러리를 통해 process.env.변수명으로 불러올 수 있다.

이 방식은 코드의 보안성을 높이고, 배포 환경에 따라 설정을 유연하게 바꿀 수 있게 해준다.

code
npm install dotenv
code
// .env
PORT=3000
JWT_SECRET=my_secret_key
code
require('dotenv').config();
console.log(process.env.PORT);  // 3000

2. cors

: 다른 도메인의 프론트엔드가 백엔드에 요청을 보낼 수 있게 허용하는 미들웨어

웹 보안 정책상, 브라우저는 출처(origin)가 다른 도메인 간의 요청을 기본적으로 차단한다.

예를 들어, localhost:3000(프론트엔드)에서 localhost:5000(백엔드)으로 API 요청을 보낼 경우, CORS 에러가 발생한다.

이런 상황에서 cors 미들웨어를 사용하면, 백엔드가 허용할 출처를 명시하고 안전하게 요청을 받을 수 있다.

code
npm install cors
JavaScript
const cors = require('cors');

app.use(cors({
  origin: 'http://localhost:3000',  // 허용할 프론트 주소
  credentials: true                 // 쿠키 포함 여부
}));
  • 특히 프론트와 백엔드를 로컬에서 따로 띄우는 개발 환경에서는 반드시 필요한 설정이다.

3. jsonwebtoken (jwt)

: 로그인 인증을 위한 토큰 발급 및 검증 기능 제공

로그인한 사용자가 매 요청마다 “누군지”를 증명하기 위해 사용하는 것이 바로 JWT(Json Web Token)이다.

jsonwebtoken은 이러한 토큰을 생성하고, 검증하는 기능을 제공하는 라이브러리다.

예를 들어 사용자가 로그인하면, 사용자 정보를 담은 토큰을 발급하고, 다음 요청부터는 해당 토큰을 헤더에 담아 보내도록 하여 인증을 유지할 수 있다.

code
npm install jsonwebtoken
JavaScript
const jwt = require('jsonwebtoken');

// 토큰 발급
const token = jwt.sign({ userId: 1 }, process.env.JWT_SECRET, { expiresIn: '1h' });

// 토큰 검증
const decoded = jwt.verify(token, process.env.JWT_SECRET);
console.log(decoded); // { userId: 1, iat: ..., exp: ... }
  • 세션 방식과 달리 서버가 상태를 저장하지 않아도 되므로, Stateless 인증 구현에 적합하다.

4. axios

: 서버 사이드에서도 사용할 수 있는 HTTP 클라이언트 라이브러리

axios는 프론트엔드에서도 자주 사용하는 라이브러리지만, Node.js에서도 외부 API 요청을 보내거나 마이크로서비스 간 통신할 때 자주 사용된다.

fetch와 달리 자동으로 JSON을 파싱해주고, 에러 핸들링도 구조화되어 있어 사용이 편리하다.

code
npm install axios
JavaScript
const axios = require('axios');

// GET 요청
const response = await axios.get('https://api.example.com/users');
console.log(response.data);
  • 예: 결제 API, 날씨 API, 다른 마이크로서비스 등과 통신할 때 유용

5. prisma + @prisma/client

: 자바스크립트/타입스크립트 기반의 ORM 도구

prisma는 데이터베이스와의 상호작용을 SQL 없이 코드로 처리할 수 있게 해주는 ORM(Object Relational Mapping) 도구다.

코드 기반으로 DB 구조를 정의하고, 마이그레이션을 통해 실제 DB에 적용할 수 있다.

  • prisma: CLI, 마이그레이션, 스키마 정의 용도

  • @prisma/client: 코드에서 실제 DB를 사용하는 라이브러리

code
npm install prisma --save-dev
npm install @prisma/client
npx prisma init
code
// schema.prisma
model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}
code
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

const users = await prisma.user.findMany();
  • Prisma의 장점은 자동 타입 생성과 간결한 쿼리문, 그리고 마이그레이션 관리에 있다.

6. helmet

: 보안 관련 HTTP 응답 헤더를 자동으로 설정해주는 미들웨어

Express 기반 Node.js 서버는 기본적으로 보안 헤더가 설정되어 있지 않아, 공격에 노출되기 쉽다.

예를 들어, 클릭재킹, MIME 스니핑, XSS 등의 취약점이 있다.

이럴 때 helmet을 사용하면 다양한 보안 관련 헤더들을 자동으로 추가해줘서, 서버의 기본 보안 수준을 한층 끌어올릴 수 있다.

기본 설정만으로도 충분한 보호가 가능하지만, 필요한 경우 헤더 정책을 커스터마이징할 수도 있다.

code
npm install helmet
code
const helmet = require('helmet');
app.use(helmet()); // 모든 보안 헤더 적용

// 일부 옵션 비활성화 예시
app.use(helmet({
  contentSecurityPolicy: false
}));

7. morgan

: HTTP 요청 정보를 로그로 출력해주는 미들웨어

백엔드 개발 중에는 누가 어떤 경로에 요청을 보냈고, 응답은 몇 초 걸렸으며, 어떤 상태 코드가 나왔는지를 확인하고 싶을 때가 많다.

이럴 때 morgan은 요청에 대한 정보를 실시간으로 로그에 출력해주어

디버깅과 트래픽 분석에 매우 유용하다.

개발 환경에서는 dev 모드를 사용하고, 운영 환경에서는 combined로 더 자세한 로그를 남길 수 있다.

code
npm install morgan
code
const morgan = require('morgan');
app.use(morgan('dev'));       // 개발용 로그
app.use(morgan('combined'));  // 운영 환경 로그

모드

설명

'dev'

간단하고 컬러풀한 출력 (개발용)

'combined'

Apache 형식 로그 (운영 서버에 적합)

'common'

표준 로그 형식

'short', 'tiny'

더 간결한 출력

정리 요약

라이브러리

주요 역할

설명

dotenv

환경 변수 관리

.env 파일로 민감 정보 분리

cors

CORS 허용

프론트와 백 간 도메인 차이 해결

jsonwebtoken

인증

로그인 후 토큰 발급/검증

axios

HTTP 요청

API 호출, 외부 통신

prisma

ORM 툴

DB 스키마 및 마이그레이션 관리

@prisma/client

DB 클라이언트

실제 코드에서 DB와 통신

helmet

보안 헤더 설정

보안 관련 HTTP 헤더 자동 설정 (XSS, 클릭재킹 등 방어)

morgan

요청 로깅

서버로 들어오는 요청을 콘솔에 출력 (로그 분석 및 디버깅용)

마무리

이 포스팅에서 소개한 라이브러리들은, Node.js로 백엔드 서버를 구축할 때 거의 매번 사용하는 기본 세트라고 할 수 있다.

단순히 설치만 따라 하기보다는, “왜 필요한가?”, “언제 쓰는가?”, “무엇을 편리하게 해주는가?”를 이해하고 사용하는 것이 중요하다.

이해하면서 세팅을 하다 보면, 백엔드 개발이 단순하고 재밌게 느껴질 것이다 ?