반응형
- JPA 반복문 쿼리 vs Batch Insert2021-10-10 20:52:25전에 프로젝트를 진행하며 for문을 돌며 query를 날려야했던 상황이 있었는데 그때 공부했던 내용을 정리해 보겠습니다. 우선 문제 상황은 하나의 course에는 여러개의 location과 hash-tag를 가지고 있고 사용자가 등록하고자 하는 course를 요청에서 받아 location과 hash-tag를 등록하는 상황이었습니다. 이때 저는 반복문을 돌며 쿼리를 수행하는게 매번 반복문을 돌때마다 db와 네트워크를 n번 만큼 타야하기 때문에 성능적으로 저하가 있을 것 같다고 생각을 하게 되었고 결과적으로 JPA의 save로 단건 저장하던 쿼리를 saveAll로 여러건 묶어서 보내는 것이 성능이 더 좋게 나온다는 테스트 결과를 가지고 코드를 작성했습니다. 이 과정에서 save를 사용하든 saveAll을 사..
- Jpa Entity 연관관계가 참조되어있는 객체 삭제2021-06-15 01:31:08개발중에 JPA를 사용하는 의미에 대한 원론적인 깨달음을 다시 얻었다. 기존의 JdbcTemplate이나 잠깐 사용해본 myBatis를 사용할 때 그저 쿼리를 작성하여 데이터베이스라는 서버에서 외부세계를 변화 시키는 용도로만 사용한다는 인식이 강하게 남아있어서 그런지 JPA는 객체지향 스타일로 개발하기 위해 사용는 ORM이라는걸 잊고 있었나보다. 다시 자각한 것에 비해 거창한 상황을 겪은 것은 아니지만 Service단에서 Repository로 특정 엔티티의 값을 없애야 하는 상황이 있었는데 그저 delete로 지우려고하니 violation이라고 친절히 알려주었다. 그래서 "아 지우려고하는 엔티티를 참조하는 다른 엔티티가 있어서 이러는거네"라고 생각이 들면서 JPA는 객체지향 스타일로 개발하는 것이니 관련..
- Jpa Named Query 에러와 @Modifying , @Transactional2021-06-15 01:19:44Spring에서 JpaRepository를 확장해서 사용하는 경우 제공되는 기본 메서드 외에 필요한 동작들은 직접 쿼리를 작성해서 메서드를 선언하는데 보통 선언시 메서드의 인자에 @Param 애너테이션을 붙여 네임드 쿼리로 String의 쿼리문에서 reflection으로 받아서 쿼리를 날리게 되는데 아무것도 없이 일반적인 update문만 날리면 에러가 나온다. 이런 경우 @Modifying 애너테이션을 붙이고 해당 쿼리를 사용하는 서비스단에서 @Transactional을 붙여주어야 정상적으로 동작할 수 있다.
반응형