확장 가능하고 보안성이 강화된 JWT 기반 인증 시스템
본 프로젝트는 JWT 기반 인증 시스템을 구현하였습니다. 멀티모듈 및 DDD 아키텍처와 Redis 캐싱을 통해 높은 성능과 확장성을 제공하며, 다층 보안 전략으로 안전한 사용자 인증을 보장합니다.
- 이메일 기반 회원가입/로그인
- JWT Access Token + Refresh Token 인증
- Redis-First, DB-Fallback 캐싱 전략
- Rate Limiting 및 계정 보안 정책
- 구조화된 API 응답 및 에러 처리
- Docker 기반 개발/배포 환경
- Backend: Java 21, Spring Boot 3.2, Spring Security
- Database: MySQL 8.0, Redis 7
- ORM: Spring Data JPA, Hibernate
- Build: Gradle Multi-Module
- API: RESTful API, Swagger/OpenAPI 3.0
- Infrastructure: Docker, Docker Compose
- Security: JWT, BCrypt, AOP Rate Limiting
docker-compose -f docker/docker-compose.yml up -d./gradlew :app:api:bootRun- Swagger UI: http://localhost:8080/swagger-ui.html
- Health Check: http://localhost:8080/actuator/health
- MySQL: localhost:3308 (nsuslab/password123)
- Redis: localhost:6381 (password123)
본 프로젝트는 멀티 모듈 프로젝트로 구성되어 있습니다. 각 모듈의 위계 및 역할을 분명히 하고, 아래와 같은 규칙을 적용합니다.
Root
├── app ( spring-applications )
│ └── 📦 api # api 서버
├── modules ( reusable-configurations )
│ └── 📦 jpa # JPA 설정
│ └── 📦 redis # Redis 설정
│ └── 📦 auth # JWT 인증 설정
└── supports ( add-ons )
├── 📦 jackson # Jackson 설정
└── 📦 logging # 로깅 설정
└── 📦 monitoring # actuator 설정
Swagger UI: http://localhost:8080/swagger-ui/index.html
| ErrorType | HTTP Status | 설명 |
|---|---|---|
| DUPLICATE_EMAIL | BAD_REQUEST | 이메일 중복 |
| USER_NOT_FOUND | BAD_REQUEST | 사용자 없음 |
| INVALID_CREDENTIALS | BAD_REQUEST | 잘못된 인증 정보 |
| INVALID_TOKEN | BAD_REQUEST | 유효하지 않은 토큰 |
| UNAUTHORIZED | UNAUTHORIZED | 인증 실패 |
| ACCOUNT_LOCKED | CONFLICT | 계정 잠김 |
| TOO_MANY_REQUESTS | TOO_MANY_REQUESTS | Rate Limit |








