17.1 요구사항 분석 및 계층형 아키텍처 조립
이 챕터는 이전까지 배운 모든 기술 스택(Spring MVC, JPA, Security, Redis, 테스팅)을 통합한 소규모 실전 프로젝트를 함께 구조화합니다.
1. 미니 프로젝트: 간단한 할일(Todo) API 서버
기능 요구사항
- 회원 가입 / 로그인 (JWT 인증)
- 할일 목록 CRUD (자신의 할일만 조회/수정/삭제 가능)
- 할일 완료 통계 API (오늘 완료된 개수)
- 레디스 캐싱으로 통계 1분마다 갱신
패키지 구조 (계층형 아키텍처)
com.example.todo
├── domain/
│ ├── user/
│ │ ├── User.java (Entity)
│ │ ├── UserRepository.java
│ │ ├── UserService.java
│ │ └── UserController.java
│ └── todo/
│ ├── Todo.java (Entity)
│ ├── TodoRepository.java
│ ├── TodoService.java
│ └── TodoController.java
├── global/
│ ├── config/
│ │ ├── SecurityConfig.java
│ │ └── RedisConfig.java
│ ├── exception/
│ │ ├── GlobalExceptionHandler.java
│ │ └── ErrorCode.java
│ └── auth/
│ ├── JwtProvider.java
│ └── JwtFilter.java
└── TodoApplication.java
2. 의존성 조립 (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'com.mysql:mysql-connector-j'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.boot:spring-boot-testcontainers'
testImplementation 'org.testcontainers:mysql'
}