인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

sichelmond님의 프로필 이미지
sichelmond

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

@Transactional 했는데 롤백 문구가 안 떠요

작성

·

186

0

다음과 같이 코드를 실행하면 강의 화면처럼 "Rolled back transaction for test"가 나와야 하는데 그렇지 않고 H2에서도 컬럼만 있는 빈 테이블입니다. 뭐가 문제일까요?

 

package jpabook.jpashop;

import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {

    @Autowired
    MemberRepository memberRepository;

    @Test
    @Transactional
    public void testMember() throws Exception {
        //given
        Member member = new Member();
        member.setUsername("memeberA");

        //when
        Long saveId = memberRepository.save(member);
        Member findMember = memberRepository.find(saveId);

        //then
        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
    }
}

답변 5

2

안녕하세요. sichelmond님, 공식 서포터즈 David입니다.

스프링 6 이후부터는 로그 내용이 변경되었습니다.

 

먼저, application.yaml 파일의 로그 관련 옵션을 다음과 같이 설정해 주세요.

@Rollback(false)를 제거해 주세요.

그러면 롤백 로그(강의 내 로그 내용과 동일하지 않음)를 확인할 수 있습니다.

logging:
  level:
    root: trace(또는 debug)
// 디버그 레벨이 trace 일 때
TRACE 73338 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction (1) for test context: ..

// 디버그 레벨이 debug 일 때
DEBUG 73219 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction (1) for test class ..

스프링 6 이후 버전

https://github.com/spring-projects/spring-framework/blob/6.0.x/spring-test/src/main/java/org/springframework/test/context/transaction/TransactionContext.java

스프링 6 이전 버전

https://github.com/spring-projects/spring-framework/blob/5.3.x/spring-test/src/main/java/org/springframework/test/context/transaction/TransactionContext.java

감사합니다.

sichelmond님의 프로필 이미지
sichelmond
질문자

오오 감사합니다! trace를 하니 콘솔에 끝도 없이 동일한 문구가 계속 나와서 debug로 바꾸니 해결되었어요!

0

안녕하세요. 같은 상황에서, 의문점이 있어 질문 남깁니다.

 

junit4 및 junit5 환경 모두에서

application.yml 파일에 org.hibernate.SQL: debug 설정 시,

롤백 문구가 확인되지 않고, dml 문구가 확인되지 않습니다.

 

application.yml 파일에 root: debug 설정 시,

변경된 롤백 문구와 dml 문구는 확인이 되는데,

org.hibernate.SQL: debug 로 기대한 로그보다 많은 로그를 확인하게 됩니다.

 

스프링 6 환경에서 org.hibernate.SQL: debug 의 간추린 로그를 확인하고 싶습니다.

안녕하세요. 김용기님, 공식 서포터즈 OMG입니다.

해당 질문에 많은 댓글들이 포함되어 있어 확인과 관리가 어려워 추가로 글을 새로 작성하여 주시면 도움 드리도록 하겠습니다.

감사합니다.

0

sichelmond님의 프로필 이미지
sichelmond
질문자

혹시 이 부분(롤백 false)이 꼭 화인 되어야 다음 단계가 가능할까요?

반드시 확인할 필요는 없지만, 문제 원인이 무엇인지에 따라 다를 것 같습니다.

일단 진행해보시고 추후 문제 발생 시 다시 질문을 남겨주시겠어요?

sichelmond님의 프로필 이미지
sichelmond
질문자

네! 감사합니다:)

0

안녕하세요. sichelmond님, 공식 서포터즈 OMG입니다.

프로젝트 코드 확인해보았습니다.

해당 클래스 파일을 열어서 확인해보니 junit4 관련 의존성을 추가하지 않은 것 같아 build.gradle 확인해보니

image

추가를 하지 않으셨더라구요.

image

관련하여 강의 메뉴얼을 참고해주세요

image

build.gradle 수정 후 image코끼리 버튼으로 의존성 갱신을 하신 다음 확인해보시겠어요?

 

감사합니다.

sichelmond님의 프로필 이미지
sichelmond
질문자

답변 감사합니다! 추가하고 의존성 갱신 후 실행했는데 그대로라서 수정한 파일 다시 공유드립니다!

https://drive.google.com/file/d/1Zgtm9YTS0xY5DFIhPeB-NyiBFXP6Wg9P/view?usp=sharing

코드 다시 확인해보았는데, 코드엔 문제가 없습니다.

h2를 실행시킨 상태에서 확인한게 맞을까요?

h2가 실행중인데도 동일한 문제가 발생한다면

jpashop이라는 이름으로 h2를 연결하던 설정을 강의를 참고하여 jpashop2로 생성해서 다시 확인해보시겠어요?

.

application.yml

image

h2(h2는 초기 설정부터 처음부터 진행)

image

0

안녕하세요. sichelmond님, 공식 서포터즈 David입니다.

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

sichelmond님의 프로필 이미지
sichelmond
질문자

  1. 문제 영역 실행 방법 :

    MemberRepositoryTest.java 파일에서 @Test, @Transactional, @Rollback(false) 확인 후 실행시킵니다.

  2. 문제 상세 설명 : 콘솔 창에서 롤백 관련 내용이 안 나옵니다. Rollback(false)가 작동하지 않아 H2에서 MEMBER테이블 확인하면 행(ID, USERNAME)만 뜨고 memberA 데이터가 없습니다.

     

  3. 공유 링크 : https://drive.google.com/file/d/1ZVi_DXU-ZNU0igcaoAQ5IUcMUbhWRp8_/view?usp=drive_link

 

공유 링크 권한 확인 부탁드립니다 🙂

sichelmond님의 프로필 이미지
sichelmond
질문자

앗 네 수정했습니다.

sichelmond님의 프로필 이미지
sichelmond

작성한 질문수

질문하기