스프링으로 정보 보여주기
: 작성할 애플리케이션의 도메인을 이해하고, 애플리케이션의 관심사를 Domain으로 나눠 구분한다.
Lombok 라이브러리 사용
- 스프링 라이브러리는 아니지만 Java + Spring에서 유용하게 쓰인다. getter, setter 등 boilerplate를 줄여주고, 다양한 형태의 생성자, 로깅, 빌더를 지원한다.
1
2
3
4
@Data // * 혹은 @Getter / @Setter
public class FooEntity {
private String id;
}
1
2
3
4
5
6
7
8
@Slf4j // *
@Controller
public class FooController {
@GetMapping("/users")
public String func(User user) {
// ...
}
}
- 기존에는
@RequestMapping(method = RequestMethod.GET)
처럼 HTTP 메소드를 구별했다고 한다. 스프링 4.3 이후에 생긴@GetMapping
과 같은 각 메소드에 특화된 어노테이션을 사용하는 것이 권장된다.@RequestMapping
은 공통적인 기본 경로를 구별할 때 사용하면 좋다. - 위의 경우 (Client)뷰에서
/users
로 적절히 유효한 데이터를 전달하면, (Server)컨트롤러에서는func()
가 호출되고 전달되는 데이터들과 바인딩된 속성을 갖는 User 객체를 인자로 받게 된다.- 이 때 클라이언트로부터 항상 유효한 데이터를 받으리란 보장이 없다. 따라서, 서버쪽에선 유효성을 검증해야 한다.
유효성 검증
스프링 MVC는 일반적으로 직접 유효성 검증하는 로직을 작성하거나, 자바 빈 유효성 검사 API나 Hibernate 컴포넌트의 유효성 검증 어노테이션을 이용한다.
1 2 3 4 5 6 7 8 9
@Data public class FooEntity { @NotNull @Size(min=5, message="Name must be at least 5 characters long") private String name; @Pattern(regexp="^(0[1-9]|1[0-2])([\\/])([1-9][0-9])") // MM/YY private String expiration }
- 간단한 경우 null check, size 검사 등을 할 수 있고, regex를 통해 검증을 강화할 수 있다.
- 이처럼 어노테이션을 활용하면, 컨트롤러단에서 인자로받는 객체에
@Valid
or@Validated
어노테이션을 붙여준다.
```java … import org.springframework.validation.Errors; … @PostMapping public String func(@Valid User user, Errors errors) { if (error.hasErrors()) { return “error”; } // … }
애플리케이션을 실행하는 두 가지 방법
- 빌드 후
java -jar
로 JAR 실행 spring-boot:run
실행
뷰
- Spring MVC 프레임워크를 사용할 때는 간단한 뷰까지 같이 작성을 해주는 경우가 많다.
- JSP, Thymeleaf, FreeMarker, Mustache, Groovy 등 다양한 방법이 있다. 저 중 타임리프가 조금 편하다고 하고, 머스타치도 나쁘지는 않았던 것 같다.
- 뷰 컨트롤러: 스프링 컨트롤러는
@Controller
어노테이션을 이용하는데, 사용자의 입력을 처리하지 않는 간단한 컨트롤러의 경우가 있다.- e.g) WebConfig: 보통 WebMvcConfigurer를 implements해 구현한다.