JPA Entity에서 Set 사용 시 equals, hashCode 구현과 해시 충돌 해결기
·
JPA
서론Hibernate 6로 업그레이드하면서 기존에 잘 동작하던 코드에서 성능 문제가 발생했다. 문제의 원인은 JPA Entity에서 Set 컬렉션을 사용할 때 equals와 hashCode를 제대로 구현하지 않아서 생긴 해시 충돌이었다. 특히 클래스 기반 hashCode 구현으로 인해 모든 같은 타입의 Entity가 동일한 해시값을 가지면서 HashSet이 O(n) 성능으로 동작하는 치명적인 문제를 겪었다. 오늘은 이 문제의 원인과 해결 과정을 정리해보자.본론문제 상황: 클래스 기반 hashCode의 함정처음에는 JPA Buddy가 생성해주는 equals, hashCode를 그대로 사용했다. JPA Buddy를 선택한 이유는 다음과 같았다:JPA Buddy를 사용한 이유:- Hibernate 프록시 문제..