ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 스프링의 전통적인 트랜잭션, JPA의 OSIV 전략
    WEB/Spring 2020. 9. 29. 16:37

    스프링의 전통적인 트랜잭션
    스프링의 전통적인 트랜잭션 (추가)

    프로그램이 시작이 되면 처음으로 톰캣이 시작이 된다.

    서버 작동을 위해서 web.xml이 읽어지고, 내부의 context.xml이 읽어져 DB에 연결이 되는지 확인한다.

    연결이 잘된다면, 위와 같은 세팅이 완료된다.

    이때 '홍길동이 장보고에게 10000원을 송금한다.' 라는 요청이 왔다고 가정한다.

    web.xml, 필터를 거쳐 스프링 컨테이너의 컨트롤러단에 요청이 도착한다.

    web.xml과 필터를 거치는 과정에서 DB 연결 세션이 만들어지고, (JDBC 커넥션 완료) 트랜잭션이 시작된다. (+ 영속성 컨텍스트가 만들어진다.)

    컨트롤러단에서 어떤 요청이 들어왔는지 확인하고, 그 요청에 맞는 서비스로 요청을 전달한다.

    서비스단에서 레포지토리단으로 먼저 홍길동의 계좌에 select를 요청하고, 그 후 장보고의 계좌에 select를 요청한다.

    두 계좌에 select를 했기 때문에 DB에서 홍길동과 장보고의 select한 정보를 영속성 컨텍스트에 객체화 시켜서 저장한다.

    그 영속성 컨텍스트의 내용을 서비스단에 응답받고 객체의 데이터를 수정한 후, 다시 컨트롤러단으로 전달한다.

    RestController는 데이터 형식(JSON), Controller는 화면(HTML)으로 응답 결과를 보여준다.

    이때 응답을 하기전에 DB 연결 세션이 종료되고 (JDBC 커넥션 종료) 트랜잭션이 종료되면서 영속성 컨텍스트의 내용을 DB가 변경 감지를 하고, 변경이 됐다면 flush를 통해 DB에 반영시킨다.   

    마지막으로 영속성 컨텍스트가 종료된다.

     

    OSIV(Open Session In View) 전략

    JDBC 커넥션과 트랜잭션의 시작이 요청이 아닌 서비스단으로 넘어오면서 시작된다. 종료 시점은 컨트롤러단으로 넘어가면서 종료된다.

    영속성 컨텍스트는 요청에 대한 응답을 하기 전까지는 종료되지 않는다.

     

     

    www.youtube.com/channel/UCVrhnbfe78ODeQglXtT1Elw
     

    데어 프로그래밍

    getinthere@naver.com

    www.youtube.com

     

    댓글

Designed by Tistory.