IT Developer/Spring

Spring 기초 <16. Spring Security 기본 개념 및 인증 방식 (JWT, OAuth2, Session 비교)>

TEMA_ 2025. 4. 2. 13:17
반응형

스프링 Spring

16. Spring Security 기본 개념 및 인증 방식 (JWT, OAuth2, Session 비교)

 

안녕하세요! 태마입니다.

Spring 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

스프링 Spring

포스팅 시작하겠습니다 :)

 


 

1. 주제 간단 정리

 

1. Spring Security란?

Spring Security는 Spring 기반 애플리케이션에서 인증(Authentication)과 인가(Authorization)을 처리하는 강력한 보안 프레임워크
세션 기반 인증, JWT 인증, OAuth2 인증 등 다양한 방식 지원

📌 Spring Security의 주요 기능

기능설명
사용자 인증(Authentication) 사용자 로그인 및 신원 확인
사용자 인가(Authorization) 권한(Role) 기반 접근 제어
비밀번호 암호화 BCrypt를 사용한 패스워드 암호화
세션 관리 로그인/로그아웃 처리 및 세션 유지
OAuth2 및 JWT 지원 OAuth2 인증 및 JWT 기반 토큰 인증 지원

📌 Spring Security를 활용하면 "보안이 강화된 애플리케이션을 쉽게 구현 가능"


2. 인증(Authentication)과 인가(Authorization) 개념

인증(Authentication): 사용자가 누구인지 확인 (예: 로그인)
인가(Authorization): 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인 (예: 관리자 권한)

📌 인증과 인가의 차이점

구분설명예시
인증(Authentication) 사용자의 신원 확인 로그인 시 ID/PW 입력 후 확인
인가(Authorization) 사용자 권한 확인 관리자만 특정 페이지 접근 가능

📌 Spring Security를 사용하면 "인증과 인가를 쉽게 처리할 수 있음"


✅ 여기까지 Spring Security의 기본 개념과 인증/인가의 차이를 배웠습니다!
👉 "그렇다면, Spring Boot에서 다양한 인증 방식은 어떻게 적용할까?"
✅ 2부에서 세션 기반 인증, JWT 인증, OAuth2 인증을 비교하고 구현하는 방법을 배워봅시다!

 

 

반응형

 

2. 상세 주제 정리

 

1. 세션(Session) 기반 인증

서버에서 사용자 정보를 세션에 저장하고, 세션 ID를 쿠키로 전달하여 인증 유지

📌 세션 기반 인증 흐름
1️⃣ 사용자가 로그인하면 서버에서 세션을 생성하고, 세션 ID를 클라이언트에 쿠키로 전달
2️⃣ 이후 요청마다 세션 ID를 서버로 전송하여 사용자 인증 유지
3️⃣ 서버가 세션을 관리하고 인증 상태를 확인

📌 Session 기반 인증의 특징

장점단점
보안성이 높고 자동 로그아웃 가능 서버에서 세션을 관리해야 하므로 확장성이 낮음
쿠키를 이용하여 클라이언트에서 세션 유지 세션 정보가 서버 메모리에 저장되므로 부하 발생 가능

📌 Spring Security에서 세션 기반 인증을 쉽게 설정 가능

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .formLogin(withDefaults()) // 기본 로그인 폼 사용
            .logout(logout -> logout.logoutSuccessUrl("/login"));

        return http.build();
    }
}

세션을 활용하여 인증을 수행하며, 로그인 및 로그아웃을 처리

📌 세션 기반 인증은 "소규모 프로젝트에서 간단하게 적용 가능"


2. JWT 기반 인증 (JSON Web Token)

JWT는 사용자의 인증 정보를 포함한 토큰을 발급하여, 클라이언트가 요청 시마다 토큰을 전송하여 인증을 수행

📌 JWT 인증 흐름
1️⃣ 사용자가 로그인하면 서버가 JWT 토큰을 발급
2️⃣ 클라이언트는 이후 요청마다 JWT를 헤더에 포함하여 서버에 전달
3️⃣ 서버는 JWT를 검증하여 사용자 인증 수행

📌 JWT 기반 인증의 특징

장점단점
서버에서 세션을 저장하지 않아 확장성이 높음 JWT가 탈취되면 보안에 취약
RESTful API에 적합한 인증 방식 JWT가 길어질수록 네트워크 부담 증가

📌 Spring Boot에서 JWT 인증을 구현하는 방법

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;

public class JwtTokenProvider {

    private static final String SECRET_KEY = "yourSecretKey";

    public static String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 86400000)) // 1일 유효
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }
}

JWT를 생성하여 클라이언트에 전달하고, 인증에 활용 가능

📌 JWT 기반 인증은 "무상태 인증을 지원하여 확장성이 뛰어나며, REST API에 적합"


3. OAuth2 인증 (Google, Facebook, GitHub 로그인)

OAuth2는 타사(예: Google, Facebook, GitHub)의 계정을 이용하여 로그인할 수 있도록 지원하는 인증 방식

📌 OAuth2 인증 흐름
1️⃣ 사용자가 Google, Facebook 등의 로그인 페이지에서 인증
2️⃣ 인증이 완료되면 액세스 토큰을 발급받아 클라이언트에 전달
3️⃣ 클라이언트는 액세스 토큰을 사용하여 서버에 사용자 정보를 요청

📌 OAuth2 기반 인증의 특징

장점단점
타사 인증을 사용하므로 보안이 강화됨 OAuth2 제공 업체(Google, Facebook 등)에 종속적
소셜 로그인을 통해 사용자 접근성이 향상됨 OAuth2 설정 및 구현이 다소 복잡할 수 있음

📌 Spring Security에서 OAuth2 소셜 로그인을 설정하는 방법

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .oauth2Login(withDefaults()); // OAuth2 로그인 활성화

        return http.build();
    }
}

OAuth2를 활용하여 간편하게 소셜 로그인 지원 가능

📌 OAuth2 인증은 "소셜 로그인 기능이 필요한 서비스에 적합하며, 보안이 강화됨"


✅ 여기까지 Spring Security의 다양한 인증 방식(Session, JWT, OAuth2)을 비교하고 구현 방법을 배웠습니다!
👉 "그렇다면, Spring Boot에서 JWT(Json Web Token) 인증 구현은 어떻게 할까?"
✅ 다음 회차에서 Spring Boot에서 JWT(Json Web Token) 인증 구현을 배워봅시다!



 

반응형