Spring Framework과정 Day5 - HiroSung/Study GitHub Wiki
- Pointcut
- Annotation으로 생성자,클래스,메소드 위에 항상 정의되어야 함.
- @Pointcut("execution(public * controller.Ch13Controller.*(..))") public 메소드가 Ch13Controller에 정의된 모든 메소드와 변수가 수행될때 정의 메소드 이름은 중요하지 않고 리턴타입이 Pointcut을 사용할 메소드가 리턴하는 타입이 중요하다.
- 설정
- servlet-context.xml 에 namespace 선언 하고 아래항목 추가 aop:aspectj-autoproxy/
- pom.xml에 의존성 선언. AOP는 spring f/w이 아니기 때문에 의존성 설정을 해야 함. org.springframework spring-aop ${org.springframework-version} org.aspectj aspectjweaver 1.9.1
- AOP순서를 정의하는 방법
- 하나의 Method에서 2개의 컷이 정의되어 있다면, 가까운 정의부터 수행하고, 넓은 범위의 정의가 수행됨
- 포인트컷을 파일별로 작성해서 아래와 같이 @Order 로 정의하면됨
@Component @Aspect @Order(2) public class Ch13Aspect2 {
- Eclipse의 Editor에 돌아가는화살표 모양이 있으면 AOP aspect가 정의되어 있다는 것임.
- Spring Transaction
- AOP를 사용함.
- 선언적 방법과 프로그램밍에 의한 방법 모두 지원
- 선언적인 방법은 AOP 를 이용
- 프로그래밍방법은 spring transaction manager에 의한 코딩
- RuntimeException이 발생시 자동 Rollback 됨. (try-catch로 하면 안됨)
- root-context.xml 에 정의
<tx:annotation-driven transaction-manager="transactionManager"/>
- tx:jta-transaction-manager : 분산Tran 시 사용
- Spring Exception Handling
- AOP에서 최종적으로 Controller에서 예외처리함
- 그래서, @ControllerAdvice 를 사용함
- *.jsp
- jsp 페이지 상단에 <%@ page isErrorPage="true" %> 정의하면 exception 처리 내용을 받을 수 있음.
- 404 error는 WAS에서 처리 하는 것이므로, web.xml에서 정의햐야 함.
- 전체를 이루는 각각의 작은 단위 요소들이 의도대로 정확히 동작하는지 테스트 하는 것
- JUnit 사용
- spring 5이상은 junit 4이상이여야 한다.
- 주입받아 사용 가능
- spring test 모듈을 의존도 설정해야 함.
- 외부자원에 영향을 받지 않도록 해야 하므로, WAS 설정으로 테스트 하면 안되고, Application 가지고 있는 connection pool을 사용해야 함
- 단위테스트와 관련 어노테이션
- @RunWith, @ContextConfiguration, @WebAppConfiguration, @Transactional, @Rollback(true)
- 테스트 방법
- /src/test/java에 동일하게 package를 만들고, BaseTest.java 파일을 만들고, dao 폴더에 BaseTest를 상속받은 테스트 클래스를 만듬
- Project Explorer 에서 파일의 테스트 하고자 하는 method 선택 > 마우스 오른쪽 > Run as > JUnit Test 수행
- MAVEN도 TEST가 있음.
- build 까지 테스트 함
- HTML5는 양방향 통신이 되며, flash에서 사용했던 기능을 websocket으로 구현가능함
- echo예제
-
WebSocketSession : 연결객체. 하나가 연결되는 것이아니라 여러개라면 handler로 관리하는 객체를 만들어야 함.
-
handleTextMessage : 비동기 method. @Component public class EchoHandler extends TextWebSocketHandler { private static final Logger logger = LoggerFactory.getLogger(EchoHandler.class);
@Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { logger.info(session.getId() + " 연결 됨"); }
@Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { logger.info(session.getId() + "로 부터 [" + message.getPayload() + "] 받음"); session.sendMessage(new TextMessage("echo: " + message.getPayload())); }
@Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { logger.info(session.getId() + " 연결 끊김"); } }
-
- HTML5에서 websocket 태그는?
- ws 프로토콜
- websocket/echo : endpoint URL로.