스프링 구조가 조금 헷갈려서 짚고 넘어갔다.
1. Controller → 클라이언트 요청 받음 (Service 호출)
2. Service → 기능을 선언함 (계산 로직)
3. ServiceImpl → 실제 구현을 함 (Repository를 사용)
4. Repository → 저장 관련 인터페이스
5. JdbcTemplateRepository → DB에 SQL 날리는 실제 로직
Client → Controller → Service → Repository → DB
↑ ↓ ↓
응답 JSON 비즈니스 SQL 실행
┌────────────────────────────┐
│ Client (웹, 앱) │
└────────────┬───────────────┘
│ HTTP 요청
▼
┌────────────────────────────┐
│ Controller (입구) │
│ - 요청 처리 │
│ - `Service` 호출 │
└────────────┬───────────────┘
│ 메서드 호출
▼
┌────────────────────────────┐
│ Service (인터페이스) │
│ - 로직 정의 (선언만 함) │
└────────────┬───────────────┘
│ 구현체 호출
▼
┌────────────────────────────┐
│ ServiceImpl (구현체) │
│ - 비즈니스 로직 수행 │
│ - `Repository` 호출 │
└────────────┬───────────────┘
│ 메서드 호출
▼
┌────────────────────────────┐
│ Repository (인터페이스) │
│ - `DB` 동작 메서드 선언 │
└────────────┬───────────────┘
│ 구현체 호출
▼
┌────────────────────────────┐
│ JdbcTemplateRepository │
│ - 실제 SQL 실행 │
│ - DB와 직접 통신 │
└────────────┬───────────────┘
│ SQL 실행
▼
┌────────────────────────────┐
│ Database │
└────────────────────────────┘