Node.js에서 Express와 Passport를 활용한 인증 구현
최근 웹 서버개발에 있어 사용자의 인증 시스템은 필수적이라고 할 수 있습니다. 이 포스트에서는 Node.js 환경에서 Express 프레임워크와 Passport 미들웨어를 통해 인증 시스템을 구축하는 방법을 살펴보겠습니다. Passport는 다양한 인증 전략을 지원하는 군더더기 없는 모듈로, 특히 로컬 인증을 구현하는 데 유용합니다.

환경 설정
우선, 작업에 앞서 Node.js는 설치되어 있어야 하며, MySQL 데이터베이스도 필요합니다. MySQL을 사용하지 않으실 경우에는 메모리 저장소나 파일 저장소를 이용할 수도 있습니다. 이 경우, 세션 저장소 설정만 변경하면 되므로 쉽게 대체가 가능합니다.
아래의 단계를 따라 폴더를 설정하고 필요한 모듈을 설치해 보겠습니다.
- 폴더 생성:
mkdir passport-practice
- 폴더 진입:
cd passport-practice
- 패키지.json 생성:
npm init -y
- 필요한 모듈 설치:
npm install http express express-session express-mysql-session body-parser passport passport-local
파일 및 폴더 구조
프로젝트 구조는 다음과 같이 설정할 수 있습니다:
📦passport-practice
┣ 📂node_modules
┣ 📂webpage
┃ ┣ 📜login.html
┃ ┗ 📜main.html
┣ 📜index.js
┣ 📜package-lock.json
┗ 📜package.json
로그인 및 메인 페이지 구현
로그인 페이지는 사용자가 ID와 비밀번호를 입력할 수 있는 폼을 제공합니다. 사용자가 정보를 입력한 후 제출 버튼을 클릭하면 서버로 로그인 요청이 전송됩니다.
로그인 성공 시 보여지는 메인 페이지는 로그아웃 링크를 제공합니다:
서버 구현
이제 본격적으로 서버를 구현해 보겠습니다. 아래 코드는 Express 서버와 Passport 미들웨어 초기화를 포함한 서버 설정을 다룹니다.
const http = require("http");
const express = require("express");
const bodyParser = require("body-parser");
const session = require("express-session");
const MySQLStore = require("express-mysql-session")(session);
const fs = require("fs");
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const app = express();
const server = http.createServer(app);
const PORT = 8080;
const options = {
host: "localhost",
port: 3306,
user: "root",
password: "1q2w3e4r!@",
database: "session_test",
};
const sessionStore = new MySQLStore(options);
app.use(session({
secret: "secret key",
store: sessionStore,
resave: false,
saveUninitialized: false
}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());
로그인 성공 시 사용자의 ID를 세션에 저장하고, 페이지 요청 시 사용자 정보를 가져오는 함수 설정도 필요합니다.
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, id);
});
로컬 로그인 전략 설정
다음은 로컬 전략을 설정하는 단계입니다. 입력된 ID와 비밀번호가 데이터베이스의 정보와 일치하는지 확인하는 로직을 구현해 보겠습니다.
passport.use(new LocalStrategy({
usernameField: "id",
passwordField: "pw"
}, function(username, password, done) {
// 로그인 로직 구현
}));
라우팅 설정
이제 라우팅을 설정하여 로그인 요청 처리 및 메인 페이지로의 이동을 구현하겠습니다.
app.post("/login", passport.authenticate("local", {
successRedirect: "/",
failureRedirect: "/login"
}));
app.get("/login", (req, res) => {
if (req.user) return res.redirect("/");
fs.readFile("./webpage/login.html", (error, data) => {
if (error) {
console.log(error);
return res.status(500).send("
500 error
");
}
res.writeHead(200, { "Content-Type": "text/html" });
res.end(data);
});
});
app.get("/", (req, res) => {
if (!req.user) return res.redirect("/login");
fs.readFile("./webpage/main.html", (error, data) => {
if (error) {
console.log(error);
return res.status(500).send("
500 error
");
}
res.writeHead(200, { "Content-Type": "text/html" });
res.end(data);
});
});
로그아웃 처리
마지막으로 로그아웃 기능을 추가하여 사용자가 로그아웃할 수 있도록 설정합니다.
app.get("/logout", (req, res) => {
req.logout();
res.redirect("/login");
});

결론
이 포스팅을 통해 Node.js 환경에서 Express와 Passport를 이용한 인증 시스템 구현 방법을 살펴보았습니다. Passport는 여러 전략을 지원하는 유연한 미들웨어로, 특히 로컬 인증을 필요로 하는 웹 애플리케이션에서 유용합니다. 이를 통해 안전하고 신뢰할 수 있는 사용자 인증 시스템을 구축할 수 있습니다.
앞으로도 다양한 인증 방식을 공부하며 더욱 깊이 있는 웹 개발 경험을 쌓아가면 좋겠습니다.
복리 계산기 활용법과 이자 계산법
복리 계산기의 이해와 활용복리 계산기는 투자자들에게 필수적인 도구로, 이자를 포함한 자산의 성장을 예측하는 데에 유용합니다. 특히 주식, 가상 화폐 및 기타 자산 투자 시, 투자금과 이자
kk7vbx.tistory.com
자주 묻는 질문 FAQ
Node.js와 Passport를 사용하여 인증 시스템을 구축하는 방법은 무엇인가요?
Node.js 환경에서 Express와 Passport 미들웨어를 조합하여 사용자 인증 시스템을 손쉽게 구현할 수 있습니다. 필요한 모듈을 설치한 후, 세션 관리와 인증 전략을 설정하는 과정을 통해 인증 기능을 추가할 수 있습니다.
MySQL 대신 다른 저장소를 사용할 수 있나요?
네, MySQL 외에도 메모리 저장소나 파일 기반 저장소를 사용할 수 있습니다. 이 경우 세션 저장소 설정만 조정하면 간편하게 대체가 가능합니다.
로그인 기능은 어떻게 구현하나요?
로그인 기능은 사용자가 입력한 아이디와 비밀번호를 서버로 전송하도록 폼을 구성한 후, Passport의 로컬 전략을 통해 데이터베이스와 비교하여 인증을 수행하는 방식으로 구축할 수 있습니다.
로그아웃 기능은 어떻게 설정하나요?
로그아웃 기능은 사용자가 요청을 보내면, 세션에서 로그아웃 처리를 하고 로그인 페이지로 리다이렉트하는 방식으로 간단히 구현할 수 있습니다.
댓글