You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 LastReadMessageLogEventListener에서는 추가적인 DB 쓰기 작업을 위해 REQUIRES_NEW 전파 속성을 사용하고 있습니다.
따라서 '채팅방 조회'라는 하나의 태스크를 수행하기 위해 두 개의 커넥션이 필요합니다.
HikariCP 위키를 보면 [(전체 쓰레드 수 * 하나의 태스크에서 필요한 커넥션 수 - 1) + 1 개] 공식을 소개합니다.
위의 공식대로 해석해보면 하나의 태스크에서 두 개 이상의 커넥션이 필요한 경우,
전체 스레드 개수 + 1 개 만큼의 커넥션이 유지돼야 데드락이 발생하지 않는다는 것을 알 수 있습니다.
따라서 REQUIRES_NEW를 사용하는 것을 주의해야 합니다.
위의 문제점을 인지한 뒤 리팩토링을 진행하게 되었습니다.
해결 방법
해당 문제를 해결하기 위한 두 가지 해결 방법이 있습니다.
@Async 사용
@Async를 사용하더라도 @TransactionalEventListener와 함께 사용하기 때문에 순서는 보장됩니다. 하지만 @Async를 사용함으로써 테스트가 어려워지거나 고려했을 때 사용에 유의해야 합니다.
REQUIES_NEW propagation 사용
위의 공식에 맞춰 커넥션 풀을 조정해주어야 합니다.
현재는 REQUIRES_NEW만 사용하기 때문에 둘 중 하나의 방식으로 개선이 필요하다고 판단해 리팩토링을 진행하게 되었습니다.
✅ 작업할 내용
@Async 또는 커넥션 풀 조정
🙋🏻 참고 자료
No response
⏰ 추정 시간
추후 수정
⏰ 소요 시간
1시간
The text was updated successfully, but these errors were encountered:
🛠️ 설명
상황
현재
LastReadMessageLogEventListener
에서는 추가적인 DB 쓰기 작업을 위해 REQUIRES_NEW 전파 속성을 사용하고 있습니다.따라서 '채팅방 조회'라는 하나의 태스크를 수행하기 위해 두 개의 커넥션이 필요합니다.
HikariCP 위키를 보면
[(전체 쓰레드 수 * 하나의 태스크에서 필요한 커넥션 수 - 1) + 1 개]
공식을 소개합니다.위의 공식대로 해석해보면 하나의 태스크에서 두 개 이상의 커넥션이 필요한 경우,
전체 스레드 개수 + 1 개 만큼의 커넥션이 유지돼야 데드락이 발생하지 않는다는 것을 알 수 있습니다.
따라서 REQUIRES_NEW를 사용하는 것을 주의해야 합니다.
위의 문제점을 인지한 뒤 리팩토링을 진행하게 되었습니다.
해결 방법
해당 문제를 해결하기 위한 두 가지 해결 방법이 있습니다.
@Async
사용@Async
를 사용하더라도@TransactionalEventListener
와 함께 사용하기 때문에 순서는 보장됩니다. 하지만@Async
를 사용함으로써 테스트가 어려워지거나 고려했을 때 사용에 유의해야 합니다.REQUIES_NEW propagation 사용
현재는 REQUIRES_NEW만 사용하기 때문에 둘 중 하나의 방식으로 개선이 필요하다고 판단해 리팩토링을 진행하게 되었습니다.
✅ 작업할 내용
@Async
또는 커넥션 풀 조정🙋🏻 참고 자료
No response
⏰ 추정 시간
추후 수정
⏰ 소요 시간
1시간
The text was updated successfully, but these errors were encountered: