TestCode에 yml 함부로 넣지 말자.

2024. 6. 28. 21:03개발자 과정/Kotlin

배움엔 고통이 수반된다. 하지만 왜 꼭 고통이여야 하는지는 의문이다.

 

어째서?

 

잘돌아가던 TestCode가 갑자기 안돌아 가기 시작했다.

난 나의 프로젝트에게 배신감을 느꼈다. 

하지만 느낀건 둘째 치고 일단 해결은 해야했다.

분명 했는데 안한 취급받는건 너무 억울하니까~

 

처음엔 커밋을 롤백했다. 

TestCode 브랜치를 따서 풀리퀘를 했었기 때문에, 

작동되던 시점으로 롤백하는 것은 추적이 어렵지 않았었다.

하지만 그래도 안되었다.

 

그러다 문득 Test패키지 안에 resorces가 보였다.

불길하다

 

1년간의 실무경력이 이곳이 불결한 곳임을 말하고 있었다.

그래서 yml폴더를 열어 어떤게 문제일지를 예측해 보았다.

datasource:
    url: jdbc:h2:mem:test;MODE=MySQL;
    driver-class-name: org.h2.Driver

in memory인 휘발성 DB...

Repository 테스트 할때만 잠깐 쓸텐데...

 

여기서 깨달은건 ComtrollerService Test실제 DB를 통해 테스트 하도록 되어 있는데,

Test Yml이 존재 함으로 인해 H2 in memory DB를 의존할 것이고, 

in memory DB는 휘발성이기 때문에 깡통을 조회하고 있을거라는 추론이 완성되었다.!!!

 

그럼 어찌할까? 

 

그냥 Test Yml을 날려서 실제 코드와 같은 yml을 공유하도록 하였다. 

Repository Test영속성 컨텍스트에 저장만 해놓고, 실질적인 쿼리는 날리지 않도록 조절하였다. 

아주 단순한 처리만 할 것이라면, 영속성 컨텍스트 또한 실제 DB를 복사한 휘발성 DB처럼 사용가능하지 않을까?

라는 생각에서 비롯된 해결책이었다. 

 

240708 추가

더 알아보니 TestCode@transactional은 어차피 롤백된다고 한다.

 

결과는?

이게 펀쿨섹이지

 

보기와 같이 해결~

이로써 나는 한층더 업그레이드 되었다.

 

여담

그래도 해결해서 다행이다.

난 억울할 일이 없겠다.