데이터베이스로 사용자 정보를 안전하게 관리하자!
- express: 서버 프레임워크
- express-session: 세션 관리
- sqlite3: SQLite 데이터베이스
- body-parser: form 데이터 읽기
1. 패키지 설치
npm install express express-session body-parser sqlite3
2. 프로젝트 구조
express-login-sqlite/
├── index.js
└── db.sqlite (자동 생성됨)
3. 전체 코드 (index.js)
const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const sqlite3 = require('sqlite3').verbose();
const app = express();
const PORT = 3000;
// 미들웨어
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'sqliteLoginSecret',
resave: false,
saveUninitialized: true
}));
// DB 연결
const db = new sqlite3.Database('./db.sqlite', (err) => {
if (err) return console.error(err.message);
console.log('SQLite 데이터베이스 연결됨');
});
// 사용자 테이블 생성 (없으면)
db.run(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT
)
`);
// 기본 사용자 추가 (처음 한 번만 실행하면 됨)
db.get(`SELECT COUNT(*) AS count FROM users WHERE username = ?`, ['admin'], (err, row) => {
if (row.count === 0) {
db.run(`INSERT INTO users (username, password) VALUES (?, ?)`, ['admin', '1234']);
console.log('기본 사용자 admin 추가 완료');
}
});
// 로그인 폼
app.get('/login', (req, res) => {
if (req.session.user) return res.redirect('/mypage');
res.send(`
<h2>로그인</h2>
<form method="post" action="/login">
<input type="text" name="username" placeholder="아이디" required />
<input type="password" name="password" placeholder="비밀번호" required />
<button type="submit">로그인</button>
</form>
`);
});
// 로그인 처리
app.post('/login', (req, res) => {
const { username, password } = req.body;
db.get(`SELECT * FROM users WHERE username = ? AND password = ?`, [username, password], (err, user) => {
if (err) return res.send('오류 발생');
if (user) {
req.session.user = { id: user.id, username: user.username };
res.redirect('/mypage');
} else {
res.send('<h3>❌ 로그인 실패! 아이디 또는 비밀번호 오류</h3>');
}
});
});
// 마이페이지
app.get('/mypage', (req, res) => {
if (!req.session.user) return res.redirect('/login');
res.send(`
<h2>마이페이지</h2>
<p>${req.session.user.username}님, 환영합니다</p>
<a href="/logout">로그아웃</a>
`);
});
// 로그아웃
app.get('/logout', (req, res) => {
req.session.destroy(() => {
res.redirect('/login');
});
});
// 서버 시작
app.listen(PORT, () => {
console.log(`서버 실행 중: http://localhost:${PORT}`);
});
테스트 계정
- 아이디: admin
- 비밀번호: 1234
(자동으로 DB에 한 번만 생성됨)
SQLite 데이터 확인 (옵션)
sqlite3 db.sqlite
sqlite> SELECT * FROM users;
코드 실행
- cmd창에서 node index.js
- 브라우저에서 "localhost:3000/login" 페이지 접속
- 'admin', '1234'으로 접속시 아래 페이지가 보입니다.

확장 팁
- bcrypt로 비밀번호 암호화
- 회원가입 페이지(/register) 추가
- 로그인 실패 시 시도 횟수 제한
- SQLite를 MySQL, PostgreSQL 등으로 교체도 가능
'IT속으로' 카테고리의 다른 글
| Node.js + MySQL + bcrypt로 회원가입 & 로그인 만들기 (0) | 2025.04.06 |
|---|---|
| Node.js + Express + MySQL로 로그인 시스템 만들기 (0) | 2025.04.06 |
| Node.js Express + JSON 파일을 활용한 로그인 기능 (0) | 2025.04.06 |
| node.js Express + Session 으로 로그인 상태 유지하기 (1) | 2025.04.06 |
| Node.js + Express로 로그인 기능 만들기 (0) | 2025.04.04 |
댓글