17강. Session을 이용한 로그인 상태 유지
이번 강의에서는 Express Session을 사용하여 로그인 상태를 유지하는 방법을 배웁니다.
목표: 로그인 후에도 사용자의 인증 상태를 유지하고, 로그인한 사용자만 접근 가능한 페이지를 만들 수 있습니다.
1. Session이란?
Session은 사용자의 로그인 정보를 서버에 저장하는 방식입니다.
동작 과정
사용자 로그인
↓
아이디 / 비밀번호 확인
↓
Session 생성
↓
브라우저에 Session ID 전달
↓
이후 요청마다 Session ID 전송
↓
서버가 로그인 여부 확인
↓
로그인 유지
2. Session 설치
터미널에서 설치합니다.
npm install express-session
또는
npm i express-session
3. Session 등록
const express = require("express");
const session = require("express-session");
const app = express();
app.use(express.json());
app.use(session({
secret:"node123",
resave:false,
saveUninitialized:false
}));
4. Session 옵션
옵션 설명
secret 세션 암호화 키
resave 변경이 없어도 저장 여부
saveUninitialized 빈 세션 저장 여부
실무에서는 secret을 .env 파일에서 관리합니다.
5. 로그인 성공 시 Session 저장
app.post("/login",(req,res)=>{
const { userid,password } = req.body;
const sql =
"SELECT * FROM member WHERE userid=?";
db.query(sql,[userid],(err,result)=>{
if(result.length===0){
return res.send("아이디 없음");
}
if(result[0].password!==password){
return res.send("비밀번호 오류");
}
req.session.user = {
id:result[0].id,
userid:result[0].userid,
name:result[0].name
};
res.send("로그인 성공");
});
});
6. Session 확인
app.get("/session",(req,res)=>{
res.json(req.session);
});
브라우저
http://localhost:3000/session
예시
{
"user":{
"id":1,
"userid":"admin",
"name":"커사맨"
}
}
7. 로그인 여부 확인
app.get("/mypage",(req,res)=>{
if(!req.session.user){
return res.send("로그인이 필요합니다.");
}
res.send(
`${req.session.user.name}님 환영합니다.`
);
});
8. 로그아웃
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("로그아웃 완료");
});
});
9. 로그인 전후 흐름
로그인 전
↓
/mypage
↓
로그인이 필요합니다.
-------------------------
로그인 후
↓
/mypage
↓
커사맨님 환영합니다.
10. 인증 미들웨어 만들기
function auth(req,res,next){
if(!req.session.user){
return res.status(401).send("로그인 필요");
}
next();
}
11. 인증 미들웨어 사용
app.get("/admin",auth,(req,res)=>{
res.send("관리자 페이지");
});
실행 순서
브라우저
↓
auth()
↓
Session 확인
↓
통과
↓
관리자 페이지
12. 로그인 사용자 정보
app.get("/profile",auth,(req,res)=>{
res.json(req.session.user);
});
결과
{
"id":1,
"userid":"admin",
"name":"커사맨"
}
13. 관리자 권한 확인
function adminCheck(req,res,next){
if(
req.session.user.userid !== "admin"
){
return res.send("접근 불가");
}
next();
}
사용
app.get(
"/admin",
auth,
adminCheck,
(req,res)=>{
res.send("관리자");
});
14. Session 흐름
회원가입
↓
로그인
↓
Session 생성
↓
페이지 이동
↓
Session 확인
↓
로그인 유지
↓
로그아웃
↓
Session 삭제
15. 실습 1
로그인
POST
/login
16. 실습 2
마이페이지
GET
/mypage
17. 실습 3
Session 확인
GET
/session
18. 실습 4
로그아웃
GET
/logout
19. 실무 프로젝트 구조
project
│
├── app.js
│
├── config
│
├── middleware
│ auth.js
│ admin.js
│
├── routes
│
├── controllers
│
├── models
│
├── public
│
└── views
실무에서는 인증 미들웨어를 middleware 폴더로 분리하여 관리합니다.
20. 이번 강의 핵심 정리
기능 설명
express-session 세션 관리
req.session 세션 객체
req.session.user 로그인 사용자 정보
req.session.destroy() 로그아웃
auth() 로그인 검사
adminCheck() 관리자 권한 검사
실무 팁
학습 단계에서는 MemoryStore(기본 세션 저장소)를 사용할 수 있지만, 실제 서비스에서는 기본 저장소를 사용하지 않습니다.
주로 사용하는 세션 저장소는 다음과 같습니다.
Redis: 가장 많이 사용되는 세션 저장소
MySQL: 데이터베이스 기반 저장
MongoDB: NoSQL 기반 저장
또한, 비밀번호는 반드시 bcrypt로 암호화하고, 세션 쿠키에는 httpOnly, secure, sameSite 등의 보안 옵션을 적용하는 것이 일반적입니다.
실습 미션
다음 기능을 구현해 보세요.
✅ 회원가입
✅ 로그인
✅ 세션 생성
✅ 로그인 여부 확인
✅ 마이페이지
✅ 관리자 페이지
✅ 로그아웃
✅ 인증 미들웨어(auth) 분리
이번 강의에서는 Express Session을 사용하여 로그인 상태를 유지하는 방법을 배웁니다.
목표: 로그인 후에도 사용자의 인증 상태를 유지하고, 로그인한 사용자만 접근 가능한 페이지를 만들 수 있습니다.
1. Session이란?
Session은 사용자의 로그인 정보를 서버에 저장하는 방식입니다.
동작 과정
사용자 로그인
↓
아이디 / 비밀번호 확인
↓
Session 생성
↓
브라우저에 Session ID 전달
↓
이후 요청마다 Session ID 전송
↓
서버가 로그인 여부 확인
↓
로그인 유지
2. Session 설치
터미널에서 설치합니다.
npm install express-session
또는
npm i express-session
3. Session 등록
const express = require("express");
const session = require("express-session");
const app = express();
app.use(express.json());
app.use(session({
secret:"node123",
resave:false,
saveUninitialized:false
}));
4. Session 옵션
옵션 설명
secret 세션 암호화 키
resave 변경이 없어도 저장 여부
saveUninitialized 빈 세션 저장 여부
실무에서는 secret을 .env 파일에서 관리합니다.
5. 로그인 성공 시 Session 저장
app.post("/login",(req,res)=>{
const { userid,password } = req.body;
const sql =
"SELECT * FROM member WHERE userid=?";
db.query(sql,[userid],(err,result)=>{
if(result.length===0){
return res.send("아이디 없음");
}
if(result[0].password!==password){
return res.send("비밀번호 오류");
}
req.session.user = {
id:result[0].id,
userid:result[0].userid,
name:result[0].name
};
res.send("로그인 성공");
});
});
6. Session 확인
app.get("/session",(req,res)=>{
res.json(req.session);
});
브라우저
http://localhost:3000/session
예시
{
"user":{
"id":1,
"userid":"admin",
"name":"커사맨"
}
}
7. 로그인 여부 확인
app.get("/mypage",(req,res)=>{
if(!req.session.user){
return res.send("로그인이 필요합니다.");
}
res.send(
`${req.session.user.name}님 환영합니다.`
);
});
8. 로그아웃
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("로그아웃 완료");
});
});
9. 로그인 전후 흐름
로그인 전
↓
/mypage
↓
로그인이 필요합니다.
-------------------------
로그인 후
↓
/mypage
↓
커사맨님 환영합니다.
10. 인증 미들웨어 만들기
function auth(req,res,next){
if(!req.session.user){
return res.status(401).send("로그인 필요");
}
next();
}
11. 인증 미들웨어 사용
app.get("/admin",auth,(req,res)=>{
res.send("관리자 페이지");
});
실행 순서
브라우저
↓
auth()
↓
Session 확인
↓
통과
↓
관리자 페이지
12. 로그인 사용자 정보
app.get("/profile",auth,(req,res)=>{
res.json(req.session.user);
});
결과
{
"id":1,
"userid":"admin",
"name":"커사맨"
}
13. 관리자 권한 확인
function adminCheck(req,res,next){
if(
req.session.user.userid !== "admin"
){
return res.send("접근 불가");
}
next();
}
사용
app.get(
"/admin",
auth,
adminCheck,
(req,res)=>{
res.send("관리자");
});
14. Session 흐름
회원가입
↓
로그인
↓
Session 생성
↓
페이지 이동
↓
Session 확인
↓
로그인 유지
↓
로그아웃
↓
Session 삭제
15. 실습 1
로그인
POST
/login
16. 실습 2
마이페이지
GET
/mypage
17. 실습 3
Session 확인
GET
/session
18. 실습 4
로그아웃
GET
/logout
19. 실무 프로젝트 구조
project
│
├── app.js
│
├── config
│
├── middleware
│ auth.js
│ admin.js
│
├── routes
│
├── controllers
│
├── models
│
├── public
│
└── views
실무에서는 인증 미들웨어를 middleware 폴더로 분리하여 관리합니다.
20. 이번 강의 핵심 정리
기능 설명
express-session 세션 관리
req.session 세션 객체
req.session.user 로그인 사용자 정보
req.session.destroy() 로그아웃
auth() 로그인 검사
adminCheck() 관리자 권한 검사
실무 팁
학습 단계에서는 MemoryStore(기본 세션 저장소)를 사용할 수 있지만, 실제 서비스에서는 기본 저장소를 사용하지 않습니다.
주로 사용하는 세션 저장소는 다음과 같습니다.
Redis: 가장 많이 사용되는 세션 저장소
MySQL: 데이터베이스 기반 저장
MongoDB: NoSQL 기반 저장
또한, 비밀번호는 반드시 bcrypt로 암호화하고, 세션 쿠키에는 httpOnly, secure, sameSite 등의 보안 옵션을 적용하는 것이 일반적입니다.
실습 미션
다음 기능을 구현해 보세요.
✅ 회원가입
✅ 로그인
✅ 세션 생성
✅ 로그인 여부 확인
✅ 마이페이지
✅ 관리자 페이지
✅ 로그아웃
✅ 인증 미들웨어(auth) 분리
#17강. Session을 이용한 로그인 상태 유지