전체 글
-
@Modifying 옵션 알아보기 (flush, clear)개발/JPA & Hibernate 2021. 8. 14. 01:28
JPA Spring Data 에서 벌크성 update, delete를 할 땐, @Modifying 애노테이션을 이용해야 합니다.. @Modifying 에는 flushAutomatically, clearAutomatically 라는 두 가지 옵션이 있는데, 이에 대한 내용을 간단하게 정리해보겠습니다. @Modifying 옵션 살펴보기 flushAutomatically 해당 쿼리를 실행했을 때, flush()를 발생시킵니다. 요건 뒤에서 알아보겠습니다. 지금 결론만 간단하게 말하자면, true든 false든 항상 true 처럼 동작되므로 무시해도 됌. (hibernate 설정 때문) clearAutomatically 중요한건 이 옵션입니다. // 영속성 컨텍스트에만 존재 Team save = teamRepo..
-
확장성을 고려하여 객체지향적으로 영업시간 구현하기프로젝트/BLUE DELIVERY 2021. 7. 29. 23:35
blue-delivery 프로젝트를 진행하면서 주로 '확장 가능한 코드'를 작성하기 위한 고민들을 하였습니다. 하나는 영업시간을 구현하면서 했던 고민이고, 하나는 전체적인 구조에 대한 고민입니다. 이번 글에서는 확장성있게 영업시간을 구현하기 위한 고민을 정리해보았습니다. 입력받은 영업시간 정책을 어떻게 구분하고, 각 요일로 변환할까? (실제론 UI가 없지만) 대략 아래와 같이 입력받는다고 가정합니다. 주말 포함이라면 한가지 케이스의 오픈/마감 시간을 입력받아야 하고, 주말 별도라면 평일, 토요일, 일요일 총 3가지 케이스를 입력받아야 합니다. 그리고 어떤 정책(주말 포함or별도)이냐에 따라 적절한 요일로 변환해서 데이터베이스에 저장해야 합니다. (예를 들어, 위의 그림처럼 평일, 토요일, 일요일을 입력받..
-
N+1 문제란? 그리고 해결방법 (feat. fetch join)개발/JPA & Hibernate 2021. 7. 18. 15:19
N+1 문제란? 객체 조회(1회)의 결과로 n개의 결과가 나온다고 했을 때, 조회된 객체안에 또 다른 객체가 있을 수 있다. 그렇다면 객체안의 객체를 조회하기 위해 또 다른 쿼리가 발생하는 경우가 있는데, 그러면 처음 조회된 n개의 결과만큼 새로운 쿼리가 발생한다. 즉, 첫 조회 1회 + 첫 조회 결과 n개 만큼의 결과가 증가하는 현상을 놓고 n+1 문제라고 한다. JPA에서 N+1 문제 해결 Fetch Join 사용 가장 일반적인 방법이다. Fetch Join에 관한 설명은 이 글 마지막에 정리했다. 애초에 사용될 데이터라면 지연로딩을 하지않고, 첫번째 쿼리때 Fetch Join 해서 가져오는 것이 좋다. Fetch Join에서도 설명하겠지만, Join이 아닌 Fetch Join의 차이는 Project..