이번 글은 우아한 테크코스에서 작성한 글 중 JPA Fetch Join에 관한 글입니다. JPA는 기본적으로 제공되는 쿼리에서 한계가 있기 때문에 QueryDSL이라는 의존성을 주입하여 더 상세하고 복잡한 쿼리를 생성해내고, 해당 엔티티의 Repository를 구현한 RepositoryImpl과 같은 형태로 사용하고 있습니다. 그래서 복잡한 파라미터 혹은 조인절이 들어가는 경우 대부분 QueryDSL내에서 로직화 시키고, 파라미터 별 분기 내용과 기존에 사용했던 쿼리를 버전 관리용도로 사용하기도 적합한 우수한 성질을 지녔습니다. 하지만 그럼에도 불구하고 QueryDSL 또는 JPA를 사용하는 와중 Fetch ON 이 되어도 데이터 조회가 이상하게 되거나, 데이터가 오히려 삭제가 되는 문제가 종종 발생하는..
이번 글에서는 QueryDSL 을 사용하기 위해 매번 CustomRepositoryImpl이 번거로워 테스트 클래스에서 사용하는 방법을 보여드리고, 거기에서 잘 수행되는지 확인해볼까 합니다. 가장 먼저 테스트 클래스를 만들어야겠죠. 테스트 클래스를 생성합니다. QueryDSLTest.java @SpringBootTest @Transactional(realOnly = true) public class QueryDSLTest { @Autowired // 원래는 @PersistenceContext 을 많이 썼는데, 이제는 오토와이어도 잘됩니다. private EntityManager em; @BeforeEach // 기본적으로 테스트가 시작하기 전에 실행하는 함수 void createTest() { } @Te..
이번 글에서는 QueryDSL 을 사용하면서 로그에서 출력되는 SELECT 쿼리를 심플하게 만들어주는 방법에 대해 설명하고자 합니다. spring.jpa.properties.hibernate.use_sql_comments=true 이 설정을 적용하면 QueryDSL에서 사용하는 쿼리일 떄, JPQL 에서 생성되는 지저분한 SQL 포맷을 깔끔한 코멘트의 내용으로 확인할 수 있습니다. 예를 들어 Member.java 가 아래와 같다고 가정해보겠습니다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private I..
안녕하세요. 이번 글에서는 JPA 또는 QueryDSL을 사용하면서 다중으로 데이터베이스를 연결해서 사용할 때에 필요한 정보를 모아보았습니다. 가장 먼저 Oracle 에서 MSSQL 서버로 데이터를 옮길 때 사용하는 방법입니다. 1. Oracle SQL Connection Setting 가장 먼저 기본적인 커넥션을 연결하는 Oracle DB의 데이터소스 세팅입니다. @Primary 어노테이션으로 이 DataSource를 기본 데이터소스로 연결하겠다는 것을 표현합니다. @Configuration @EnableTransactionManagement @EnableJpaRepositories(entityManagerFactoryRef = "oracleEntityManagerFactory", transaction..
Querydsl 소개 Querydsl은 HQL(Hibernate Query Language) 쿼리를 타입에 안전하게 생성 및 관리할 수 있게 해주는 프레임워크” 입니다. 공식 레퍼런스를 인용한 정의인데, 잘 와닿지 않는다면 “Querydsl은 자바 코드 기반으로 쿼리를 작성하게 해준다”라고 생각하면 되겠습니다. 참고 링크: Querydsl Reference Guide Querydsl은 왜 필요할까? JPA를 사용한다고 가정하면 간단한 쿼리는 인터페이스에 메서드 명세만 잘 정의해 주면 별다른 문제 없이 사용할 수 있습니다. 예를 들면 “제목에 특정 문자열이 포함된 기사를 조회”하는 메서드를 표현하면 아래와 같습니다. Optional findByTitleContains(String title); 그렇다면 조..