비동기가 왜 필요한가?
2개의 쿼리 조회시 속도가 너무 느려 사용 최대 로컬에서 500ms 발생
적용해도 문제 없나?
쿼리 자체가 개별적으로 동작하는 쿼리라 이슈 없음
왜 느린가?
외부 서비스에 요청해서 결과값을 가져오는데 이때 속도가 이슈
결과
운영에서 평균 80ms
참고 : https://velog.io/@banana-wuyu/spring-osiv
@DgsComponent
class SampleQuery(
private val dgsAsyncTaskExecutor: Executor,
) {
@Async
@DgsData
fun sample1(): CompletableFuture<Sample> {
return CompletableFuture.supplyAsync({
// 로직
}, dgsAsyncTaskExecutor)
}
@Async
@DgsData
fun sample2(): CompletableFuture<Sample> {
return CompletableFuture.supplyAsync({
// 로직
}, dgsAsyncTaskExecutor)
}
logging:
level:
com: trace
org.springframework.transaction.interceptor: trace
spring:
datasource-main:
hikari:
leak-detection-threshold: 2000
인증 처리를 하는 Resolver에서 오류 발생
유저 정보 조회 후 DB 커넥션이 제대로 닫히지 않아서 오류 발생
osiv off로 수정 - https://kth990303.tistory.com/427
- 현재 코드에서는 lazy-load 가 있는 entity를 밖에서 사용하는 경우가 있어서 해당 방법 사용시 영향범위 파악도 어렵고, 테스트가 어려워 해당 방법은 사용 불가능 (해당 방법 사용)
- 다른 방법 확인중
- async용 userResolver 따로 만들어서 사용 가능한지 확인중 - 해당 resolver에서 db 커넥션 강제로 끊어서 사용 (이런식으로 해도 되는지 모름)