현재 진행하고 있는 캡스톤 디자인에서 나는 user-service (사용자 인증 및 사용자 정보)를 맡게 되었다.
예전에 인스타그램 클론코딩?을 한적이 있는데 (물론 하다가 흐지부지 끝났다..) 거기서 NodeJS, JWT를 통해 사용자 인증을 구현해 본 경험이 있다.
그래서 이번에는 쉽겠거니 자신만만했다. Spring에서는 사용자 인증을 어떤식으로 구현하나 여러 블로그들을 탐색해본 결과 Spring Security를 통해 많이 구현하는 것 같았다.
나도 Spring Security를 사용해서 사용자 인증을 해봐야겠다고 결심하고 user-service 개발을 시작했다.
💡 Spring 기반 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임 워크
Spring Security는 인증과 권한에 대한 부분을 Filter의 흐름에 따라 처리하고 있다고 한다.
사실 나는 Filter라는 단어를 듣고 약간 멍- 했다. Spring을 공부하기는 했지만 학업때문에 이것저것 하면서 중간중간 공부하다 보니 제대로 된 이해를 하지 못한 것 같았다.
그래서 Spring Security에 대해 학습하기 전 Spring의 구조에 대해 다시 공부를 했다.
Spring은 위의 그림과 같이 아주 체계적으로 동작한다고 한다. (만드신 분들 존경합니다.)
아래의 블로그에 Spring 동작 원리를 아주 잘 정리돼있다!
Spring Filter에 대해서 알아봤으니 다시 Spring Security로 돌아와서 Spring Security의 아키텍쳐는 위와 같이 구성되어 있다고 한다.
💡 Spring Security는 기본적으로 인증 절차를 거친 후에 인가 절차를 진행하게 되며, 인가 과젱에서 해당 리소스에 대한 접근 권한이 있는지 확인을 하게 된다. Spring Security에서는 이러한 인증과 인가를 위해 Principal을 아이디로, Credential을 비밀번호로 사용하는 Credential 기반의 인증 방식을 사용한다.
이 Spring Security 주요 모듈에 대한 설명은 아래 블로그에 잘 정리되어있다!
이 블로그는 캡스톤디자인을 하면서 내가 직면했던 문제들을 해결하는 과정만을 담을 것이기 때문에 각 기술에 대한 설명은 짧게 짧게 적고 참고했던 블로그나 문서같은 것들을 URL로 남길 것이다.