이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
@SessionAttribute은
Controller 밖(Interceptor or Filte 등)에서 만들어 준
Session 데이터에 접근할 때 사용한다.
이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
Java에서 제공해주는 애노테이션이다.
package javax.validation;
/**
* Marks a property, method parameter or method return type for validation cascading.
* <p>
* Constraints defined on the object and its properties are be validated when the
* property, method parameter or method return type is validated.
* <p>
* This behavior is applied recursively.
*
* @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface Valid {
}
Java가 제공해주는
@Valid 애노테이션에는
특정 Validation 그룹으로
검증을 시킬 수 있는 기능이 없다.
이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
Model 정보를
HttpSession에 저장시켜주는 애노테이션이다.
예를 들어 여러 화면에서
배송 정보를 입력받아야 하는 화면이라면
HttpSession에 각 화면마다 필요한 정보를 저장하고
최종적으로 저장한 값들을 가져다 사용할 수 있다.
HttpSession에 값을 저장시키는 방법은
아래 코드처럼 HttpSession을 가져와 직접 저장할 수 있지만
@Controller
@RequestMapping
public class SampleController {
@GetMapping("/events")
@ResponseBody
public String hello(Model model, HttpSession httpSession) { // HttpSession을 가져온다.
Event event = new Event();
event.setName("goodGid");
model.addAttribute("event", event);
httpSession.setAttribute("event", event); // HttpSession 직접 저장
return "hello";
}
}
@SessionAttributes 애노테이션을 사용하면
보다 편리하게 저장할 수 있다.
만약 해당 클래스내에서
SessionAttributes 애노테이션에 정의된 Key와
동일한 Key로 Model에 값을 Set해주는 행위가 있을 시 자동으로 Session에도 저장시켜준다.
예를 들어 다음 코드에서는
SessionAttributes의 Key는 event이고
model에 저장하는 Key 값도 event이기 때문에
자동으로 Session에도 저장이된다.
Controller
@Controller
@RequestMapping
@SessionAttributes("event")
public class SampleController {
@GetMapping("/events")
@ResponseBody
public String hello(Model model) {
Event event = new Event();
event.setName("goodGid");
model.addAttribute("event", event); // @SessionAttributes("event") 코드에 의해
// 동시에 HttpSession에도 저장된다.
return "hello";
}
}
TC
@Test
public void helloTest() throws Exception {
mockMvc.perform(get("/events"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(request().sessionAttribute("event", notNullValue()));
}
@SessionAttributes(“event”) 코드에 의해
Model에 저장하는 동시에
HttpSession에도 저장이 되기 때문에
Test Code는 성공한다.
참고로 TC에서 사용한
request( ) 메소드의 FQCN (Fully Qualified Class Name)는 다음과 같다.
org.springframework.test.web.servlet.result.MockMvcResultMatchers.request
@SessionAttributes를 선언한 클래스 내에서만
선언시 명시한 이름에 해당하는
Model을 Session에 넣어줄 뿐
여러 Controller에 걸쳐서는 적용이 안된다.
예를 들면
``` java @SessionAttributes(“event”) public class A_Controller { model.addAttribute(“event”, event); … }
이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
단일 데이터를
각각 받아와 객체를 생성하지 않고
public class Event {
private String name;
@Max(10)
private Integer count;
}
@GetMapping("/events")
@ResponseBody
public Event hello(@RequestParam String name, @RequestParam Integer count){
Event event = new Event();
event.setName(name);
event.setCount(count);
return event;
}
@GetMapping("/events")
@ResponseBody
public Event hello(Event event){
return event;
}
public Event hello(@ModelAttribute Event event)
= public Event hello(Event event)
이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
@Controller를 사용한 클래스에서
Model 정보를 초기화 할 때 사용한다.
2가지 예시 상황을 통해
ModelAttribute 속성에 대해 알아보자.
Key 세팅 순서에 따른 결과
Key 값의 대소문자 구분 유무
Memcached는
DB / API 통신을 줄이기 위해
데이터를 캐싱처리하는 데에 사용하면 좋은 캐시이다.
Redis는 트래픽이 몰리면
응답속도가 불안정하다고 한다.
반면 트래픽이 몰려도
Memcached의 응답 속도는
안정적인 편이라고 한다.