diff --git a/README.md b/README.md index cbc77af..ca4c3ef 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,29 @@ public enum ApiResponseCode { - **일관된 구조**: `code`, `message`, `description`, `data` 필드로 표준화 - **제네릭 활용**: ``를 통해 다양한 데이터 타입 지원 -### 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> createMember(@Req ##### 로그 출력 예시 **메서드 시작 시:** + ``` [START] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92) ``` **메서드 성공 시:** + ``` [SUCCESS] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92) | 시간: 200ms ``` **메서드 실패 시:** + ``` [FAILED] 회원 등록 | 호출경로: MemberController.createMember | 사용자: 고명빈(kmbin92) | 시간: 23ms | 오류: 이미 존재하는 사용자 ID입니다 ``` diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 541e6a8..87b9ad4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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 설정