[항해 99 - 미니프로젝트] Test 중 DB Connection을 Release 하지 않음

gimseonjin616·2022년 7월 31일

실습

목록 보기
5/5

1. Test 중 DB Connection을 Release 하지 않음

개요 : 최근 판매 등록한 상품 15개를 조회하는 로직을 테스트 하는 도중, 테스트가 정상 작동하지 않는 것을 발견했다. Mysql Worchbench로 접속해봤으나 접속이 되지 않았다.

그래서 AWS RDS 지표를 살펴보니 DB Connection이 25개까지 할당되어 있는 것을 발견했다.

(아래 사진은 문제를 해결하고 찍은 것)

TIMEOUT으로 커넥션이 일부 반환됐을 때, 다시 테스트를 진행해보니 테스트 후, 커넥션이 반환되지 않는 것 같았다.

그래서 DB를 재부팅하여 테스트를 하니 확실히 커넥션이 반환되지 않는 것을 발견했다.

구글링을 해보니 아래와 같은 답변을 얻을 수 있었다.

해석해보자면 JPA의 Interceptor 중, OpenEntityManagerInViewInterceptor라는 녀석이 데이터베이스 접근 효율을 위해 커넥션 반환을 더 오래 유지한다는 것이였다.

그래서 open-in-view 속성을 False로 설정하라는 것이였다. 관련 자료를 더 찾아보니 아래의 블로그 글을 발견할 수 있었다.

즉 open-in-view 속성은 영속성 컨텍스트를 트렌젝션 범위 밖에서도 유지할 수 있도록, 즉 Service layer나 Controller layer에서도 유지할 수 있도록, (대표적인 예로 Service Layer에서 Lazy loading이 가능하도록) 도와주는 것이다.

이 open-in-view가 테스트에서도 계속 유지하는 것으로 보인다. 그렇다고 전체 어플리케이션에 open-in-view를 끄기에는 과하니 test 내부에 resource/application-test.properties를 만들어서 별도의 설정으로 관리해줬고 테스트 후에 성공적으로 connection이 반환되었다.

application-test.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://database-1.ctfthgy5wmxb.ap-northeast-2.rds.amazonaws.com/kream?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username= admin
spring.datasource.password= emm05235
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=update

spring.jpa.open-in-view=false
profile
백엔드 개발자

0개의 댓글