inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

JPA

안녕하세요 강사님 강의하신 내용중에 궁금한 것이 있어 질문 남기게 되었습니다.

520

홋메

작성한 질문수 1

2

Test에서 사용한 @Transactional 어노테이션은 테스트 이후 db에 변경된 내용을 반영하지 않고 롤백을 한다고 설명되어 있고 Main에서 사용한 Transactional 어노테이션은 변경된 db내용을 커밋한다고 설명되어 있는데, 좀 더 구체적인 설명을 해주시면 감사하겠습니다.

spring spring-boot java MVC

답변 1

5

김영한

안녕하세요. 호세님

@Transactional은 기본적으로 해당 메서드가 실행될 때 트랜잭션을 시작하고 해당 메서드가 끝날 때 커밋을 해서 데이터베이스에 전달된 내용을 확정합니다.

그런데 테스트 코드에서 @Transactional을 사용하면 커밋을 하는게 아니라 데이터베이스에 롤백을 해서 데이터베이스에 전달된 데이터를 모두 삭제됩니다.

왜냐하면 테스트 코드는 여러번 반복해서 실행해도 되도록 설계해야 하기 때문입니다.

예를 들어서 다음 테스트를 생객해보시면, 회원을 저장하고 조회합니다. 여기서 커밋을 해버리면 데이터베이스에 userA가 남아있게 됩니다. 그리고 또 테스트를 실행하면 이미 userA가 있기 때문에 중복으로 저장되거나 문제가 발생합니다. 그래서 스프링을 테스트에 대해서 트랜잭션을 마지막에 롤백해서 동일한 테스트를 계속 실행할 수 있게 도와줍니다.

save(new Member("userA"))

findMember("userA")

도움이 되셨길 바래요^^

..

0

74

2

Unused property.....

0

98

2

project JDK is misconfigured

0

130

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

82

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

228

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

101

2

윈도우 build test오류 질문

1

102

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

98

2

테스트 실행 시 에러 질문

0

289

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

128

1

윈도우 gradlew.bat 에러

0

167

1

@PostMapping("/members/new")가 동작하지 않습니다

0

88

1

java static class와 kotlin class

0

77

1

스프링 DB연결

0

126

1

소요 시간

0

85

2

ddl.sql에 빨간 밑줄

1

101

2

welcome page 에러

0

180

3

잘 모르겠습니다.

0

163

2

fail을 똑같이 쳤는데 오류가 발생해요

0

156

2

index.html Welcome page

0

121

1

프로젝트 gradle-groovy ?

0

364

1

테스트코드 메서드명 한글

0

199

2