Jpa 테스트 시 TransactionRequiredException 발생과 해결
·
Data/JPA
배경조회 수 증가 로직을 개발하고 동시성 문제와 성능을 측정하기 위해 멀티 쓰레드 기반으로 테스트를 진행했다.이때 내가 작성한 쿼리를 실행하니 TransactionRequiredException 문제가 발생했고, 이를 해결한 과정을 공유하려고 한다. 먼저 조회 수 증가에서 동시성 문제를 해결하기 위해 다양한 방법이 있지만, 나는 원자성 쿼리를 통한 비관적 락을 사용했다.원자성 쿼리를 사용한 비관적 락 적용 시 낙관적 락과 비교하여 성능 테스트 결과 차이가 없다라는 결론을 얻었기 때문이다. 따라서 이와 같은 원자성 쿼리를 작성했다. 문제 int numberOfThreads = 100; ExecutorService executorService = Executors.newFixedT..
QueryDSL 동적 조회 조건 생성 시 조인 문제
·
Data/JPA
QueryDsl을 활용해서 조회를 구현하던 도중 잘 해결되지 않았던 문제가 있어서 공유를 한다.개요해당 문제가 발생했던 지점은 주문, 결제 서비스에서 전체 주문 또는 전체 결제 조회를 구현하려던 도중 발생하였다.권한Customer(고객) Owner(점주)Admin(관리자)이때 내가 고민한 부분은 주문 전체 조회를 할 때 삭제된 주문에 대한 처리이다.고객은 본인 또는 관리자가 삭제한 주문 내역은 조회할 수 없지만 점주가 삭제한 주문 내역은 고객에게는 동일하게 보여져야 한다.점주는 본인 또는 관리자가 삭제한 주문 내역은 조회할 수 없지만 고객이 삭제한 주문 내역은 점주에게는 동일하게 보여져야 한다.관리자가 삭제한 주문 내역은 아무도 볼 수 없게 된다.위 방식대로 구현하기 위해 내가 만든 QueryDsl 코드..