feat: 세션 DB 이중 저장 — Redis 유실/재시작에도 로그인 유지
- auth_session 테이블에 세션 영속 백업(login 시 Redis+DB 동시 저장) - getSession: Redis 미스/장애 시 DB에서 복원 후 Redis 재수화(슬라이딩) - logout: Redis+DB 동시 삭제, 만료분 일별 정리(@Scheduled) - Redis 재시작으로 세션 전멸하던 주기적 로그아웃 해결 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -30,3 +30,20 @@ CREATE TABLE IF NOT EXISTS app_setting (
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
INSERT IGNORE INTO app_setting (id, signup_enabled) VALUES (1, 1);
|
||||
|
||||
-- ============================================================
|
||||
-- 세션 백업 (Redis 유실/재시작 대비 영속 저장). getSession 미스 시 DB에서 복원.
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS auth_session (
|
||||
token VARCHAR(64) NOT NULL COMMENT '세션 토큰',
|
||||
member_id BIGINT NOT NULL,
|
||||
login_id VARCHAR(50) NULL,
|
||||
name VARCHAR(100) NULL,
|
||||
role VARCHAR(20) NULL,
|
||||
provider VARCHAR(20) NULL,
|
||||
remember_me TINYINT(1) NOT NULL DEFAULT 0,
|
||||
expires_at DATETIME NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (token),
|
||||
KEY idx_auth_session_expires (expires_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
Reference in New Issue
Block a user