ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12 서비스 계층의 분리와 @Transactional(1)
    Spring/02 Spring DI와 AOP 2023. 7. 8. 21:57
    반응형

    서비스 계층의 분리와 @Transactional(1)

    1) 서비스 계층(Layer)의 분리 비즈니스 로직의 분리

    1-1) 서비스 계층(Layer)의 분리 비즈니스 로직의 분리

    - 1)그림에서 UserHistoryDao의 추가하면 RegisterController(userHistoryDao생성)변경해야된다

    - 1-1)그림처럼 UserHistoryDao와 비즈니스 로직을 처리하는 UserService를 생성한다

    >> 장점1) RegisterControllerUserService만 호출해주면

                    영속계층이 늘어나도 RegisterController는 에는 영향이 없다

         장점 2) Tx 처리, UserServiceTx 처리가 적합하다

                    RegisterControllerTx처리가 가능하나 너무 복잡해진다

    >> @Component@Controller, @Service, @Repository를 포함하기 때문에

         <Context:component-scan>으로 자동 스캔이된다

     

     

    2) TransactionManager?

    - DAO의 각 메서드는 개별 Connection을 사용

    >> ex) deleteUser( );2번 호출했다고 가정했을 때

                ①deleteUser( ); deleteUser( );은 별도의 deleteUser( );가 호출된다

                 ①번과 번을 Tx로 묶을 수 없다(Connection이 하나씩 개별 처리하고 있기 때문에)

    >> 이 커밋되고 번이 롤벡 되었을 때, 번과 번 전부 롤벡되어야 한다면?

    >> 번과 번이 같은 Connetion을 사용하게 한다(하나의 Tx로 묶기)

    >> TransationManager - 같은 Tx의 명령들은 같은 Connetion을 사용하게 한다

     

     

    2-1) TransactionManager?

    - 같은 Tx내에서 같은 Connetion을 사용할 수 있게 관리

     

    - DAO에서 Connection을 얻거나 반환할 때 DataSourceUtils를 사용해야 한다

     

     

    3) TransactionManagerTransaction 적용하기

    >> 개별 Connection 같은 Connection 사용

    >> 번은 직접 입력 번은 bean에 등록하는 방법

     

     

     

    4) @TransactionalTransaction적용하기

    - AOP를 이용한 핵심 기능과 부가 기능의 분리

    - @Transactional은 클래스나 인터페이스에도 붙일 수 있음

    >> @Transactional을 붙이면 AOP가 자동으로 부가 기능을 붙여준다

    >> 부가 기능 + 핵심 기능 부가 기능과 핵심 기능의 분리

     

    4-1) 실습

    A1Dao.java

     

    A1DaoTest.java

    >> key값이 프라이빗 키로 되어있어 중복을 허용하지 않는다

    >> (1,100) (1,200) 중복되브로 첫 번째 (1,100) 값만 입력되었다

     

     

     

    4-2) 실습 (Tx적용하기)

    A1Dao.java

     

    root-context.xml

    TxManager 생성

    핵심기능을 try-catch-finally 묶는다

    tm.commit( )tm.rollback( ) 호출하고, 생성된 TxManager(status) 넣어준다

     

    결과 확인

    >> A1Dao.javaconn 콘솔 출력결과 같은 주소를 찍어준다(Tx 적용)

    >> 1의 값이 중복이기 때문에 에러

     

     

     

    MySQL 에디터

    >> 하나라도 에러가 발생하면 rollback( )

     

     

     

    반응형
Designed by Tistory.