작성
·
606
0
안녕하세요!
좋은 강의 잘 들었습니다!
실무에서 JPA를 사용하면서 궁금한점이 있어서요
실무에서는 @DynamicInsert, @DynamicUpdate 사용하고 있는데
우빈님은 한번도 안쓰시더라구요..!
실무에서는 어떻게 사용하시는지 궁금합니다!
@DynamicInsert, @DynamicUpdate 사용하지 않으면 어떻게 사용하는지도 궁금합니다.
답변 2
1
안녕하세요, ILoveBackEnd 님! :)
일부러 사용하지 않는 것은 아니고, 사용할 이유를 크게 못느껴서 그렇긴 한데요.
일단 크게 2가지 이유입니다.
하이버네이트의 쿼리 statement 캐싱
하이버네이트에서는 Entity를 기반으로 모든 필드에 대한 update 문을 캐싱해놓고, 변경 감지 동작 시에 사용합니다.
@DynamicUpdate를 사용하면 동적으로 쿼리문을 만들기 때문에, update 하려는 필드가 예측 불가능한 많은 양의 update가 발생하는 경우 오히려 성능 감소가 있을 수 있습니다.
사용하여 얻는 이점이 크게 없는 경우
보통의 웹 애플리케이션을 기준으로 했을 때, Command성(Insert, Update) 요청보다 Query성(Read) 요청이 압도적으로 많습니다.
insert, update 구문을 동적으로 만들어서 얻는 이점보다, Read 행위에 대한 퍼포먼스를 집중해서 개선하는 것이 보통은 중요도가 높은 과제이기 때문에 굳이 사용할 필요를 느끼지는 못하고 있는 것 같아요.
즉, 항상 적용하는 것이 아니라 Command성 행위의 빈도가 높은 애플리케이션이거나, 특정 상황에서 필요한 경우에만 @DynamicInsert, @DynamicUpdate를 고려하는 것이 좋다고 생각합니다.
감사합니다. :)
0
안녕하세요 ILoveBackEnd 님, 인프런 AI 인턴이에요.
@DynamicInsert와 @DynamicUpdate는 JPA에서 엔티티의 변경 내역을 동적으로 생성해주는 어노테이션입니다. @DynamicInsert는 엔티티의 삽입 시에 null인 필드들은 insert 쿼리에서 제외시키는 기능을 제공하고, @DynamicUpdate는 엔티티의 수정 시에 변경된 필드들만 update 쿼리에 포함시키는 기능을 제공합니다.
실무에서는 개발자의 요구사항이나 프로젝트의 특성에 따라 다르게 사용될 수 있습니다. @DynamicInsert와 @DynamicUpdate를 사용하면 insert나 update 쿼리의 실행 시간을 최적화할 수 있으며, 변경 내역을 효율적으로 관리할 수 있습니다. 하지만 모든 엔티티에 대해 사용할 필요는 없으며, 특정 엔티티나 필드에만 적용하는 것도 가능합니다.
만약 @DynamicInsert와 @DynamicUpdate를 사용하지 않는다면, 일반적으로 기본값인 false로 설정되어 있는데, 이 경우 모든 필드가 항상 insert와 update 쿼리에 포함됩니다.
실무에서는 프로젝트의 요구사항과 성능 최적화를 고려하여 @DynamicInsert와 @DynamicUpdate를 적절하게 사용하실 수 있습니다. 감사합니다!
와 정말 무릎을 탁 치고 갑니다! 어떻게 하면 우빈님처럼 성장할 수 있나요?