BE
[Node.js] 백엔드 서버 환경 세팅 시 자주 설치하는 라이브러리 모음 (Node.js + Express 기준)
Node.js와 Express로 백엔드 서버를 처음 구성할 때, 매번 설치하게 되는 기본 라이브러리 세트가 있다.
이 라이브러리들은 프로젝트를 더 안전하고 편리하게 만들기 위해 필수적으로 쓰인다.
이번 글에서는, 실무에서 반복적으로 사용되는 핵심 라이브러리 몇가지를 언제, 왜 쓰는지까지 포함해 자세히 설명해보겠다.
1. dotenv
: 환경변수를 코드 밖 .env 파일에 분리하여 보안성과 유연성을 확보하는 도구
Node.js에서 백엔드를 구성하다 보면, 데이터베이스 비밀번호, API 키, 포트 번호처럼 코드에 직접 넣기엔 민감하거나 환경마다 달라져야 하는 정보가 생긴다.
이럴 때 .env 파일을 만들어 정보들을 따로 저장하고, dotenv 라이브러리를 통해 process.env.변수명으로 불러올 수 있다.
이 방식은 코드의 보안성을 높이고, 배포 환경에 따라 설정을 유연하게 바꿀 수 있게 해준다.
npm install dotenv// .env
PORT=3000
JWT_SECRET=my_secret_keyrequire('dotenv').config();
console.log(process.env.PORT); // 30002. cors
: 다른 도메인의 프론트엔드가 백엔드에 요청을 보낼 수 있게 허용하는 미들웨어
웹 보안 정책상, 브라우저는 출처(origin)가 다른 도메인 간의 요청을 기본적으로 차단한다.
예를 들어, localhost:3000(프론트엔드)에서 localhost:5000(백엔드)으로 API 요청을 보낼 경우, CORS 에러가 발생한다.
이런 상황에서 cors 미들웨어를 사용하면, 백엔드가 허용할 출처를 명시하고 안전하게 요청을 받을 수 있다.
npm install corsconst cors = require('cors');
app.use(cors({
origin: 'http://localhost:3000', // 허용할 프론트 주소
credentials: true // 쿠키 포함 여부
}));특히 프론트와 백엔드를 로컬에서 따로 띄우는 개발 환경에서는 반드시 필요한 설정이다.
3. jsonwebtoken (jwt)
: 로그인 인증을 위한 토큰 발급 및 검증 기능 제공
로그인한 사용자가 매 요청마다 “누군지”를 증명하기 위해 사용하는 것이 바로 JWT(Json Web Token)이다.
jsonwebtoken은 이러한 토큰을 생성하고, 검증하는 기능을 제공하는 라이브러리다.
예를 들어 사용자가 로그인하면, 사용자 정보를 담은 토큰을 발급하고, 다음 요청부터는 해당 토큰을 헤더에 담아 보내도록 하여 인증을 유지할 수 있다.
npm install jsonwebtokenconst 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을 파싱해주고, 에러 핸들링도 구조화되어 있어 사용이 편리하다.
npm install axiosconst 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를 사용하는 라이브러리
npm install prisma --save-dev
npm install @prisma/client
npx prisma init// schema.prisma
model User {
id Int @id @default(autoincrement())
name String
email String @unique
}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을 사용하면 다양한 보안 관련 헤더들을 자동으로 추가해줘서, 서버의 기본 보안 수준을 한층 끌어올릴 수 있다.
기본 설정만으로도 충분한 보호가 가능하지만, 필요한 경우 헤더 정책을 커스터마이징할 수도 있다.
npm install helmetconst helmet = require('helmet');
app.use(helmet()); // 모든 보안 헤더 적용
// 일부 옵션 비활성화 예시
app.use(helmet({
contentSecurityPolicy: false
}));7. morgan
: HTTP 요청 정보를 로그로 출력해주는 미들웨어
백엔드 개발 중에는 누가 어떤 경로에 요청을 보냈고, 응답은 몇 초 걸렸으며, 어떤 상태 코드가 나왔는지를 확인하고 싶을 때가 많다.
이럴 때 morgan은 요청에 대한 정보를 실시간으로 로그에 출력해주어
디버깅과 트래픽 분석에 매우 유용하다.
개발 환경에서는 dev 모드를 사용하고, 운영 환경에서는 combined로 더 자세한 로그를 남길 수 있다.
npm install morganconst 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로 백엔드 서버를 구축할 때 거의 매번 사용하는 기본 세트라고 할 수 있다.
단순히 설치만 따라 하기보다는, “왜 필요한가?”, “언제 쓰는가?”, “무엇을 편리하게 해주는가?”를 이해하고 사용하는 것이 중요하다.
이해하면서 세팅을 하다 보면, 백엔드 개발이 단순하고 재밌게 느껴질 것이다 ?