본문 바로가기
Framework/Spring

[Spring Security] 동작 구조에 대한 이해

by 코딩하는 랄로 2024. 1. 30.
728x90

Authentication(인증) VS Authorization(인가)

Spring Security 가 무엇인지에 대해서 알아보기 전에, 먼저 인증과 인가에 대해서 알아야 한다. 인증이란, 간단하게 자신을 증명하는 것이다. 특정 웹사이트에 접속을 해서 해당 웹사이트에게 자신을 증명하는 방법이 무엇일까? 바로 해당 사이트의 회원인지를 증명할 만한 자료를 제시하는 것이다.

 

즉, 웹 사이트는 사용자게 제시한 자료( 아이디, 패스워드, 이메일 등)를 통해, 해당 사용자가 웹 사이트에 등록된 사용자인지를 확인하는 과정( 로그인 )을 거치게 되는데 이러한 과정이 인증을 하는 과정인 것이다. 휴대폰을 사용할 때에도 지문, 얼굴 인식 등의 증명을 통해서 사용자임을 인증을 하는 것 또한 똑같은 과정인 것이다.

 

인증이 증명이라면, 인가는 권한이다. 인증을 거친 모든 사용자가 똑같은 권한을 가지고 있지는 않다. 예를 들어, 내가 특정 웹사이트에서 작성한 글이 관리자에 의해 삭제되는 경우, 랭크에 따라 사이트를 이용할 수 있는 서비스의 제한이 달라지는 경우 등이 있다. 더욱 와닿는 예를 설명하자면, netflix, tvving 등 ott 서비스를 이용할 때, 제공하는 영상을 보기 위해서는 프리미엄 등을 결제해야 볼 수 있는 것과 같다. 해당 요금제를 결재함으로 나는 영상을 볼 수 있는 권한 부여 받는 것(인가)이다.

 

 

 

Spring Security 란

스프링 시큐리티는 스프링에서 제공하는 웹의 인증과 권한 등의 기능을 편리하게 적용할 수 있도록 도와주는 security framework 이다. 이를 사용하여 웹을 제작하면, 편리하게 로그인, 로그아웃 등의 기능을 구현할 수 있다.

 

프레임워크이기 때문에, 구체적인 로직 등을 알 필요는 없지만 그럼에도 이를 잘 활용하기 위해서는 전체적인 동작 구조에 대해서 알아야 하고, 이를 토대로 사용하는 객체와 메소드 등이 동작 구조내에서 어떻 역할을 하는지를 알아야 한다.

 

기본적인 동작 구조에 대한 이해가 받쳐줘야 스프링 시큐리티를 활용한 기본 구현을 벗어나 커스텀하여 웹에 맞는 시큐리티를 구현할 수 있게 되는 것이다. 때문에 이번 글에서는 스프링 시큐리티의 기본 동작 구조에 대해서 알아보겠다.

 

 

 

Spring Security 동작 구조

스프링 시큐리티는 각각의 역할에 맞는 작업을 처리하는 여러개의 필터들이 체인 형태로 구성되어 순서에 따라 순차적으로 수행되는 구조를 가지고 있다. 아래 그림과 같이, 순차적으로 필터를 거쳐가면서 각가의 필터가 담당하는 여러 로직들을 처리해나가는 구조인 것이다.

 

더 구체적으로 설명하면, 사용자가 로그인 화면을 통해 서버에 로그인 인증 요청을 하게 되면 스프링 시큐리티에서 체인 형태로 구성된 필터들의 doFilter 메소드들이 순서대로 호출되면서 각각의 로직을 수행하게 되는 것이다.

 

이 중에서 UsernamePasswordAuthenticationFilter 는 인증 처리를 담당하는 필터로 인증 성공 실패에 따라 AuthenticationSuccessHandler, AuthenticationFailureHandler를 호출하게 되고, 인증이 성공하면 UsernamePasswordAuthenticationToken을 세션에 저장한다. ( 추후에 외부인증을 위해 인증 처리 부분을 커스터마이징할 때, 해당 필터를 대신하는 커스텀 필터를 추가하게 된다. )

 

이 후에 인증이 완료되면, 개발자가 구현한 UserDetailsService 의 loadByUsername 메소드를 통해 DB 에서 가지고 온 유저 정보를 UserDatails 객체에 담아서 반환하게 된다.

 

이렇게 간단하게 스프링 시큐리티가 동작하는 구조, 방식에 대해서 알아보았는데, 기초적인 것만을 살펴보았기 때문에 추후에 스프링 시큐리티가 제공하는 여러 기능들에 대해서 자세히 살펴보겠다.

 

728x90

'Framework > Spring' 카테고리의 다른 글

[Spring Security] 기본 설정 파일 생성  (0) 2024.01.30
[Spring Boot] Cookie  (0) 2024.01.19
[Spring Boot] Lombok  (0) 2024.01.11
[Spring Boot] Controller  (1) 2024.01.08
[Spring Boot] 게시판 목록 페이지  (0) 2024.01.08