공부/Spring

[스프링 인 액션] Chapter 2 웹 어플리케이션 개발하기

Lai_Khan 2022. 4. 18. 11:45
이 글은 크레이그 윌즈의 "스프링 인 액션(5판)"을 읽고 간략히 정리한 글이다.

정보 보여주기

데이터를 가져오고 요청을 처리하는 것이 컨트롤러.

데이터를 저장하는 것이 모델.

브라우저에 보여주는 데이터를 HTML로 나타내는 것은 뷰.

 

@Slf4j → 이 애노테이션은 다음 코드를 추가한 것과 같은 효과를 낸다.

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(클래스이름.class);

 

@Controller 애노테이션은 클래스가 컨트롤러로 식별되게 하며, 컴포넌트 검색이 되게 한다. Application Context가 Bean으로 이 클래스의 인스턴스를 자동 생성한다.

 

@RequestMapping, @GetMapping, @PostMapping 등의 애노테이션은 요청받는 경로를 나타낸다.

클래스 수준에서는 @RequestMapping을, 메소드 수준에서는 더 특화된 @GetMapping, @PostMapping 등을 사용하는 것이 좋다.

 

Thymeleaf 의존성을 추가하면 스프링 부트의 Auto Configuration에서 classpath의 Thymeleaf를 찾아 빈을 자동으로 생성한다.

 

폼 입력 유효성 검사하기

스프링에서 지원하는 Bean Validation API를 사용해 입력한 데이터의 유효성을 검사할 수 있다.

Hibernate 컴포넌트가 이 유효성 검사 API를 구현한다.

 

선언할 수 있는 유효성 검사 규칙

  • @NotNull
  • @Size
  • @NotBlank
  • @CreditCardNumber
  • @Pattern
  • @Digits

모든 애노테이션은 message 속성을 가지고 있다. 이 속성을 통해 유효성 규칙을 충족하지 못했을 시에 보여줄 메시지를 정의할 수 있다.

hibernate bean validation 종류 : https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-builtin-constraints

 

그리고 컨트롤러의 메서드로 전달되는 인자 앞에 @Valid 애노테이션을 추가해야 한다.

 

뷰 컨트롤러로 작업하기

데이터를 처리하지 않는 간단한 컨트롤러는 다른 방법으로 정의할 수 있다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
	@Override
    public void addViewControllers(ViewControllerRegostry registry) {
    	registry.addViewController("/").setViewName("home");
    }
}

 

뷰 템플릿 라이브러리 선택하기

스프링에서 지원되는 템플릿

  • FreeMarker
  • Groovy
  • JSP
  • Mustache
  • Thymeleaf

의존성을 추가하면 자동으로 뷰로 연결해준다.

 

JSP의 경우, 서블릿 컨테이너가 JSP 명세를 구현하고 있기 때문에 의존성에 추가할 필요가 없다. 또한 자바 서블릿 컨테이너는 JSP 파일을 /WEB-INF 밑에서 찾기 때문에 애플리케이션을 JAR로 생성하면 안되고 WAR로 생성해야 한다.

 

템플릿 캐싱

기본적으로 템플릿은 최초로 사용될 때 한번만 파싱되며 이 결과는 캐시에 저장된다.

하지만 개발 시에는 이 기능이 불편한데 이를 비활성화 시킬 수 있다. application.properties 파일에 다음을 추가해주면 된다.

spring.thymeleaf.cache=false	// Thymeleaf
spring.freemaker.cache=false	// FreeMaker
spring.groovy.template.cache=false	// Grrovy
spring.mustache.cache=false	// mustache

근데 사실 그냥 DevTools를 사용하는게 편하다. 자동으로 모든 템플릿 라이브러리 캐싱을 비활성화한다. 그리고 실제 배포시에는 비활성화되므로 문제없다.