# 가벼운 인증 구현 계획 (Lightweight Authentication Implementation Plan)
이 계획은 반복적인 백엔드 구현 연습을 위해 보일러플레이트(boilerplate)를 최소화하면서 인증 기능을 구현하는 옵션들을 제안합니다.
## 사용자 확인 사항
> [!IMPORTANT]
> **Spring Boot 버전 관련**: [build.gradle.kts](file:///Users/gimjaeman/Desktop/coding/practice/in-c-backend/build.gradle.kts)에서 버전이 `4.0.1`로 설정되어 있습니다. 현재 Spring Boot 4는 공식 출시 전이므로(현재 최신은 3.4.x), 의도된 설정이 아니라면 안정성을 위해 `3.4.1` 등으로 조정을 검토해 보세요. (사용자께서 다시 4.0.1로 복구하셨으므로 이 설정을 유지하겠습니다.)
## 제안하는 접근 방식
### 옵션 1: HandlerInterceptor (연습용으로 가장 추천)
Spring Security 프레임워크의 복잡함 없이, Spring Web의 표준 기능을 사용하여 요청 헤더의 토큰을 체크하는 방식입니다.
**장점:**
- 추가 의존성 없음 (Spring Web만 사용).
- "마법" 같은 내부 필터 없이 로직의 모든 단계를 직접 볼 수 있음.
- 구현 속도가 매우 빠르고 테스트에서 모킹(Mocking)하기 쉬움.
**변경 예정 사항:**
- [신규] [config/WebConfig.java](file:///Users/gimjaeman/Desktop/coding/practice/in-c-backend/src/main/java/com/example/in_c_backend/config/WebConfig.java): 인터셉터 등록.
- [신규] [interceptor/AuthInterceptor.java](file:///Users/gimjaeman/Desktop/coding/practice/in-c-backend/src/main/java/com/example/in_c_backend/interceptor/AuthInterceptor.java): `X-AUTH-TOKEN` 헤더 체크 로직.
---
### 옵션 2: Spring Security + Basic Auth
표준적인 방식이지만, 작은 연습용 프로젝트에서는 다소 무겁거나 내부 동작이 불투명할 수 있습니다.
**장점:**
- 실제 산업 표준 프레임워크를 익힐 수 있음.
- 로그인/로그아웃 처리가 내장되어 있음.
**변경 예정 사항:**
- [수정] [build.gradle.kts](file:///Users/gimjaeman/Desktop/coding/practice/in-c-backend/build.gradle.kts): `spring-boot-starter-security` 의존성 추가.
- [신규] `config/SecurityConfig.java`: 인메모리 유저 및 접근 권한 설정.
---
### 옵션 3: JWT (현대적인 웹 표준)
실제 API 개발 연습에 가장 좋지만, 초기 설정 코드(Boilerplate)가 많습니다.
**장점:**
- 실제 서비스에서 사용하는 상태 없는(stateless) 인증 방식.
- CORS 및 보안 베스트 프렉티스를 학습하기 좋음.
**변경 예정 사항:**
- [수정] [build.gradle.kts](file:///Users/gimjaeman/Desktop/coding/practice/in-c-backend/build.gradle.kts): JWT 라이브러리 추가.
- [신규] `security/JwtTokenProvider.java`
- [신규] `security/JwtFilter.java`
## 검증 계획
### 자동화 테스트
- `./gradlew test`를 실행하여 기본 연결 확인.
- `MockMvc` 테스트를 작성하여 토큰이 없는 경우(401)와 유효한 토큰이 있는 경우(200)를 검증.
### 수동 검증
- Postman 또는 `curl`을 사용하여 `X-AUTH-TOKEN` 헤더 포함 여부에 따른 응답 확인.슬슬 근육 붙는다잉