Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions keyword/chapter09/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- Spring Data JPA의 Paging
- Page
- **전체 페이지 정보**를 제공하는 페이징 객체.
- 데이터와 함께 **전체 데이터 개수, 총 페이지 수, 현재 페이지 번호** 등의 메타 정보를 포함.
- 반환 메서드: `Page<T>`
- 주로 `Pageable` 인터페이스와 함께 사용.

주요 메서드

- `getContent()`: 조회된 데이터 목록 반환.
- `getTotalPages()`: 총 페이지 수 반환.
- `getTotalElements()`: 전체 데이터 개수 반환.
- `getNumber()`: 현재 페이지 번호 반환.
- `hasNext()` / `hasPrevious()`: 다음/이전 페이지 존재 여부 확인.
- Slice
- **현재 페이지 정보**만 제공하며, **전체 데이터 개수**나 **총 페이지 수**는 알 수 없음.
- 더 적은 리소스를 사용하여 다음 페이지 유무만 판단.
- 반환 메서드: `Slice<T>`
- 주로 무한 스크롤과 같은 경우에 사용.

주요 메서드

- `getContent()`: 조회된 데이터 목록 반환.
- `hasNext()` / `hasPrevious()`: 다음/이전 페이지 존재 여부 확인.
- 객체 그래프 탐색

엔티티 객체 간의 관계를 통해 연관된 데이터를 탐색하거나 로드하는 것.

1. **Lazy Loading (지연 로딩)**:
- 연관된 엔티티를 **실제 사용 시점**에 로드.
- `@OneToMany`, `@ManyToOne` 등에서 기본 설정.
- 성능에 유리하지만, **N+1 문제**가 발생할 수 있음.
2. **Eager Loading (즉시 로딩)**:
- 엔티티를 로드할 때 연관된 엔티티를 **즉시 함께 로드**.
- `@OneToOne(fetch = FetchType.EAGER)`처럼 명시적으로 설정.
- 데이터를 즉시 사용 가능하지만, 불필요한 데이터 로드로 인해 성능 저하 가능.
3. **JPQL 또는 Fetch Join**:
- JPQL에서 `JOIN FETCH`를 사용해 필요한 연관 데이터를 한 번에 로드.
- N+1 문제 해결에 효과적.
61 changes: 61 additions & 0 deletions keyword/chapter10/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
- **Spring Security**

Spring Security는 애플리케이션의 보안(인증 및 인가)을 제공하기 위한 강력하고 유연한 프레임워크다.

스프링 기반 애플리케이션에서 주로 사용되며, 다양한 보안 관련 기능을 제공합니다.

### 주요 특징:

1. **보안 기능 제공**
- 인증(Authentication): 사용자의 신원을 확인하는 과정.
- 인가(Authorization): 사용자에게 특정 리소스에 대한 접근 권한을 부여하는 과정.
2. **구성 가능한 보안**
- XML 또는 Java Config 기반 설정 가능.
3. **다양한 인증 방식 지원**
- 기본 인증(Username/Password)
- OAuth2, JWT, SAML, LDAP 등.
4. **강력한 커스터마이징**
- 사용자 정의 필터 및 인증/인가 로직을 쉽게 구현 가능.
- **인증(Authentication)과 인가(Authorization)**

### **인증(Authentication)**

**Authentication**은 사용자가 누구인지 신원을 확인하는 과정입니다.

### 주요 개념:

- **Principal**: 인증된 사용자 정보(예: 사용자 ID).
- **Credentials**: 사용자의 비밀번호와 같은 비밀 정보.
- 인증 성공 시, 인증된 사용자 정보를 **SecurityContext**에 저장하여 애플리케이션 전반에서 접근 가능하게 합니다.

### Spring Security에서의 흐름:

1. **AuthenticationManager**: 인증을 처리하는 핵심 인터페이스.
2. **AuthenticationProvider**: 다양한 인증 방식을 구현하는 프로바이더.
3. **UserDetailsService**: 사용자 정보를 가져오는 서비스.

---

### **인가(Authorization)**

**Authorization**은 사용자가 특정 리소스 또는 기능에 접근할 권한이 있는지 확인하는 과정입니다.

### 주요 개념:

- 권한(Role): 사용자가 가진 권한(예: `ROLE_USER`, `ROLE_ADMIN`).
- 접근 제어: 사용자의 권한에 따라 특정 기능 또는 리소스 접근을 허용/차단.

### Spring Security에서의 흐름:

1. **AccessDecisionManager**: 요청과 사용자 권한을 비교하여 접근 가능 여부를 결정.
2. **Method Security**: 메서드 레벨에서 접근 제어 처리(`@PreAuthorize`, `@PostAuthorize`).
3. **URL Security**: URL 기반 접근 제어(`httpSecurity.authorizeRequests()`).

### **Spring Security의 인증 및 인가 시나리오**

1. 사용자가 로그인 요청.
2. `AuthenticationManager`가 요청을 `AuthenticationProvider`로 전달.
3. `AuthenticationProvider`가 사용자 정보를 확인하고 인증.
4. 인증 성공 시, `SecurityContext`에 사용자 정보 저장.
5. 사용자가 리소스 요청 시, `AccessDecisionManager`가 요청과 권한을 비교.
6. 인가 성공 시, 요청 처리.