• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@Modifying 에서 무조건 테스트 데이터가 커밋되고 있습니다

24.03.18 21:35 작성 24.03.18 21:39 수정 조회수 115

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요, 영한님.

좋은 강의 늘 감사합니다.

 

최근에 제가 공부한 내용들을 정리하면서 포트폴리오를 만들고 있는데, 특이하게도 @Modifying 을 사용하는 코드를 테스트할 때만 해당 테스트의 데이터가 롤백 되지 않고 커밋되는 기이한 현상을 발견했는데, 혹시 아시는 바가 있으신가 해서 여쭤봅니다.

 

  1. @Modifying 을 사용하는 코드'만' 테스트할 때는 테스트 통과하고 데이터가 롤백됩니다.

  2. 당연한 이야기지만, @Modifying 코드를 제외한 테스트가 통과하고 롤백됩니다.

하지만 이들을 동시에 실행하면 @Modifying 에서 update 된 데이터들이 롤백되지 않고 남아 있어서 다른 데이터에 영향을 주게 됩니다.

 

회사에서도 벌크성 수정 쿼리를 이미 사용을 하고 있고, 그 코드들을 테스트함에 있어서 어떠한 이슈도 발생하지 않았는데 제 포트폴리오에서만 이런 이슈가 발생을 하네요...

 

트랜잭션 전파와 관련된 문제, h2 와 boot 버전(3.2.1.) 문제 등등 의심 되는 부분들 여러 가지로 고쳐보고 바꿔봐도 여전합니다. boot 도 3.0.x 대로 낮춰보기도 했고. stackoverflow, spring boot github 등에도 찾아봤습니다만 저와 같은 이슈를 겪는 사람은 보지 못 했습니다.

 

그렇다고 해서 테스트 때문에 제품 코드를 바꾸는 건 또 주객전도가 되니 테스트에 tearDown 으로 데이터를 날리려고 합니다. 그래도 발생한 이슈에 대해 정리하고 해결은 해야 하니 여전히 알아보고 있는 중입니다. 그중에 혹시 영한 님께서는 알고 계시는 바가 있으신가 해서 여쭤봅니다.

 

제 소스코드 repository 와 이슈가 발생하는 코드들을 남깁니다. 참고로 제 컴퓨터에서 테스트를 실패하는 상태 그대로를 올립니다. 혹시 필요하신 정보가 더 있으시면 말씀해주세요.

감사합니다.

 

 테스트 로그 https://drive.google.com/file/d/117sWM8NZa13wIWUc-XhCpYFdZ9oeIUK4/view?usp=sharing

  • 테스트의 로그 전부를 넣었습니다. 위에서 설명해드린 것처럼 @Modifying 테스트 이후 그 데이터가 남아서 다른 테스트들에 영향을 주는 것이기 때문에 실패하는 테스트는 매번 다릅니다.

github https://github.com/psam1017/sunder-backend/tree/feat/teacher

  • main 은 테스트를 통과하도록 변경감지를 사용한 상태이고, 위처럼 feat/teacher 브랜치에 실패하는 코드를 올렸습니다.

     

@Modifying 사용 코드 - repository https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/main/java/psam/portfolio/sunder/english/domain/academy/repository/AcademyCommandRepository.java

@Modifying 사용 코드 - service https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/main/java/psam/portfolio/sunder/english/domain/academy/service/AcademyCommandService.java#L245

@Modifying 을 테스트하는 코드 https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/test/java/psam/portfolio/sunder/english/scheduler/AcademySchedulerTest.java

테스트 코드 설정 관련 코드 https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/test/java/psam/portfolio/sunder/english/SunderApplicationTests.java

답변 1

답변을 작성해보세요.

0

안녕하세요. psam1017님

저도 잘 모르겠습니다.

관련해서 도움 주실 수 있는 분 있으면 답변 부탁드려요.

감사합니다.