TIL
[250325 TIL] Spring 숙련 강의 1주차
도원좀비
2025. 3. 25. 21:42
📌 오늘 학습한 내용 요약
1️⃣ IoC / DI / Singleton
- IoC: 객체 제어권을 개발자가 아닌 Spring 컨테이너가 갖도록 함.
- DI: 객체 간 의존성을 Spring이 주입하여 결합도를 낮춤.
- Singleton: 객체 하나만 생성하여 재사용. Spring Bean 기본 전략.
- 상태를 가지면 안 됨 → 반드시 stateless 설계 필요
2️⃣ Spring Bean 등록과 의존성 주입
- @ComponentScan으로 자동 등록, @Configuration + @Bean으로 수동 등록
- 같은 타입의 Bean 충돌 시 → @Primary, @Qualifier, Bean 이름 지정으로 해결
- 의존성 주입 방식
- 생성자 주입(권장) / Setter 주입 / 필드 주입(지양) / 일반 메서드 주입
- @RequiredArgsConstructor로 생성자 자동 생성
3️⃣ Spring Validation
- Validation 종류
- 프론트 / 서버 / DB 검증 → 전부 사용해야 안전
- BindingResult: 검증 오류를 수집하는 객체. 필수로 사용 시 컨트롤러 진입 가능
- Bean Validation
- @NotBlank, @NotNull, @Range 등 Annotation 기반 검증
- @Valid (표준) vs @Validated (Spring 제공, groups 기능 지원)
- 검증 로직을 DTO에 Annotation으로 선언하면 로직이 깔끔해짐
- ObjectError: 필드 단위가 아닌 객체 단위 검증 (ex: 가격 * 수량 ≥ 10000)
4️⃣ 등록 vs 수정 API의 Validation 충돌 해결
- DTO 분리: ProductSaveRequestDto, ProductUpdateRequestDto
- groups 사용: @Validated(SaveCheck.class)
5️⃣ @ModelAttribute vs @RequestBody
| 구분 | ModelAttribute | RequestBody |
| 데이터 | 쿼리/폼 파라미터 | JSON |
| 바인딩 단위 | 필드 단위 | 객체 단위 |
| 실패 시 | 컨트롤러 호출 O | 호출 X |