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

2022. 1. 13. 13:26·개발중/Spring Boot
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 Boot' 카테고리의 다른 글

@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
'개발중/Spring Boot' 카테고리의 다른 글
  • @ServletComponentScan
  • 스프링 Junit 이란 ? 사용해보고 싶다 👩‍🦰
  • 스프링 부트 port 가져오기
  • [ 스프링 ] DispatcherServlet ?
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (939)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (18)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 1급 요약
    REST API
    docker
    네트워크 관리사 2급 실기
    알고리즘
    네트워크 관리사 요약
    파이썬
    쿠버네티스 스터디
    리눅스 1급 요약
    Spring
    쿠버네티스
    리눅스 마스터
    Git 저장소
    jpa
    VUE
    네트워크 관리사 2급
    네트워크 관리사 자격증
    git
    BackendDevelopment
    네트워크 관리사 실기
    리눅스 마스터 1급 정리
    리눅스 마스터 1급
    java
    springboot
    파이썬 알고리즘
    리눅스 마스터 요약
    네트워크 관리사 학점
    redis
    네트워크 관리사
    스프링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
@Transactional 어노테이션 적용 시 롤백이 안되는 경우
상단으로

티스토리툴바