해당 글은 groomedu의 스프링부트 나만의 블로그 만들기 강의를 보고 개인적으로 정리한 글입니다.
기존 스프링 방식의 문제점
request를 하면
1. JDBC 커넥션 시작
2. 트랜잭션 시작
3. 영속성 컨텍스트 시작
4. JDBC 커넥션 종료
5. 트랜잭션 종료 -> commit -> 변경감지(update 수행)
6. 영속성 컨텍스트 종료
영속성은 프레젼테이션 계층(controller)까지 가져감.
트랜잭션, JDBC 커넥션은 Service 계층에서 종료됨
Transaction이 종료된 이후에도 Controller의 세션이 close되지 않았기 때문에,
영속성 객체는 Persistence 상태를 유지할 수 있으며, 따라서 프록시 객체에 대한 Lazy Loading
(JDBC 커넥션을 다시 활성화 시켜 데이터를 가져옴)을 수행할 수 있게 된다.
전통적인 방식에는 영속성컨텍스트, 트랜잭션, JDBC Connection이 Controller가 시작될 때 시작,
종료될 때 종료
**정리**
스프링부트의 트랜잭션
1. 세션(영속성 컨텍스트를 포함)의 시작은 서블릿이 시작되는 시점부터 ~
2. 트랜잭션의 시작은 서비스 레이어부터, JDBC 커넥션도 이 시점부터.
3. 트랜잭션의 종료는 서비스 계층에서 종료, JDBC 커넥션도 이 시점부터 종료
4. 세션은 컨트롤러 영역까지 끌고 가기 때문에 영속성이 보장되어 select가 가능해지고 lazy-loading이 가능해짐.
-> 가능하게 하려면 open-in-view true로 설정해야함.
false로 하면 서비스 레이어에서 영속성 컨텍스트 종료됨.
'Spring > SpringBoot' 카테고리의 다른 글
[goormedu 강의] 스프링부트 블로그 만들기 06 - 01 스프링 시큐리티 체험해보기 (0) | 2024.09.25 |
---|---|
[goormedu 강의] 스프링부트 블로그 만들기 05 - 12 전통적인 방식의 로그인 방법 (1) | 2024.08.30 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 10 REAPEATABLE READ (0) | 2024.08.28 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 09 READ COMMIT의 정합성 문제 (0) | 2024.08.28 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 08. DB 격리수준 READ COMMIT (0) | 2024.08.28 |