1차 주문
Spring Security로 비밀번호 암호화, 인증 및 권한 부여를 시행합니다.
2. 배운 교훈
2.1. JWT RefreshToken 및 AccessToken
인증 시 JWT RefreshToken과 AccessToken을 발급하는 방식을 적용했습니다. RefreshToken은 DB에 저장되며 AccessToken이 만료되면 RefreshToken으로 AccessToken을 재발급하는 기능이 구현됩니다. 현재 AccessToken이 만료되면 401 및 Expired 오류가 클라이언트에 보고되지만 이 경우 클라이언트는 API를 사용하여 RefreshToken을 통해 AccessToken을 재발급해야 하므로 번거롭습니다. 이 문제는 RefreshToken을 세션에 삽입하고 AccessToken이 만료될 때 세션에서 RefreshToken을 검색하여 AccessToken을 재발행하는 필터를 생성하여 해결할 수 있습니다.
2.2. 주석 기반 권한 부여 처리
이전에는 SecurityConfig 구성 파일 antMatcher.hasRole과 같은 메서드를 사용하여 권한 부여를 처리했지만 Controller 메서드에서 @PreAuthorize를 사용하여 권한 부여를 처리하는 방법을 배웠습니다. config 파일에서 하면 antMatcher.hasRole 메서드의 순서에 따라 원하는 권한을 처리하지 못할 수도 있지만 다시 이 메서드가 더 명시적으로 느껴졌습니다.
2.3. JWT + 스프링 보안
SpringSecurity에 JWT 인증 방식을 적용했습니다. AccessToken과 RefreshToken을 사용한 JWT 인증 프로세스를 이해한 후에는 양식 인증 방법보다 훨씬 유연하다는 것을 알았습니다.
3. 느낀점
RefreshToken을 사용하는 의미와 이유, AccessToken으로 JWT 인증, 권한 부여 프로세스, SpringSecurity 구성 파일에 입력된 CSRF 및 세션 관련 메소드를 명확하게 이해했습니다.
TDD의 경우 테스트 코드를 미리 작성하고 로직을 구현하는 것이 훨씬 더 자연스러워졌습니다. 코드를 작성할 때 어떤 클래스가 그 기능을 담당해야 하는지, 로직이 전역 객체에 지나치게 의존하고 있지는 않은지, 테스트가 어려울지 등을 생각하는 습관을 들이는 것이 중요하다는 것을 깨달은 주이기도 했습니다. BE.