✅ JWT 기반 인증 기능 및 단위 테스트 정리
🔹 구현된 주요 기능
1️⃣ 사용자 인증 & JWT 발급
- AuthController
- POST /auth/login
→ 로그인 요청 시, 유효한 사용자면 JWT 토큰 발급 - POST /auth/register
→ 신규 사용자 회원가입
- POST /auth/login
2️⃣ JWT 토큰 생성 & 검증
- JwtUtil
- generateToken(username)
→ HMAC SHA 키 기반 JWT 토큰 생성 - extractUsername(token)
→ 토큰에서 사용자 정보(Username) 추출 - isTokenExpired(token)
→ 토큰 만료 여부 확인 (예외 발생 방지) - validateToken(token, username)
→ 토큰 유효성 검증 (사용자명 일치 여부 포함)
- generateToken(username)
3️⃣ Spring Security & JWT 적용
- SecurityConfig
- SecurityFilterChain
→ Spring Security 설정을 통해 JWT 기반 인증 필터 적용 - JwtAuthenticationFilter
→ JWT 검증 및 인증 필터 추가
- SecurityFilterChain
🔹 작성된 단위 테스트 & 검증 항목
🔹 JwtUtilTest (JWT 유틸리티 클래스 테스트)
✅ JWT 생성 & 유효성 검증
- testGenerateAndValidateToken()
→ JWT 생성 후 유효성 검증 (validateToken() 정상 동작 확인)
✅ 만료된 토큰 검증
- testExpiredToken()
→ 만료된 토큰을 생성한 후, isTokenExpired() 검증
→ Clock Skew 설정으로 만료 판별 문제 해결
✅ JWT Claims(사용자 정보) 추출
- testExtractClaims()
→ 토큰에서 사용자 정보가 정상적으로 추출되는지 확인
🔹 AuthControllerTest (JWT 인증 API 테스트)
✅ 회원가입 기능 테스트
- testRegisterUser()
→ 신규 사용자 회원가입 후, "회원가입이 완료되었습니다." 응답 확인
✅ 로그인 후 JWT 토큰 반환 테스트
- testLogin()
→ 로그인 후 응답에서 "token" 필드가 존재하는지 확인
→ 실제 JWT 토큰이 발급되는지 체크
✅ 보안 문제 해결 및 MockBean 충돌 방지
- @WithMockUser 사용하여 Security 인증 우회
- @Transactional 추가하여 테스트 데이터 롤백
- @BeforeEach에서 사용자 미리 등록 → 회원가입 없이 로그인 테스트 가능