Spring Wev MVC 강의 정리 (3)

패스트 캠퍼스 Spring Web MVC 강의 정리

@Service

  • 비즈니스 로직을 담당하는 컴포넌트
  • 도메인 모델과 컨트롤러 사이에 위치
  • 클래스 네이밍을 반드시 ‘-Service’로 할 필요는 없으나 관례적으로 사용됨식
  • 구현 방식
    • 인터페이스 + 클래스
      • 인터페이스를 요구사항에 따른 기능문서로 작성
      • 같은 기능을 하는 다양한 구현체를 작성할 필요가 있을 때 적합
    • 클래스
      • 실무에서 즐겨 사용되는 방식
      • 인터페이스를 추가 작성하는 수고를 덜게 됨
      • 컨트롤러 레이어와 결합도는 더 증가하게 됨

Validation

  • 사용자 입력값의 오류를 처리하기 위해서는 방어 코드가 추가됨
  • 방어 코드는 복잡하고 반복적(예. boilerplate code)
  • 애노테이션 기반으로 데이터 검증을 돕는 JSR-303, JSR-380 표준 도입
    • 검증 구현과 비즈니스 로직 분리하여 비즈니스 로직에 집중
    • 간결한 코드 & 가독성
  • spring boot 지원
    • spring-boot-starter-validation 의존성
    • Spring Boot 2.3 이전에는 기본 포함
    • Spring Boot 2.3 이후에는 직접 넣어줘야 함
  • @Validated
    • 메소드 파라미터에 validation 애노테이션을 직접 사용해서 검증하는 방법
    • 클래스에 @Validated 애노테이션 필요
    • 발생하는 예외: ConstraintViolationException, 직접 처리해야 하는 예외
    • Configuration Properties 클래스에 적용 가능
  • @Valid
    • 검증하려는 데이터 객체에만 검증 로직 적용
    • @Validated 애노테이션 필요 X
    • 발생하는 예외: MethodArgumentNotValidException
    • ResponseEntityExceptionHandler 지원 가능

Spring Boot Properties

  • logging

    • debug
    • trace
    • logging.level.{package}
    debug=true
    trace=true
    logging.level.com.test.project=debug
    logging.level.org.springframework.web.servlet=debug
    
  • banner

  • config

    • spring.config.activate.on-profile
      • spring.profiles는 deprecated
    • spring.connfig.import
    • spring.config.use-legacy-processing
  • main

    • spring.main.banner-mode
    • spring.main.lazy-initialization: 빈을 실제로 사용할 때 초기화
  • json

    • spring.jackson, spring.gson 관련 설정
  • web

    • spring.hateoas.use-hal-as-default-json-media-type
    • spring.mvc.converters.preferred-json-mapper
    • spring.mvc.format.date
    • spring.mvc.format.date-time
    • spring.mvc.format.time
    • spring.mvc.view.prefix
    • spring.mvc.view.suffix
  • web (servlet.multipart)
    • spring.servlet.multipart.enabled
    • spring.servlet.multipart.file-size-threshold
    • spring.servlet.multipart.location
    • spring.servlet.multipart.max-file-size
    • spring.servlet.multipart.max-request-size
    • spring.servlet.multipart.resolve-lazily
  • server
    • server.error.whitelabel.enabled
    • server.port
    • http encoding, session, ssl, tomcat 등