Spring Security란
spring security는 spring 프레임워크에서 인증과 권한에 대한 처리 기능을 쉽게 할 수 있게 제공되는 프레임워크입니다
Spring Security에서 중요한 개념은 인증과 권한(인가)입니다.
인증(Authentication)
인증이란 쉽게 말해서 요청을 보내는 사람이 누구인지를 확인하는 것입니다
인가(Authorization)
인가란 이 사람이 누구인지는 알았는데 이 사람이 어떤 기능까지 사용할 수 있는지 확인하는 것입니다.
Spring Security 들어가기전
처음에 Security에 대해 공부를 하다보면 모르는 용어들도 많고 처음으로 보는 개념이기 때문에 어렵게 느껴집니다.
그래서 저는 처음에 공부할 때 같은 글을 여러번보고 같은 영상을 여러번 들어야 이해가 조금씩 되기 시작했습니다.
이 말을 한 이유는 지금 이해가 가지 않는게 정상이라는 말입니다.Security의 흐름을 제가 이해했던 방법으로 설명해 보겠습니다.
Spring Security -로그인
먼저 저희는 로그인 기능을 구현할때 직접 PostMapping으로 들어온 login요청을 처리하기 위해 사용자가 입력한 data가 DB의 정보와 일치하는지 JPA를 사용해서 비교했습니다. 그런데 Spring Security는 로그인처리를 개발자가 직접하지 않고
프레임워크가 처리를 해줍니다. 물론 많은 기능들이 더 있지만 제가 가장 놀라웠던 부분은 로그인에 대한 부분이었습니다.
먼저 요청을 DispatcherServlet이 받기 전에 모든 요청은 Filter를 거치게 되어있습니다. 이 Filter는 요청을 검사하는 역할을 하는데 Spring Security는 이 Filter를 원하는 기능을 할 수 있게 설정하고 만드는 프레임워크라고 입니다.
로그인을 처리하는 방식을 만약 사용자가 Post방식으로 /login(default값으로 변경가능) 요청을 한다면 Filter에서 이 요청을 가로채서 처리합니다. 이 때 로그인을 담당하는 Filter들중 주로 쓰이는 것은 아래 4가지입니다
-UsernamePasswordAuthenticationFilter
-BasicAuthenticationFilter
-OAuth2AuthenticationFilter
-JWT토큰
Spring Security 동작방식
이 필터들을 알아보기 전에 먼저 Spring Security가 동작하는 방식을 알아보겠습니다
위의 그림을 많이 보신분들도 있을 겁니다. 저도 처음에 이 그림을 봤을 때는 하나도 이해가 가지 않았지만 하나씩 살펴보니 조금씩 이해가 되었습니다.
간단하게 위 그림의 요청은 로그인 요청이라고 생각하시고 아키텍쳐도 로그인 처리에 대한 아키텍쳐라고 생각해 보겠습니다. 용어보다는 흐름을 위주로 보는게 도움이 되실겁니다.
사용자가 id,password를 입력해 로그인 요청을 하면 Controller로 들어가지 않고 인증필터가 요청을 가로챕니다
가로챈 요청안에 사용자가 입력한 id,password로 인증토큰이라는 걸 만듭니다. 이 인증토큰과 사용자들의 정보가 있는 DB에 있는 data를 비교해 로그인을 처리합니다. 만약 로그인이 성공했다면 로그인한 사용자의 정보를 어딘가에 저장해서 로그인상태를 유지합니다.
위 설명은 Spring Security의 로그인 방식에서 용어들을 빼고 설명한 것입니다. 저는 이런식으로 모르는 용어가 있으면 일단 용어보다는 동작의 흐름을 위주로 생각하는게 이해가 더 잘 되었습니다.
다음 글에서 부터는 자세한 설명을 할 것입니다. 설명하기전 이 글을 쓴 이유는 모르는 용어들이 난무해서 이해가 안가는 것이 당연하다는 말을 하고 싶었기 때문입니다.
'Spring Security' 카테고리의 다른 글
OAuth2란 (1) | 2024.02.05 |
---|---|
JWT 로그인 구현 (0) | 2024.02.04 |
JWT (0) | 2024.01.29 |
Session VS JWT (0) | 2024.01.18 |
로그인 인증 과정 (0) | 2024.01.16 |