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