-
2021.08.19 기록장TIL 2021. 8. 18. 22:30
ToDo
- 알고리즘 문제
- 토비의 스프링
Done
- 토비의 스프링
Weekly goal
- 책 읽기
- 토비 스프링 코딩
- 7월 회고 쓰기
토비의 스프링
608p.
메시지 컨버터는 xml, json을 이용할 때 사용할 수 있다. http 요청 메시지 본문과 http응답 메시지 본문을 통째로 메시지로 다루는 방식이다.
@RequestBody, @ResponseBody를 이용할 수 있다. 어댑터는 메서드 파라미터를 확일 할 때 뭔가를 만들어 줘야 하는 예로 modelAttribute나 pathvariable 등이 붙어있으면 webDataBinder를 만들고 모델 만들고, 프로퍼티 바인딩해주고, 검증 절차를 지나는데 RequestBody를 만나면 바인딩 절차에서 컨버터를 사용해서 변환을 해준다.
ResponseBody도 뷰로 나갈때 뷰 리졸버가 아닌 컨버터가 사용이 된다.
가장 자주 사용하는 컨버터는 MappinJacksonHttpMessageConvter이다. 최근에는 잭슨 라이브러리에서 컨버터가 바뀐 것으로 알고 있다. MappinJackson2 HttpMessageConvter라고 한다.
내부는 jackson Object mapper를 이용해서 자바 오브젝트에 json 문서를 변환해준다.
json의 각 요소와 일치하는 프로퍼티에 자동으로 바인딩된다.
622p.
우리가 자주 사용하는 어노테이션 컨트롤러를 확장할 수 있는 방식은 AnnotationMethodHandlerAdapter를 확장하는 방법이다.
예로 세션들을 저장하는 스토어의 저장 방식을 변환한다던지.
만약 대규모의 사용자를 처리해야 하는 애플리케이션이라면 물론 스케일업이나 스케일아웃 등을 생각할 수 있다.
세션 DB를 사용하거나.
이유는 세션을 유지하기가 쉽지 않기 때문이다. 서버가 많이지만 클러스터링도 부담이 될 수 있기 때문이다.
애초에 세션을 사용하지 않는다거나 대규모 클러스터 내에서 데이터 그리드에 세션정보를 저장할 수 있을 것이다.
이를 하려면 SessionAttributeStore인터페이스를 구현해서 세션정보를 저장하는 방법을 바꿀 수 있다는 것이다.
세션정보는 SessionAttributeStore인터페이스를 구현한 클래스에 의해 저장되기 때문이다.
디폴트는 DefaultSessionAttributeStore.class가 사용되고 있다.
세션은 언제 만들어지나?
https://soon-devblog.tistory.com/2
HttpSession은 "언제" 만들어질까?
이 글에서 알 수 있는 내용 -Tomcat은 WAS? No! Just Servlet Container! -HttpSession은 언제 만들어질까? -HttpSession을 사용하는 방법 -Session은 어떻게 유지될까? [Tomcat은 WAS? No! Just Servlet Containe..
soon-devblog.tistory.com
위를 보면 톰캣 (was, 서블릿 컨테이너)가 http Session을 만드는 것을 볼 수 있다.
톰캣에는 어떻게 저장이 될까?
서블릿 컨테이너에 저장된다. map 형태인데
톰캣은 sessionId를 Jsessionid라는 값을 쿠키에 넣으라고 브라우저에게 지시하는 것
톰캣 에서는 어떻게 JSESSIONID 를 만드는 것일까?
개요 이번 포스팅에서는 톰캣 에서 JSESSIONID를 어떤 방식으로 만드는지에 대해서 포스팅 해보겠습니다. 왜 하필 톰캣인가? 사실 자바 서블릿은 완전한 구현체가 아닌 일종의 표
semtax.tistory.com
624p.
본인이 자주 사용했던 WebArgumentResolver이다.
컨트롤러의 메서드 파라미터를 원하는 값으로 받는 것이다.
예로 특정 http 헤더에서 특정 값을 꺼내 DB에 조회를 해야 한다면
컨트롤러 메서드에 매칭 되기 전에 빈으로 만들어둔 WebArgumentResolver에 의해서 다 처리되는 것이다.
spring에서는 커스텀으로 만들고 adapter의 customArgumentResolvers에 등록까지 해줘야한다.
'TIL' 카테고리의 다른 글
2021.08.21 기록장 (0) 2021.08.20 2021.08.20 기록장 (0) 2021.08.19 2021.08.17~18 기록장 (0) 2021.08.16 2021.08.16 기록장 (0) 2021.08.15 2021.08.15 기록장 (0) 2021.08.14