Skip to content

Commit

Permalink
2024-12-02_Spring_Security
Browse files Browse the repository at this point in the history
  • Loading branch information
devnine-codes committed Dec 2, 2024
1 parent f42d6ac commit f894ddc
Showing 1 changed file with 83 additions and 0 deletions.
83 changes: 83 additions & 0 deletions 2024/12/2024-12-02_Spring_Security/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Spring Security

오늘은 프리랜서로 첫 출근을 하여 받은 과제 중 **Spring Security**를 사용하여 로그인 인증을 구현해보라는 과제를 받아 작업 한 김에 **Spring Security**에 대해 이야기해보려 한다.
**Spring Security**는 Java 기반 애플리케이션에서 보안을 담당하는 프레임워크로 인증과 권한 부여(Authentication and Authorization)를 중심으로, 애플리케이션을 외부 공격으로부터 보호하고, 사용자 액세스를 관리하는 데 최적화된 도구다.

---

## 1. Spring Security란?

Spring Security는 **Spring Framework**의 하위 프로젝트로, 애플리케이션에 손쉽게 보안 기능을 추가할 수 있도록 설계된 프레임워크다.
주요 기능은 다음과 같다:
- **인증(Authentication)**: 사용자의 신원을 확인하는 과정.
- **권한 부여(Authorization)**: 인증된 사용자가 시스템에서 어떤 자원에 접근할 수 있는지 결정.
- **공통 보안 위협 방어**: CSRF, XSS, 세션 고정 공격 등 다양한 보안 위협을 방어.

Spring Security는 설정만으로도 강력한 보안 기능을 제공하며, 애플리케이션 요구사항에 따라 손쉽게 확장할 수 있다.

---

## 2. Spring Security의 주요 개념

### **1) 인증(Authentication)**
- **사용자의 신원 확인** 과정이다.
사용자가 제공한 정보(예: 사용자 이름과 비밀번호)가 올바른지 확인하며, 일반적으로 로그인 과정에서 수행된다.

### **2) 권한 부여(Authorization)**
- **사용자의 역할(Role)에 따른 자원 접근 관리**를 담당한다.
예를 들어, 관리자만 접근 가능한 페이지와 일반 사용자 페이지를 구분하여 관리할 수 있다.

### **3) 필터 체인(Filter Chain)**
- Spring Security는 요청을 처리하기 위해 여러 필터를 사용한다.
이 필터 체인은 요청과 응답을 가로채어 인증 및 권한 부여를 수행한다.
요청이 필터 체인을 통과해야 애플리케이션으로 전달될 수 있다.

### **4) CSRF 방어**
- CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Spring Security는 기본적으로 CSRF 토큰을 활성화한다.
이를 통해 외부 사이트에서 사용자의 애플리케이션 상태를 변경하려는 요청을 차단할 수 있다.

---

## 3. Spring Security의 장점

### **1) 강력한 기본 보안**
- Spring Security는 초기 설정만으로도 로그인, 로그아웃, 비밀번호 암호화 등 기본적인 보안 기능을 제공한다.

### **2) 유연한 커스터마이징**
- 애플리케이션 요구사항에 맞게 인증/권한 부여 로직, 사용자 저장소, 필터 체인 등을 자유롭게 설정할 수 있다.

### **3) 다양한 인증 방법 지원**
- Spring Security는 **Form-Based Login**, **OAuth2**, **JWT**, **Basic Authentication** 등 다양한 인증 방식을 지원한다.
이를 통해 현대적인 인증 요구사항을 유연하게 처리할 수 있다.

### **4) 스프링 생태계와의 통합**
- Spring Boot와 함께 사용하면 간단한 설정으로 보안 기능을 활성화할 수 있다.
또한, Spring Data, Spring MVC 등 다른 Spring 프로젝트와도 자연스럽게 통합된다.

---

## 4. Spring Security 적용 시 주의사항

### **1) 디폴트 설정에 의존하지 말라**
- Spring Security는 강력한 디폴트 설정을 제공하지만, 애플리케이션에 맞는 커스터마이징이 필요하다.
예를 들어, 모든 경로를 동일한 권한으로 보호하기보다는, 경로별로 적절한 권한을 설정해야 한다.

### **2) 암호화 및 키 관리**
- 비밀번호는 반드시 암호화하여 저장해야 하며, Spring Security에서 제공하는 `BCryptPasswordEncoder` 같은 암호화 도구를 활용하자.
또한, 인증 토큰이나 키 관리에 소홀하지 않도록 주의해야 한다.

### **3) 세션 관리**
- 세션 고정 공격 방지를 위해 세션을 안전하게 관리해야 한다.
특히, 다중 로그인 제어, 세션 만료 시간 설정 등 세부적인 정책이 필요하다.

### **4) CSRF 설정**
- Spring Security는 기본적으로 CSRF 방어를 활성화하지만, API 서버에서는 종종 비활성화한다.
REST API를 개발할 때는 CSRF가 필요 없는 경우를 고려하여 적절히 설정해야 한다.

---

## 결론

Spring Security는 Java 애플리케이션 보안의 표준 도구로, 강력한 보안 기능과 유연한 커스터마이징 옵션을 제공한다.
인증과 권한 부여뿐만 아니라, 다양한 보안 위협으로부터 애플리케이션을 보호할 수 있다.
다만, 기본 설정에 의존하지 않고 애플리케이션 요구사항에 맞게 커스터마이징하는 것이 중요하다.

0 comments on commit f894ddc

Please sign in to comment.