@Transactional(readOnly = true)를 습관적으로 붙이면 안전한 줄 알았다. 그런데 인증 메서드 안에 BCrypt가 있으면, DB가 아무 일도 안 하는 150ms 동안 커넥션을 잡고 놓아주지 않는다. 커넥션 40개짜리 풀에서 동시 30명이 인증하면, 다른 API는 커넥션을 기다리다 죽는다. 어노테이션 한 줄 지우는 것이 성능 최적화의 전부였다.발견: "readOnly면 가볍다"는 착각이커머스 프로젝트에서 인증 메서드를 작성하면서, 읽기 전용 메서드에는 습관적으로 @Transactional(readOnly = true)를 붙였다. 읽기 전용이면 flush도 안 하고, 스냅샷도 안 만들고, 최적화만 해주는 거라고 알고 있었으니까.그런데 부하 테스트 시나리오를 설계하면서 커넥션 풀 사용률을..