🚪 로그아웃 처리와 인증 흐름 마무리
로그인 기능을 구현했다면, 사용자가 명확하게 로그아웃할 수 있도록 처리해야 합니다.
이번 글에서는 Spring Security의 로그아웃 설정, 세션 종료, 리디렉션 처리 등을 깔끔하게 정리합니다.
✅ 1. 기본 로그아웃 흐름
Spring Security는 별도 설정 없이도 기본적으로 다음 경로로 로그아웃 처리를 지원합니다.
- 로그아웃 요청 URL: /logout
- 로그아웃 성공 시: /login?logout
- 세션 무효화: 자동 처리됨 (HttpSession.invalidate())
✅ 2. 로그아웃 설정 예시
SecurityConfig.java 내 설정 예시:
.logout(logout -> logout
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
)
🔍 주요 옵션 설명
옵션 | 설명 |
logoutUrl | 로그아웃을 처리할 경로 지정 |
logoutSuccessUrl | 로그아웃 후 이동할 경로 |
invalidateHttpSession(true) | 세션 무효화 (로그인 정보 제거) |
deleteCookies("JSESSIONID") | 브라우저 쿠키 삭제 (선택) |
✅ 3. 로그아웃 링크 만들기
<a href="/logout">로그아웃</a>
기본 GET 방식은 허용되지 않기 때문에, 아래처럼 POST 또는 CSRF 토큰 포함한 폼 방식으로 로그아웃 요청을 보내야 함
<form th:action="@{/logout}" method="post">
<button type="submit">로그아웃</button>
</form>
✅ 4. 로그인 유지(자동 로그인) 설정
로그인 유지(remember-me) 기능을 사용하고 싶다면 다음과 같은 설정을 추가할 수 있습니다:
.rememberMe(remember -> remember
.key("my-remember-key")
.rememberMeParameter("remember-me")
.tokenValiditySeconds(604800) // 7일
)
- HTML 폼에 체크박스 추가:
<input type="checkbox" name="remember-me"> 로그인 유지
- 이 설정을 통해 브라우저를 닫아도 쿠키를 통해 로그인 상태 유지 가능
✅ 5. 전체 인증 흐름 요약
단계 | 설명 |
회원가입 | 사용자 정보 DB 저장 (비밀번호 암호화) |
로그인 | 세션 기반 인증 / OAuth2 소셜 로그인 |
인가 처리 | 권한(Role)에 따라 접근 제어 |
사용자 정보 사용 | 마이페이지, 프로필 수정 |
로그아웃 | 세션 제거 및 리디렉션 |
자동 로그인 (선택) | remember-me 쿠키로 로그인 유지 |
✅ 마무리
지금까지 Spring Security를 사용하여 회원가입, 로그인, 권한 제어, 소셜 로그인, 로그아웃까지 전체 인증 흐름을 구성해봤습니다.
이 시리즈를 통해 보안이 중요한 웹 애플리케이션에서 사용자 인증을 안전하고 유연하게 구현하는 방법을 단계적으로 배울 수 있었습니다.
👉 다음(마지막) 글에서는 "실무 팁, 트러블슈팅, 추천 설정 모음" 을 정리합니다.