validation 과정을 지원하는 웹 애플리케이션 형식을 만드는 과정에 대해 알아볼거다. 그러니까 해당 input이 유효한지, 안 유효한지를 알려주는 웹 애플리케이션 형식을 어떻게 만드는지 알아볼 것이다.
이 셋은 전부 Validation이라는 package와 관련이 되어 있다. Spring Boot의 경우 Validation starter을 통해 이 annotation들 사용이 가능.
annotation이 매우 직관적인데, @NotNull은 Null을 허용하지 않는 annotation이다. 공백이나 empty string은 지원한다는 점 유의. 이와 연관된 annotation이 @NotEmpty와 @NotBlank가 있는데 링크 참고
@Size는 최소/최대 크기를 동시에 지정할 때 사용되며 @Min은 최소 크기만을 지정할 때 사용. @Max는 최대 크기만을 지정할 때 사용.
이걸로 특정 값이 만족해야하는 조건을 설정하면, 조건에 맞는지 안 맞는지는 어떻게 확인을할까?
여기서 BindingResult라는 class가 등장하게 된다. validation에 오류가 있을 경우, 해당 class에 관련 오류를 저장해놓는다. 생각보다 많은걸 할 수 있는데 자세한건 이 글 참고.
이 튜토리얼의 경우 해당 class를 어떻게 활용했냐면 코드에서는 단순히 에러가 있는지 없는지를 확인을 했으며, html 파일에서 오류가 있을 경우 무슨 오류가 있었는지를 출력하는데도 활용이 되고 있다. 후자의 경우 thymeleaf가 꽤 큰 역할을 하고 있다. (th:errors 부분이 error message를 출력하는 것과 관련이 되어 있음)
이번 튜토리얼에서 controller을 만드는 방식은 기존과 약간 다르다. 원래는 controller class를 딱히 무엇을 implement하거나 extend하는 것 없이 @Controller annotation이 달린 애로 만들었다.
그러나 이번에는 @Controller로 controller 역할 하는 class가 뭔지 지정은 했으나, WebMvcConfigurer을 implement하는 형태로 구현을 했다. 이게 뭐냐면 spring의 MVC controller 관련 configuration을 조절하는 것이다.
WebMvcConfigurer은 사실 Spring MVC model에 대한 configuration을 수정하는데 사용된다. 이 때문에 보통은 @Configuration annotation이 implement한 class에 달려 있다. 하지만 여기는 그렇지 않고, @Controller이라는 annotation이 달려있다. 이유는... 그냥 이 class가 controller을 나타내기 때문이다. 그러면 WebMvcConfigurer은 왜 implement하는가? 그 이유는 spring MVC controller configuration을 좀 수정하고, 그걸 기반으로 동작하는 controller이라 그럴 뿐이다.