스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초

스프링부트 핵심 가이드(장정우 지음) - 스프링 시큐리티(Spring Security) 개요

개발학생 2026. 3. 26. 19:57
반응형

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성  

 

[Java] 차근차근 Java 설치하기 (JDK17, Window 11)

자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸

yungenie.tistory.com

 

[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치

STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로

priming.tistory.com

 

MySQL :: Download MySQL Community Server

Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

  • Gradle

**STS에서 Gradle 프로젝트 생성한 과정 

*** 함께 보면 좋은 글

2025.07.10 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

 

스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로

keep-programming-study.tistory.com

2025.07.11 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

 

스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

1. 서버 간 통신마이크로서비스 아키텍처에서 한 서버가 다른 서버에 통신을 요청하는 것을 의미-> 한 대는 서버/다른 한 대는 클라이언트가 됨 가장 많이 사용되는 방식은 HTTP/HTTPS 방식(TCP/IP, SOA

keep-programming-study.tistory.com

 

1. 보안 용어 이해

1) 인증(authentication)

  • 사용자가 누구인지 확인하는 단계
  • 예시: 데이터베이스에 등록된 아이디와 패스워드를 사용자가 입력한 것들과 비교하여 일치 여부를 확인한 다음 로그인
    -> 로그인 성공 시 서버에서 응답으로 사용자에게 토큰(token) 전달,
        실패 시 사용자가 토큰을 받지 못해 원하는 리소스에 접근 불가

2) 인가(authorization)

  • 인증을 통해 검증된 사용자가 내부 리소스에 접근할 때, 사용자가 해당 리소스에 접근 권한이 있는지 확인
  • 일반적으로 인증 단계의 토큰이 인가 내용을 포함하고 있으며,
    사용자가 리소스에 접근할 때 토큰을 전달하면 서버에서 토큰을 통해 권한을 확인하고 인가를 수행하는 것
  • 예시: 로그인한 사용자가 특정 게시판의 글을 보려고 하는 경우, 게시판 접근 등급을 확인해 접근 허가 or 접근 거부

3) 접근 주체(principal)

  • 애플리케이션의 기능을 사용하는 주체: 사용자, 디바이스, 시스템 등
  • 애플리케이션에서 인증 과정으로 접근 주체가 신뢰 가능한지 판단하고, 인가 과정으로 접근 주체의 권한 확인

2. 스프링 시큐리티(Spring Security) 

1) 개요 

  • 스프링 프레임워크에서 제공하는 강력한 보안 프레임워크
  • 웹 애플리케이션의 인증, 인가 등 보안 기능을 체계적으로 처리하는 스프링 하위 프로젝트 중 하나
  • 보안과 관련된 많은 기능을 제공하기 때문에, 이를 활용하여 편리하게 원하는 기능을 설계
  • 기본적으로 모든 요청을 필터 체인(Filter Chain)을 통해 검사하며, 로그인·권한 관리·세션 제어·데이터 보호까지 폭넓게 지원
  • 모든 요청이 DispatcherServlet에 도달하기 전에,
    필터 체인(Filter Chain, 서블릿 컨테이너에서 관리하는 ApplicationFilterChain을 의미)을 통해 여러 보안 필터를 거쳐 검사
    -> DispatcherServlet: Model, View, Controller를 연결하는 중심 허브로, 개별 서블릿 등록 없이 모든 요청 관리
  • 개발자가 SecurityFilterChain 또는 WebSecurityConfigurerAdapter(구버전) 등을 통해
    보안 설정(Security Configuration)   커스터마이징 가능
  • 자세한 내용은 공식 문서 참조: https://spring.io/projects/spring-security

2) 동작 구조

  • 서블릿 필터(Servlet Filter)를 기반으로 동작하며, 필터는 다음과 같이 DispatcherServlet 앞에 배치

서블릿 필터의 배치

  • 클라이언트에서 애플리케이션으로 요청을 보내면, 서블릿 컨테이너는 URI를 확인하여 필터와 서블릿을 매핑
    -> 스프링 시큐리티는 사용하고자 하는 필터체인을 서블릿 컨테이너의 필터 사이어세 동작하게 하기 위해,
        아래와 같이 DelegatingFilterProxy 사용
    • DelegatingFilterProxy: 서블릿 컨테이너의 생명주기와 스프링 애플리케이션 컨텍스트(Application Context) 사이에서
      다리 역할을 수행하는 필터 구현체
      => 표준 서블릿 필터를 구현하고 있으며,
           역할을 위임할 필터체인 프록시(FliterChainProxy, 스프링 부트의 자동 설정으로 자동 생성)를 내부에 갖고 있음)
    • FilterChainProxy: 스프링 시큐리티에서 제공하는 필터로서, 보안 필터체인(SecurityFilterChain)을 통해 많은 보안 필터(Security Filter)를 사용 가능
      -> 여기서 사용 가능한 보안 필터체인은 WebSecurityConfigurerAdapter 클래스를 상속받아 설정하며,
          List 형식으로 담을 수 있게 설정되어 있어 URI 패턴에 따라 특정 보안필터 체인을 선택하여 사용 

DelegatingFilterProxy 내부 FilterChainProxy 구조

  • 별도로 추가 설정을 하지 않으면, 스프링 시큐리티에서는 SecurityFilterChain에서 사용하는 필터 중 
    UsernamePasswordAuthenticationFilter를 통해 인증 처리
    -> 인증이 실패할 경우, 로그인 폼이라는 화면을 보내는 역할

*UsernamePasswordAuthenticationFilter를 통한 인증 수행 과정 (순서대로)

UsernamePasswordAuthenticationFilter를 통한 인증 과정

 

  1. 클라이언트로부터 요청을 받으면, 서블릿 필터에서 SecurityFilterChain으로 작업이 위임되고
    그 증 UsernamePasswordAuthenticationFilter(위 그림의 AuthenticationFilter)에서 인증 처리
  2. UsernamePasswordAuthenticationFilter는 요청 객체(HttpServletRequest)에서
    username과 password를 추출하여 토큰 생성
  3. 생성한 토큰을 AuthenticationManager(구현체로 ProviderManager 사용)에 전달
  4. ProviderManager가 인증을 위해 AuthenticationProvider로 토큰 전달
  5. AuthenticationProvider가 토큰의 정보를 UserDetailsService에 저장
  6. UserDetailsService가 전달받은 정보를 통해, 데이터베이스에서 일치하는 사용자를 찾아 UserDetails 객체 생성
  7. 생성된 UserDetails 객체는 AuthenticationProvider로 전달되는데,
    AuthenticationProvider에서 인증을 수행하여 성공하면 ProviderManager로 권한을 담은 토큰 전달
  8. ProviderManager가 검증된 토큰을 AUthenticationFilter로 전달
  9. AuthenticationFilter가 검증된 토큰을 SecurityContextHolder에 있는 SecurityContext에 저장 

 

반응형