
들어가며회원 관리 시스템을 개발하던 중, 회원(Member)과 회원 상세 정보(MemberDetail)를 일대다(1:N) 관계로 설계해야 하는 요구사항이 있었다. 한 회원이 전화번호, 주소, SNS 계정 등 여러 타입의 상세 정보를 가질 수 있어야 했기 때문이다.초기에는 간단하게 일대다 단방향 매핑으로 구현했는데, 이게 생각보다 큰 성능 문제를 일으켰다. 100명의 회원을 등록하는 배치 작업에서 쿼리가 200개나 발생하는 것을 발견했다. INSERT 쿼리 100개는 이해가 되는데, 그 뒤에 UPDATE 쿼리가 또 100개씩 따라붙는 것이다.이 문제를 해결하는 과정에서 @MapsId라는 생소한 어노테이션을 만났고, 그 과정을 공유하고자 한다.문제 상황: 불필요한 UPDATE 쿼리비즈니스 요구사항과 테이블 ..