Back-end/java3 [SpringBoot-JPA활용] 최적화된 조회를 위한 전략 엔티티 조회 방식으로 우선 접근 (jpql from절에 엔티티 작성) 페치조인으로 쿼리 수를 최적화 컬렉션 최적화 페이징 필요하면 @BatchSize로 최적화 페이징 필요하지 않다면 fetch join으로 한방쿼리 사용 엔티티 조회 방식으로 해결이 안되면 DTO 조회 방식을 사용 (jpql select절에 가져올 데이터들의 프로퍼티를 가진 DTO 작성) DTO 조회 방식으로도 안되면 Native SQL 또는 스프링 JdbcTemplate 활용 2023. 3. 6. [SpringBoot-JPA활용] 변경 감지와 병합(merge) JPA에서 영속성 컨텍스트에서 관리하는 엔티티의 경우 EntityManger의 flush 메소드가 발생하는 시점에 변경감지(dirty checking)를 통해 엔티티의 값에 변화가 있는 경우 update 쿼리를 날려 DB에 적용해준다. 하지만 준영속 엔티티의 경우 영속성 컨텍스트 안에 위치한 것이 아니기 때문에 변경감지 대상에서 빠진다. 준영속 엔티티 - EntityManager의 persist를 통해 한번 JPA를 탔던 엔티티로 식별값을 가진 엔티티이지만 실제 영속성 컨텍스트에는 들어가 있는 않은 엔티티 ex ) 상품 수정을 위해 프론트 단에서 넘어온 데이터로 만들어진 객체(상품 수정을 위해 식별 값을 가지고 있음) 그렇다면 준영속 엔티티를 수정하는 방법에는 뭐가 있을까? 첫번째로 병합(merge) 기.. 2023. 3. 3. [SpringBoot-JPA 활용] 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 지금까지 보통 웹개발을 하면서 서비스 레이어에서 대부분의 비즈니스 로직을 처리 했던 기억 밖에 없었는데, 이번에 JPA 강의를 들으면서 한가지 새로 배운 개념이 있어서 정리해보려 한다. 바로 도메인 모델 패턴이라는 것인데 해당 패턴에서는 복잡한 비즈니스 로직을 서비스에서 처리하는 것이 아닌 도메인 즉, 엔티티에 작성을 하고 서비스는 로직 수행을 엔티티에 위임하는 방식으로 설계하는 방법이다. JPA 등의 ORM을 사용할 때 유지보수 측면에서 더욱 유용한 패턴이라고 하는데, 처음 접했을 때는 상당히 낯설어서 적응하려면 시간이 조금 걸릴 것 같다. 강의에서는 주문을 수행하는 엔티티에 비즈니스 로직과 조회 로직 등이 들어갔는데, 이러한 복잡한 로직을 엔티티에 작성하는 이유는 엔티티가 각 데이터를 가지고 있는 엔.. 2023. 3. 2. 이전 1 다음