📘 마무리 요약 정리
1️⃣ 🧰 Spring Container
→ 역할: Bean 생성, 의존성 주입, 생명주기 관리
→ 예시: ApplicationContext, BeanFactory
2️⃣ ⚙️ Spring Bean
→ @Component, @Service, @Repository, @Controller
→ 기본 스코프: 싱글톤 (singleton)
→ 직접 new 하지 않고 Spring이 대신 생성
3️⃣ ♻️ IOC / DI
| 개념 | 설명 |
|---|---|
| 🧭 IoC (제어의 역전) | 객체 생성과 제어를 Spring에게 위임 |
| 🔗 DI (의존성 주입) | 필요한 객체를 Spring이 주입 |
→ 이 두 개념을 통해 객체 간의 결합도 ↓, 유연성 ↑
4️⃣ 🧍♂️ Singleton Pattern
→ Spring Bean은 기본적으로 싱글톤으로 관리됨
→ ✅ 성능, 메모리 효율성
→ ⚠️ 상태(state)를 유지하면 안 됨 → stateless 설계 필수
5️⃣ 🛠️ Spring Bean 등록 방법
| 방식 | 설명 | 키워드 |
|---|---|---|
| ✅ 자동 등록 | 어노테이션 기반 등록 | @Component, @Service, @Controller, @ComponentScan |
| ⚙️ 수동 등록 | 명시적으로 코드로 등록 | @Configuration, @Bean |
→ Spring Boot는 기본적으로 자동 등록 방식을 사용
6️⃣ 🔧 의존 관계 주입 (DI 방식)
| 방식 | 설명 | 특징 |
|---|---|---|
| ✅ 생성자 주입 | 생성자 + @Autowired | 불변성, 테스트 용이 |
⚡ @RequiredArgsConstructor | final 필드 기반 생성자 자동 생성 | Lombok 편의성 |
→ 생성자 주입은 Spring 없이도 테스트 가능 → 가장 권장
7️⃣ 🛡️ Validation
| 구성 요소 | 설명 |
|---|---|
@Valid, @Validated | 어노테이션 기반 검증 적용 |
BindingResult | 오류 정보 담는 객체 (필수!) |
| 서버 검증 | 반드시 수행해야 하는 핵심 단계 |
| DB 검증 | NotNull, Unique 등 최종 방어선 |