본문 바로가기

개발중/Spring

@Transactional 어노테이션 적용 시 롤백이 안되는 경우

728x90
반응형

🖤 글이 도움이 되었다면 유튜브 클릭 해주세요 🖤
https://youtu.be/bz8h5adAHNc

- DY 선배

 

Junit 테스트 중 Transaction 관련하여 정보 공유 드립니당
@Transactional 어노테이션 적용 시 롤백이 안되는 문제가 있었는데
원인 파악해 보니 데이터베이스 저장소 엔진 문제였습니다
MySQL의 MyISAM 엔진의 경우 트랜잭션 지원을 하지 않는다고 합니다
만약 트랜잭션을 사용하여 개발할 경우 참고하면 좋을 것 같습니다!


스토리지 엔진

 

- 데이터를 디스크에 저장

- 데이터를 디스크에서 읽음

 

데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해

데이터를 SELECT INSERT UPDATE DELETE 하는데 사용하는 기본 소프트웨어 컴포넌트라고도 한다.

 

출처 https://egg-stone.tistory.com/12

 

MySQL은 엔진은 하나이지만

스토리지 엔진은 동시에 여러개를 사용할 수 있고


테이블이 사용할 스토리지 엔진을 지정하여 

해당 테이블의 읽기/쓰기 동작을 정의한 스토리지 엔진으로 처리할 수 있다.

 


✅ MyISAM


MyISAM 은 테이블에 대한 ROW COUNT를 가지고 있다.

그래서 SELECT 같은 조회에 유리하지.
그리고 풀텍스트 인덱스를 지원한다. 

이는 자연언어를 이용해 검색가능하게 한다.
테이블과 인덱스를 각각 분리된 파일로 관리 한다..

단점이라고 한다면 트랜젝션 사용에서 문제가 될만한 점이 있는데, 
ROW LEVEL LOCKING 을 지원하지 않아서

SELECT INSERT UPDATE DELETE 시 해당 TABLE 전체에 록이 걸린다.


 InnoDB


InnoDB 는 자체적으로 메인 메모리 안에 데이터 캐싱과 인덱싱을 위한 버퍼 풀(pool)을 관리한다.


그리고 MyISAM 에서 지원하지 않는 ROW LEVEL LOCKING 을 지원하기 때문에

특정 데이터가 INSERT UPDATE DELETE 시

해당 범위의 ROW 들을 함께 LOCKING 할 수 있다.
다만 메모리와 디스크 저장공간을 더 많이 차지한다는 단점을 갖고 있다.


 

728x90
반응형

'개발중 > Spring' 카테고리의 다른 글

@ServletComponentScan  (0) 2022.03.25
스프링 Junit 이란 ? 사용해보고 싶다 👩‍🦰  (0) 2022.01.20
스프링 부트 port 가져오기  (0) 2021.12.14
[ 스프링 ] DispatcherServlet ?  (0) 2021.12.03
[ 스프링 ] Java EE Servlet ?  (0) 2021.12.02