[JWT 인증 시스템 추가] README.md에 JWT 인증 시스템에 대한 설명 추가 및 Access Token과 Refresh Token의 구성 및 자동 갱신 로직 설명. application.properties에서 Access Token의 만료 시간을 수정하여 15분으로 설정.
This commit is contained in:
33
README.md
33
README.md
@@ -121,7 +121,29 @@ public enum ApiResponseCode {
|
||||
- **일관된 구조**: `code`, `message`, `description`, `data` 필드로 표준화
|
||||
- **제네릭 활용**: `<T>`를 통해 다양한 데이터 타입 지원
|
||||
|
||||
### 3. API 문서화 (Swagger)
|
||||
### 3. JWT 인증 시스템
|
||||
|
||||
#### 토큰 구성
|
||||
|
||||
- **Access Token**: 15분 (900,000ms) - API 요청 시 사용
|
||||
- **Refresh Token**: 7일 (604,800,000ms) - 쿠키에 저장, 자동 갱신
|
||||
|
||||
#### 자동 토큰 갱신
|
||||
|
||||
**모든 API 요청마다 자동으로 처리됩니다:**
|
||||
|
||||
1. **Access Token 유효**: 정상 요청 처리
|
||||
2. **Access Token 만료**: Refresh Token으로 자동 갱신
|
||||
3. **새 Access Token 발급**: 응답 헤더에 자동 설정
|
||||
4. **Refresh Token 갱신**: 보안을 위해 매번 새로운 토큰 발급
|
||||
|
||||
#### 주요 컴포넌트
|
||||
|
||||
- **`JwtTokenIssuanceFilter`**: 로그인 시 토큰 발급
|
||||
- **`JwtTokenValidationFilter`**: 요청마다 토큰 검증 및 갱신
|
||||
- **`JwtUtils`**: 토큰 생성, 검증, 갱신 유틸리티
|
||||
|
||||
### 4. API 문서화 (Swagger)
|
||||
|
||||
#### Swagger UI 접속
|
||||
|
||||
@@ -147,7 +169,7 @@ public enum ApiResponseCode {
|
||||
- **SwaggerConfig.java**: OpenAPI 기본 정보 설정
|
||||
- **application.properties**: Swagger UI 커스터마이징
|
||||
|
||||
### 4. 트랜잭션 관리
|
||||
### 5. 트랜잭션 관리
|
||||
|
||||
#### 기본 설정
|
||||
|
||||
@@ -171,7 +193,7 @@ public class MemberServiceImpl {
|
||||
- **메서드별**: 데이터 수정 시에만 `@Transactional` 개별 적용
|
||||
- **설정**: `spring.jpa.open-in-view=false` (성능 최적화)
|
||||
|
||||
### 5. 오류 등록 및 사용
|
||||
### 6. 오류 등록 및 사용
|
||||
|
||||
#### 오류 코드 등록
|
||||
|
||||
@@ -198,7 +220,7 @@ throw new ApiException(ApiResponseCode.USER_ID_DUPLICATE);
|
||||
- **예외 클래스**: `ApiException`으로 비즈니스 로직 예외 처리
|
||||
- **자동 처리**: `GlobalExceptionHandler`가 일관된 응답 형태로 변환
|
||||
|
||||
### 6. 로깅 시스템
|
||||
### 7. 로깅 시스템
|
||||
|
||||
#### @LogExecution 어노테이션 사용법
|
||||
|
||||
@@ -217,16 +239,19 @@ public ResponseEntity<ApiResponseDto<CreateMemberResponseDto>> createMember(@Req
|
||||
##### 로그 출력 예시
|
||||
|
||||
**메서드 시작 시:**
|
||||
|
||||
```
|
||||
[START] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92)
|
||||
```
|
||||
|
||||
**메서드 성공 시:**
|
||||
|
||||
```
|
||||
[SUCCESS] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92) | 시간: 200ms
|
||||
```
|
||||
|
||||
**메서드 실패 시:**
|
||||
|
||||
```
|
||||
[FAILED] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92) | 시간: 23ms | 오류: 이미 존재하는 사용자 ID입니다
|
||||
```
|
||||
|
@@ -80,9 +80,9 @@ decorator.datasource.p6spy.log-format=%(sqlSingleLine)
|
||||
# ========================================
|
||||
# JWT 설정
|
||||
# ========================================
|
||||
token.expiration_time_access=180000
|
||||
token.expiration_time_access=900000
|
||||
token.expiration_time_refresh=604800000
|
||||
token.secret_key=c3RhbV9qd3Rfc2VjcmV0X3Rva2Vuc3RhbV9qd3Rfc2VjcmV0X3RhbV9qd3Rfc2VjcmV0X3Rva2Vu
|
||||
token.secret_key=c3RhbV9qd3Rfc2VjcmV0X3Rva2Vuc3RhbV9qd3Rfc2VjcmV0X3RhbV9qd3Rfc2VjcmV0X3RhbV9qd3Rfc2VjcmV0X3Rva2Vu
|
||||
|
||||
# ========================================
|
||||
# Swagger 설정
|
||||
|
Reference in New Issue
Block a user