스마트웹앱콘텐츠전문가/프레임워크

[4.26]스프링(DB연동, 스프링MVC)

9D4U 2016. 4. 26. 12:22
728x90
반응형

[Jdbc Template를 사용하는 이유]

1. 반복코딩을 줄이기 위해

2. @Transactional => tx처리

3. rowMapper를 통한 bean처리



[스프링 트랜잭션 처리] @Transactional

1.@Transactional 애노테이션이 제대로 동작하기 위해 설정 파일에 다음의 두 가지 내용을 추가

- PlatformTransactionManager 빈 설정 : 스프링은 구현 기술에 상관없이 동일한 방식으로 트랜잭션을 처리하기 위해 이 인터페이스를 사용

- @Transactional 애노테이션 활성화 설정 : <tx:annotation-driven> 태크






2. 트랜잭션 범위에서 실행하고 싶은 스프링 빈 객체의 메서드에 @Transactional 애노테이션 붙이기: .selectByEmail, .changePassword, .update 쿼리들을 하나의 작업단위 즉, 트랜잭션으로 묶음




3. 트랜잭션 관련 설정과 사용할 클래스를 빈으로 추가


4. 암호 변경 기능을 실행하는 메인 클래스를 작성




5. 트랜잭션의 커밋 여부를 확인하기 위해 스프링이 출력하는 로그 메시지를 볼수 있는 Log4j를 사용

-pom.xml에 Log4j 모듈을 추가(=관련 의존 추가)

-log4j.xml에 jdbc 관련 로그 메시지를 출력하기 위해 설정함






6.결과 확인



[메인 실행 후, 콘솔에 명령을 넣고 DB 데이터 확인]


[맞지 않은 비밀번호를 대입하여 롤백확인]


===============================================

※한 가지 의문점은... 도대체 트랜잭션을 시작하고, 커밋하고, 롤백하는 것은 누가 어떻게 처리하는 걸까??? ::: 프록시 :::


(1)트랜잭션도 공통 기능 중의 하나이다. 따라서 스프링은 @Transactional 애노테이션을 이용해서 트랜잭션을 처리하기 위해 내부적으로 AOP를 사용한다.

-실제로 @Transactional 애노테이션을 적용하기 위해 <tx:annotation-driven> 태그를 사용하면, 스프링 내부적으로 @Transactional 애노테이션이 적용된 빈 객체를 찾아서

 알맞은 프록시 객체를 생성한다. 따라서, 메인 클래스에서 getBean코드를 실행하면 ChangePasswrodService 객체 대신에 트랜잭션 처리를 위해

 생성한 프록시 객체를 리턴한다.


(4) <tx:annotation-driven> 태그의 주요 속성

: @Transactional 애노테이션이 적용된 빈을 찾아서 트랜잭션을 처리해주는 프록시를 생성하는 기능이 활성화됨.

  이 기능은 AOP(관점지향-프록시)를 사용하며, 또햔 트랜잭션 관리를 위해 PlatformTransactionManager인터페이스를 사용

(5)자바 설정을 사용는 경우 : @EnableTransactionManagement 애노테이션 이용

:자바 설정을 하는 경우 xml설정에서 사용했던 <tx:annotation-driven> 대신 @EnableTransactionManagement 애노테이션을 사용하면 된다.



[자바 설정]



[메인 클래스와 결과확인]



[자바설정과 XML설정]

8.전체 기능 연동한 코드 테스트

:트랜잭션은 한 메소드에 처리하는 쿼리가 두개 이상일 때만 필요한 것.


[XML 설정 파일에서 전체 기능을 연동하기 위해 빈을 추가]


[추가로 트랜잭션 처리할 클래스]



[메인클래스1]



[메인클래스2]



[메인클래스3]





[결과 확인]

=============================================

WAR 파일 : 

sp4-chap03.war


==============================================================

==============================================================

[스프링 MVC] - 최소 설정

=========환경설정============

 

 

===========================

0.스프링 mvc의 주요설정(HandlerMapping, ViewResolver 등)
1.web.xml 파일에 DispatcherSrvlet 설정
2.컨트롤러
3.컨트롤러 클래스를 빈으로 등록할 때 사용할 설정 파일

 

=====================================

- 스프링 mvc 설정 : HandlerMapping, ViewResolver 등 + web.xml 파일에 DispatcherServlet설정

 

[servlet-context에 HandlerMapping, ViewResolver 설정]

 

 

 

[web.xml - DispatcherServlet설정 + 인코딩 처리를 위한 서블릿 필터를등록]

 

- 웹 브라우저의 요청을 처리할 컨트롤러 구현 :

스프링 컨트롤러로 사용될 클래스는 @Controller 애노테이션을 가져야 하며,

@RequestMapping 애노테이션을 이용해서 처리할 경로를 지정해 주어야 함.

@RequestParam 애노테이션은 HTTP 요청 파라미터를 메서드의 파라미터로 바로 전달 받을 수 있게 해 준다.

 

 

+ 컨트롤러 클래스를 빈으로 등록할 때 사용하는 설정 파일 생성

 

 

[spring-controller]

 

- 컨트롤러의 처리 결과를 보여줄 뷰 코드 구현

 

 

[hello.jsp]

 

 

 

728x90