본문 바로가기

BOOK/토비의스프링

(15)
[2권] 토비의 스프링 7일차 HandlerExceptionResolver 전략은 예외가 발상했을때 이를 처리하는 로직을 갖고 있다. DispatcherServlet은 등록된 HandlerExceptionResolver중에서 발생한 예외에 적합한 것을 찾아서 예외처리를 위임한다. 디폴트 전략은 AnnotationMethodHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 세 가지가 등록되어 있다. ViewResolver - 컨트롤러가 리턴한 뷰 이름을 참고해서 적절한 뷰 오브젝트를 찾아주는 로직을 가진 전략 오브젝트다. DispatcherServlet은 간 전략의 디폴트 설정을 DispatcherServlet.propert..
[2권] 토비의 스프링 6일차 컨트롤러가 뷰오브젝트를 리턴할수 있지만, 보통은 뷰의 논리적인 이름을 리턴해주며 DispatcherServlet의 전략인 뷰리졸버가 이를 이요해 뷰 오브젝트를 생성해준다 -> 대표적으로 사용되는뷰는 JSP/JSTL 뷰다. JSP파일로 만들어진 뷰템플릿과 JstlView클래스로 만들어진 뷰 오브젝트가 결합해서 최종적으로 사용자가 보게 될 HTML을 생성하는데, 이 경우 컨트롤러는 JstlView가 사용할 JSP 템플릿 파일의 이름을 리턴해줘야 한다. 컨트롤러가 리턴해주는 정보는 결국 모델과 뷰 두 가지이다. 스프링에는 ModelAndVIew라는 이름의 오브젝트가 있는데, 이 ModelAndView가 DispatcherServlet이 최종적으로 Controller에게 돌려받는 오브젝트이다. Dispatche..
[2권] 토비의 스프링 5일차 DispatcherServlet -> HandlerAdpater에 웹 요청 전달 ( HttpServletRequest 타입의 오브젝트를 같이 전달 ) -> HandlerResolver가 resolve() Method를 통해서 파라미터 전달 -> Proxy객체의 .invoke() 호출. 컨트롤러의 작업 1. 사용자 요청을 해석하는 것 2. 그에 따라 실제 비즈니스 로직을 수행하도록 서비스 계층 오브젝트에게 작업을 위임하는 것 3. 그리고 결과를 받아서 모델을 생성하는 것 4. 마지막으로 어떤 뷰를 사용할지 결정하는 것 컨트롤러가 어떤식이든지 DispatcherServlet에게 돌려줘야 하는 두가지 정보가 존재하는데, 그 중 하나가 모델이고 나머지 하나가 뷰이다.
[토비의 스프링 2권] 4일차 컨테이너 인프라빈 스프링은 BeanPostProcessor나 BeanFactoryPostProcessor 같은 확장 포인트를 제공한다. 이런 인터페이스를 구현한 크래스가 빈으로 되어 있다면 스프링 컨테이너는 스스로를 확장하는 데 이를 이용한다. 컨테이너의 기능을 확장해주는 6개의 빈(3.1버전) - ConfigurationClassPostProessors - AutowiredAnnotationBeanPostProcessor - AutowiredAnnotationBeanPostProcessor - RequiredAnnotationBeanPostProcessor - PersistenceAnnotationBeanPostProcessor 2.1 DAO 패턴 DTO 또는 도메인 오브젝트만을 사용하는 인터페이스를 ..
[2권] 토비의 스프링 2권 3일차 ContextLoaderListener 초기화 대상 : ApplicationContext 사용 설정 파일 : applicationContext.xml -> 보통 WEB-INF/applicationContext.xml에 위치. 자동으로 생성해주는 Context class : XmlWebApplicationContext -> 대체 가능한 Context class : AnnotationConfigWebApplicationContext Front Controller Servlet : DispatcherServlet Servlet Name : spirng으로 한다면 네임스페이스는 spring-servlet으로 구성되고 디폴트 설정파일은 WEB-INF/spring-servlet.xml로 구성 기본적으로 서블릿의 초..
[1권] 토비의 스프링 10일차 @Transactional 사용되는 PointCut은 TransactionAttributesSourcePointCut이다. @Transactional이 타입레벨이든 메소드 레벨이든 상관없이 부여된 빈 오브젝트를 모두 찾아서 포인트컷의 선정결과로 돌려준다. @Transactional은 기본적으로 트랜잭션 속성을 정의하는 것이지만, 동시에 포인트컷의 자동등록에도 사용된다. 트랜잭션의 전파는 트랜잭션 매니저를 통해 트랜잭션 동기화 방식이 적용하기 때문에 가능하다.
[1권] 토비의 스프링 9일차 트랜잭션 속성 DefaultTransactionDefinition - 전파 속성 : PROPAGATION_REQUIRED 트랜잭션 전파 PROPAGATION_REQUIRED 가장 많이 사용하는 트랜잭션 전파 속성 진행 중인 트랜잭션이 없으면 새로 만들고 있다면 기존 트랜잭션에 참여한다. PROPAGATION_REQUIRES_NEW 항상 새로운 트랜잭션을 시작한다. PROPAGATION_NOT_SUPPORTED 트랜잭션을 무시한다. AOP를 통해 여러개의 메소드를 적용하고 그 메소드중에서 특별난것을 뺄때 주로 사용한다. 스프링이 제공하는 TransactionInterceptor에는 기본적으로 두가지 종류의 예외 처리 방식이 있다. 런타임 예외가 발생하면 트랜잭션은 롤백된다. 반면에, 타깃메소드가 런타임 예..
[1권] 토비의 스프링 8일차 확장된 포인트컷 기존의 MethodMatcher는 Method에 Proxy를 적용하기 위해 사용하는 메소드이다. 스프링 빈 오브젝트를 프록시 오브젝트로 만들기 위해 사용하는 Method는 getClassFilter()이다. 만약 PointCut 선정 기능을 모두 적용한다면, 먼저 프록시를 적용할 클래스인지 판단하고 나서, 적용 대상 클래스라면 어드바이스를 적용할 메소드인지 확인하는 식으로 동작한다. -> 결국 두가지를 충족해야 타깃의 메소드에 어드바이스가 적용되는 것이다. 즉, 모든 빈에 대해 프록시 자동 적용 대상을 선별해야 하는 빈 후처리기인 DefaultAdvisorAutoProxyCreator는 클래스와 메소드 선정 알고리즘을 모두 갖는 포인트컷이 필요하다. 설정 즉, Parent Attribut..