본문 바로가기

BOOK

(16)
[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 또는 도메인 오브젝트만을 사용하는 인터페이스를 ..
[Refacotoring] - 마틴 파울러 1. 함수 추출하기 - 함수 인라인하기 2. 변수 추출하기 - 변수 인라인하기 3. 변수 캡슐화하기 4. 변수 이름 바꾸기 5. 상수 이름 바꾸기 6. 매개변수 객체 만들기 7. 여러 함수를 클래스로 묶기 8. 단계 쪼개기 -> 명확한 경계설정, 분리 캡슐화 7.1 레코드 캡술화하기 : 가변데이터를 저장하는 용도 -> 객체 선호(어떻게 저장했는지 숨긴채 세 가지 값을 각각의 메소드로 제공) 7.2 컬렉션 캡슐화하기 7.3 기본형을 객체로 바꾸기 7.4 임시 변수를 질의 함수로 바꾸기 7.5 위임 숨기기 (1) 위임 객체의 각 메서드에 해당 하는 위임 메서드를 서버에 생성한다. (2) 클라이언트가 위임 객체 대신 서버를 호출하도록 수정한다. 하나씩 바꿀 때마다 테스트한다. (3) 모두 수정했다면, 서버로부..
[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에는 기본적으로 두가지 종류의 예외 처리 방식이 있다. 런타임 예외가 발생하면 트랜잭션은 롤백된다. 반면에, 타깃메소드가 런타임 예..