2024.06.04.화.TIL 내일배움캠프 35일차 <Spring Security 란 무엇일까>

김기남·2024년 6월 4일
0

오늘은 팀프로젝트를 시작하면서 반드시 알아둬야 할
Spring Security 에 대해 알아보았습니다.

Spring Security란?

Spring Security는 인증, 권한 관리 그리고 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크입니다.

일반적으로 개발 시 가장 먼저 작업하는 부분이 사용자 관리 부분으로 가볍게는 회원가입부터 로그인, 로그아웃, 세션 관리, 권한 관리까지 온라인 플랫폼에 맞춰 다양하게 작업되는 인가 & 보안 기능은 개발자에게 많은 시간을 요구하게 됩니다.

Spring 생태계 내에서 이러한 요구사항을 효과적으로 지원하기 위해 개발된 것이 Spring Security로 개발자들이 보안 관련 기능을 효율적이고 신속하게 구현할 수 있도록 도와줍니다.

Spring Security를 사용하는 이유

Spring Security는 개발 구조가 Spring이라는 프레임워크 안에서 활용하기 적합한 구조로 설계되어 있어, 보안 기능을 추가할 때 활용하기 좋습니다.

프레임워크를 사용하지 않고 코드를 직접 작성할 경우 Spring에서 추구하는 IoC/DI 패턴과 같은 확장 패턴을 염두 해서 인증/인가 부분을 직접 개발하기는 쉽지 않은데, Spring Security에서는 이와 같은 기능들을 제공해 주기 때문에 개발 작업 효율을 높일 수 있습니다.

때문에 많은 개발자들이 Spring을 사용할 경우에는 Spring Security를 활용하여 보안 기능을 추가하고 있으며, Spring Security에서 제공하는 기능 외에 추가적인 기능이 필요할 경우 Spring Security를 베이스로 기능을 추가하여 업무 효율을 높이고 있습니다.

Spring Security 아키텍처

  1. 사용자의 요청이 서버로 들어옵니다.

  2. Authotication Filter가 요청을 가로채고 Authotication Manger로 요청을 위임합니다.

  3. Authotication Manager는 등록된 Authotication Provider를 조회하며 인증을 요구합니다.

  4. Authotication Provider가 실제 데이터를 조회하여 UserDetails 결과를 돌려줍니다.

  5. 결과는 SecurityContextHolder에 저장이 되어 저장된 유저정보를 Spring Controller에서 사용할 수 있게 됩니다.

Spring Security가 작동하는 내부 구조

  1. 사용자가 자격 증명 정보를 제출하면, AbstractAuthenticationProcessingFilter가 Authentication 객체를 생성합니다.

  2. Authentication 객체가 AuthenticationManager에게 전달됩니다.

  3. 인증에 실패하면, 로그인 된 유저정보가 저장된 SecurityContextHolder의 값이 지워지고 RememberMeService.joinFail()이 실행됩니다. 그리고 AuthenticationFailureHandler가 실행됩니다.

  4. 인증에 성공하면, SessionAuthenticationStrategy가 새로운 로그인이 되었음을 알리고, Authentication 이 SecurityContextHolder에 저장됩니다. 이후에 SecurityContextPersistenceFilter가 SecurityContext를 HttpSession에 저장하면서 로그인 세션 정보가 저장됩니다.

  5. 그 뒤로 RememberMeServices.loginSuccess()가 실행됩니다. ApplicationEventPublisher가 InteractiveAuthenticationSuccessEvent를 발생시키고 AuthenticationSuccessHandler 가 실행됩니다.

정리 : Spring Security 의 장점

Spring Security를 활용하면 Spring Framework에서 인증, 인가와 관련된 부분을 시간을 많이 들이지 않고 깔끔하게 작업할 수 있습니다.
또한 인증, 인가 기능이 적용되지 않은 프로젝트에 인증, 인가 기능을 추가할 때에도 아주 유용하게 활용할 수 있습니다.
기존의 코드를 많이 변경하지 않고 Spring에 최적화된 방법을 통하여 인증, 인가 기능을 삽입하는 것이 가능하기 때문에 보안 관련 기능 추가시 유용하게 활용할 수 있습니다.

참고 : https://www.elancer.co.kr/blog/view?seq=235

profile
새로운 시작~!

0개의 댓글