| 구분 | 기본 Spring Security(Form Login) | Phoenix 프로젝트(SecurityConfig) | 차이 요약 |
|---|---|---|---|
| 인증 방식 | 세션(Session) 기반 | 세션 기반 + JWT 구조 지원(비활성화) | JWT 전환 고려한 구조 |
| 로그인 처리 | 내장 로그인 폼(/login) | React에서 POST /members/login 요청 | 프론트-백 분리형 REST 구조 |
| 세션 정책 | ALWAYS (항상 생성) | IF_REQUIRED (필요할 때만 생성) | 최소 세션 생성으로 효율성↑ |
| CSRF | 기본 활성화 | .csrf().disable() | REST API는 세션 토큰 불필요 |
| HTTP Basic 인증 | 활성화 (Authorization: Basic) | .httpBasic().disable() | 보안상 Base64 인증 제거 |
| 폼 로그인(FormLogin) | 활성화 | .formLogin().disable() | React UI에서 직접 로그인 |
| 로그아웃 | /logout 자동 처리 | .logout().disable() | 프론트단 쿠키/세션 직접 관리 |
| JWT 필터 | 없음 | JwtAuthenticationFilter 존재 (주석 처리) | 구조상 JWT 쉽게 추가 가능 |
| OAuth2 로그인 | 기본 Provider 설정만 | CustomOAuth2UserService + OAuth2SuccessHandler | 소셜 로그인 로직 커스텀 |
| 응답 방식 | HTML 리다이렉트 | JSON ({success, message}) 응답 | SPA 환경에 맞춤형 응답 |
| CORS 정책 | 기본 차단 | http://localhost:5173 허용 | React 개발 서버 접근 허용 |
| 예외 처리 | 기본 에러 페이지 | JSON 형태로 직접 응답 (401/403) | REST API 표준화 |
| 세션 저장 위치 | JSESSIONID (브라우저 쿠키) | 동일, 단 세션 최소화 | JWT 전환 대비 유지 구조 |
| PasswordEncoder | 기본 DelegatingPasswordEncoder | BCryptPasswordEncoder 명시 사용 | 암호화 강도↑ |
| URL 접근 제어 | 기본 /login, /logout, /error | /members/**, /reserve/**, /senior/** 등 세분화 | 도메인 단위 접근 제어 |
Phoenix는 “기본 폼 로그인 기반 시큐리티”를 완전히 걷어내고,
SPA(React) + REST API + 세션 기반 인증 구조로 재설계한 버전이다.
✅ 주요 특징 요약
Phoenix 프로젝트의 Security 설정은
Spring 기본 설정의 “폼 로그인-리다이렉트 중심” 구조를
프론트-백 완전 분리형 REST 인증 구조로 전환한 사례다.
즉,
기본 시큐리티의 목적이 서버-HTML 렌더링 보안이라면,
Phoenix는 API 통신 중심의 인증 흐름에 맞게
CORS, 예외 응답, 세션 정책, 로그인 처리 전부 직접 커스터마이징한 구조다.