waveofmymind
기록하는 습관
waveofmymind
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • 📝 정리 (5)
    • 🌊TIL (9)
    • 💻CS (1)
      • 자료구조 (1)
    • 📙Language (9)
      • ☕Java (6)
      • 🤖Kotlin (3)
    • 🍃Spring (28)
    • 👨🏻‍💻알고리즘 (67)
      • 프로그래머스 (59)
      • 백준 (3)
    • 👷DevOps (4)
      • 🐳Docker (2)
      • 🤵Jenkins (1)

블로그 메뉴

  • 홈
  • Spring
  • Java
  • 알고리즘

공지사항

인기 글

태그

  • resultset
  • Connection
  • 코틀린
  • 힙
  • mybatis
  • spring
  • 다이나믹 프로그래밍
  • 트랜잭션 전파
  • 챗GPT
  • kotest
  • AOP
  • SpringAOP
  • 통합테스트
  • 완전탐색
  • 스프링 부트
  • spring boot
  • Spring Security
  • JDBC
  • Open AI
  • CORS
  • kotlin
  • til
  • 스택
  • LeetCode
  • chat GPT
  • 스프링 시큐리티
  • 스프링
  • sql
  • 트랜잭션
  • BFS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
waveofmymind

기록하는 습관

[Spring DB] 테스트 - 트랜잭션
🍃Spring

[Spring DB] 테스트 - 트랜잭션

2023. 1. 29. 10:37

테스트에서 매우 중요한 원칙

  • 테스트는 다른 테스트와 격리해야 한다.
  • 테스트는 반복해서 실행할 수 있어야 한다.

데이터 롤백

테스트가 끝나고 데이터를 롤백하지 않으면, 그다음 테스트에서 데이터가 중복되어 예상치 못한 결과가 발생할 수 있다.

이때 사용하는 것이 트랜잭션이다.

중간에 테스트가 실패하더라도 커밋이 되지 않았기 때문에, DB에는 데이터가 반영되지 않기 때문이다.

  1. 트랜잭션 시작
  2. 테스트 A
  3. 트랜잭션 롤백
  4. 트랜잭션 시작
  5. 테스트 B
  6. 트랜잭션 롤백

테스트에서는 @BeforeEach, @AfterEach 어노테이션을 통해 트랜잭션을 관리할 수 있다.

@Autowired
PlatformTransactionManager transactionManager;
TransactionStatus status;

@BeforeEach
void beforeEach() {
    //트랜잭션 시작
    TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
}

@AfterEach
void afterEach() {
	//트랜잭션 롤백
    transactionManager.rollback(status);
    }
  • @BeforeEach: 각 테스트케이스를 실행하기 직전에 호출되며, 이때 트랜잭션을 시작하면 된다.
  • @AfterEach: 각각의 테스트 케이스가 완료된 직후에 호출되며, 이때 트랜잭션을 롤백하면 된다.

트랜잭션을 이용하면 각 테스트간에 영향을 주지 않으며, 테스트를 반복해서 실행할 수 있다.

@Transactional

@Transactional 어노테이션은 로직이 성공하면 커밋하도록 동작한다.

그러나 테스트에서 사용할 경우 특별하게 동작하는데,

  1. 테스트를 트랜잭션 안에서 실행시킨다.
  2. 테스트가 성공적으로 종료돼도 자동으로 롤백시킨다.

위와 같이 두가지 장점이 있다.

롤백하고 싶지 않을경우, @Commit이나 @Rollback(false) 어노테이션을 이용하면 된다.

 

 

 

 

 

 

 

출처

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2

 

스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인

www.inflearn.com

 

'🍃Spring' 카테고리의 다른 글

[Spring] 선언적 트랜잭션 동작 확인하기  (0) 2023.02.03
[Spring DB] MyBatis 사용하기  (0) 2023.01.29
[Spring DB] JDBC Template 사용하기  (0) 2023.01.29
[Spring] Spring이란?  (0) 2023.01.28
[Spring] MapStruct  (0) 2023.01.23
    '🍃Spring' 카테고리의 다른 글
    • [Spring] 선언적 트랜잭션 동작 확인하기
    • [Spring DB] MyBatis 사용하기
    • [Spring DB] JDBC Template 사용하기
    • [Spring] Spring이란?
    waveofmymind
    waveofmymind

    티스토리툴바