LostCatBox

DataSource, QueryDSL이란?

Word count: 297Reading time: 1 min
2023/04/05 Share

왜?

회사에서 hikari 라는 datasource 툴을 볼수있엇고, querydsl로 해당 프로젝트가 짜있는것을 보고, 왜 쓴걸까? 라는 의문점에 찾아본다

참조

Spring DataSource

QueryDSL

JPQL

MyBatis->JPA

Spring DataSource

데이터 베이스에 테이터를 넣고, 데이터를 읽어오기 위해서는 먼저 데이터베이스에 연결되어야한다.

하지만, 이부분은 spring이 application.yml에 있는 메타정보를 등록하면 구성해주므로, 데이터베이스에 어떤 과정을 거쳐 연결되는지 알수없다.

1
2
3
4
5
6
7
spring:
datasource:
hikari:
driver-class-name: org.postgresql.Driver
jdbc-url: "jdbc:postgresql://127.0.0.1:5433/testdb"
username: root
password: root

datasource의 역할은 무엇일까?

dataSource는 DB와의 Connection을 생성해 관리한다

스크린샷 2023-04-05 오전 8.52.17

  • Connection Pool(CP)
    • DB connection을 미리 만들고, 해당 Connection을 관리한다. (연결 재활용 가능)
    • 미리 만들어놓지 않을 경우, 사용전 연결에서 많은 비용이 발생한다.
  • DataSource는 DB Connection을 관리하는 인터페이스
    • getConnection()를 통해 CP에서 하나의 Connection을 가져온다

JDBC란, 자바 언어로 데이터베이스 프로그래밍을 하기위한 라이브러리이며, JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다.
각 회사에 맞는 JDBC 드라이버는 각 DBMS회사에서 제공하는 라이브러리이다.

스크린샷 2023-04-05 오전 8.51.52

QueryDSL 이란?

QueryDSL은 도메인 특화 언어라는 개념으로 JPQL을 Java 코드로 작성할수있도록 하는 라이브러리다.

기존에 mybatis를 쓰던 JPQL을 쓰든 간에 쿼리를 SQL 문법 규칙대로 쿼리를 작성하지 않고 Java 코드로만 작성할 수 있게 도와주는 라이브러리

JPQL을 직접 사용하여, 쿼리를 날리는 것이 아닌, Java 코드로 querydsl 문을 만들고, 이를 jpql로 dsl이 자동으로 변환한다. 장점은, 런타임이 아닌 컴파일 타임에 에러를 발견할 수 있다.

JPQL
JPQL은 엔티티 객체를 조회하는 객체지향 쿼리다.
테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.
특정 db에 의존하지않고, 개발할수있게 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어

쿼리가 일어나면 JPQL => SQL로 변환되어 쿼리한다.

단점으로, string 으로 작성되기 때문에, 개발 동적 쿼리 작성어려움.
검색을 할 때는, 테이블이 아닌, 엔티티 대상으로 검색 필요 모든 DB 데이터를 객체로 변환해서 검색 불가능

jpql 의 단점을 보안하기위해 querydsl을 사용. 동적쿼리 쉽게 날릴수있다.

CATALOG
  1. 1. 왜?
  2. 2. 참조
  3. 3. Spring DataSource
    1. 3.1. datasource의 역할은 무엇일까?
  4. 4. QueryDSL 이란?