반응형 분류 전체보기278 QueryDSL, MyBatis, JdbcTemplate 타입 안정성 QueryDSL의 타입 안정성Querydsl의 핵심 원칙은 타입 안정성(Type safety) 이다. 도메인 타입의 프로퍼티를 반영해서 생성한 쿼리 타입을 이용해서 쿼리를 작성하게 된다. 또한, 완전히 타입에 안전한 방법으로 함수/메서드 호출이 이루어진다. QueryDSL은 개발자가 직접 SQL문을 작성하지 않고, Java 코드 기반의 빌더 API를 사용하여 타입 안전한 쿼리를 작성할 수 있도록 도와주는 프레임워크입니다. QClass는 정적 타입 기반으로 생성된 클래스로, 컴파일 시점에 타입 안정성을 보장하며, 쿼리 작성 과정에서 발생할 수 있는 오류를 최소화합니다. 또한 QClass는 엔티티 클래스에서 생성되며, 엔티티와 데이터베이스의 컬럼 이름을 기반으로 쿼리를 작성하기 때문에, 매핑할 프로퍼티 불일.. 2024. 12. 2. Driving 테이블의 정의와 선정 방법 Driving 테이블조인시 먼저 액세스되는 쪽을 드라이빙 테이블(DRIVING TABLE, OUTER TABLE)이라고 하며 나중에 액세스 되는 테이블을 드리븐 테이블(DRIVEN TABLE, INNER TABLE)이라고 합니다. 인덱스(INDEX)의 존재 및 우선순위 혹은 FROM 절에서의 TABLE 지정 순서에 영향을 받으며 어느 테이블이 먼저 액세스되느냐에 따라 속도의 차이가 크게 날 수 있으므로 대량의 데이터를 다룰 때 정말 중요합니다. 조건을 만족하는 테이블과 해당하는 로우 데이터 수가 다음과 같다고 가정합니다. A 테이블: 1억건B 테이블: 100건 이 때, 조인시 드라이빙 순서에 따라 속도의 확연한 차이가 발생할 수 있습니다. A 테이블을 드라이빙하게 되면 최대 1억 번을 반복하며 B 테이블.. 2024. 12. 1. [JPA] @BatchSize와 쿼리 캐시에 관해서 알아보기 Spring Boot 1.4.6.RELEASE 버전에서 개발을 진행하고 있었습니다.album과 song이라는 테이블이 있고 song은 외래키를 가지고 있는 주 테이블이며 album은 대상 테이블입니다. 아래는 클래스 코드입니다.@Data@Entitypublic class Album { ... @OneToMany(mappedBy = "album") private List songList = new ArrayList(); ... }@Data@Entitypublic class Song { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "album_id", referencedColumnName = "id") .. 2024. 11. 28. JPA 2차 캐시와 레디스 캐시에 대하여 생각해보기 JPA 1차 캐시와 2차 캐시에 관해서는 이 글을 읽기 전에 한 번 읽어보시길 추천드립니다. 클라이언트의 요청에 의해 영속성 컨텍스트의 스냅샷을 통한 1차 캐시는 그 생명주기가 OSIV인 경우 요청이 끝날 경우에 사라집니다.(OSIV가 아닌 경우 트랜잭션이 종료되면 영속성 컨텍스트가 종료될 때 같이 사라집니다.)그렇다면 매번 반복된 요청이 들어올 때 불필요한 디비 컨넥션 처리가 이루어지지 않도록 2차 캐시를 이용하여 효율성을 높이는 것이 좋다고 생각이 됩니다. 2차 캐시를 적용해서 한번 로직을 구성해 보겠습니다.@Overridepublic List findByTop100Song() { return jpaQueryFactory.selectFrom(song) .where(song.i.. 2024. 11. 21. 이전 1 2 3 4 5 6 7 ··· 70 다음 반응형