Spring4 Querydsl 동적 정렬 Querydsl로 Paging 처리하는 쿼리에서 정렬을 하기 위해선 스프링에서 지원하는 Sort 객체를 사용할 수 없기 때문에 Querydsl에서 지원해 주는 OrderSpecifier 객체를 사용해야 한다. - 예시) 사용자가 '최신순', '조회순', "좋아요순'을 선택하여 게시글을 조회할 수 있도록 동적 쿼리를 작성해야 한다. 1. 프론트로부터 쿼리스트링으로 sortType을 전달 받는다. 2. 전달 받은 sortType 으로 Sort 객체와 Pageable 객체를 생성하여 Querydsl Repository단으로 넘긴다. 3. 아래와 같이 서비스단으로부터 넘겨 받은 Pageable 객체를 이용하여 OrderSpecifier 객체를 생성해준다. switch 구문으로 원하는 정렬 정보를 갖는 Order.. 2022. 9. 8. fetch 조인 페치 조인은 JPQL에서 성능 최적화를 위해 제공하는 기능으로 sql에서 지원하는 조인 종류가 아니다. 연관된 엔티티나 컬렉션을 sql 한번에 함께 조회하는 기능으로 사실상 즉시로딩의 기능과 같기 때문에 도메인 설계 단계에서 대부분 지연로딩을 사용하는 실무에서 자주 사용한다. → 도메인 설계시 대부분의 연관관계를 fetchType = Lazy 로 설정 후(비즈니스 로직에 따라 다름) 조회 쿼리시 'fetch join' 사용 → n+1 문제 해결 *예시 [JPQL] select m from Member m join fetch m.team; [SQL] select M.*, T.* from member m inner join team t on m.team_id = t.id → 회원을 조회하면서 연관된 팀도 함.. 2022. 5. 15. OSIV 전략 Open Session In View : 하이버네이트 Open EntityManager In View : JPA 관례상 OSIV라 부른다. spring.jpa.open-in-view : true (Default 값) OSIV ON OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성컨텍스트와 테이터 베이스 커넥션을 유지한다. → 즉, controller 단에서 지연로딩 사용이 가능하다, 지연로딩을 트랙잭션에 안에서 모두 처리하지 않아도 된다. OSIV OFF OSIV를 끄면 트랜잭션 종료시 영속성 컨텍스트가 종료되고 데이터베이스 커넥션 또한 반환된다. 따라서 리소스를 낭비하지 않는다. 영속성 컨텍스트가 종료될 시, 당연히 지연로딩 또한 사용할 수 없기.. 2022. 5. 5. 스프링 MVC 구조 서블릿과 JSP의 한계 서블릿으로 개발할 때는 뷰(View)화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡했다. JSP를 사용한 덕분에 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고, 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다. 그런데 이렇게 해도 코드의 상위 절반은 비즈니스 로직이고, 나머지 하위 절반만이 HTML로 보여주기 위한 뷰 영역이다. Java 코드, 데이터 조회하는 레포지토리 등 다양한 코드가 모두 JSP 에 노출되어 있기때문에 JSP가 너무 많은 역할을 하여 후에 유지보수가 힘들어진다. 이처럼 해결되지 않는 몇가지 고민이 남는다. MVC 패턴의 등장 비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고, JSP는 목적에 맞게 HTML로 화면을 그리는.. 2022. 4. 7. 이전 1 다음