Spring Wev MVC 강의 정리 (3)
25 Sep 2022패스트 캠퍼스 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
- resources 안에 banner.txt 파일 생성해서 원하는 배너 추가 가능
- 설정 가능한 properties
- 배너 커스터마이징
-
config
- spring.config.activate.on-profile
- spring.profiles는 deprecated
- spring.connfig.import
- spring.config.use-legacy-processing
- spring.config.activate.on-profile
-
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 등