왜?
회사에서 hikari 라는 datasource 툴을 볼수있엇고, querydsl로 해당 프로젝트가 짜있는것을 보고, 왜 쓴걸까? 라는 의문점에 찾아본다
참조
Spring DataSource
데이터 베이스에 테이터를 넣고, 데이터를 읽어오기 위해서는 먼저 데이터베이스에 연결되어야한다.
하지만, 이부분은 spring이 application.yml에 있는 메타정보를 등록하면 구성해주므로, 데이터베이스에 어떤 과정을 거쳐 연결되는지 알수없다.
1 | spring: |
datasource의 역할은 무엇일까?
dataSource는 DB와의 Connection을 생성해 관리한다
- Connection Pool(CP)
- DB connection을 미리 만들고, 해당 Connection을 관리한다. (연결 재활용 가능)
- 미리 만들어놓지 않을 경우, 사용전 연결에서 많은 비용이 발생한다.
- DataSource는 DB Connection을 관리하는 인터페이스
- getConnection()를 통해 CP에서 하나의 Connection을 가져온다
JDBC란, 자바 언어로 데이터베이스 프로그래밍을 하기위한 라이브러리이며, JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다.
각 회사에 맞는 JDBC 드라이버는 각 DBMS회사에서 제공하는 라이브러리이다.
QueryDSL 이란?
QueryDSL은 도메인 특화 언어라는 개념으로 JPQL을 Java 코드로 작성할수있도록 하는 라이브러리다.
기존에 mybatis를 쓰던 JPQL을 쓰든 간에 쿼리를 SQL 문법 규칙대로 쿼리를 작성하지 않고 Java 코드로만 작성할 수 있게 도와주는 라이브러리
JPQL을 직접 사용하여, 쿼리를 날리는 것이 아닌, Java 코드로 querydsl 문을 만들고, 이를 jpql로 dsl이 자동으로 변환한다. 장점은, 런타임이 아닌 컴파일 타임에 에러를 발견할 수 있다.
JPQL
JPQL은 엔티티 객체를 조회하는 객체지향 쿼리다.
테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.
특정 db에 의존하지않고, 개발할수있게 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어쿼리가 일어나면 JPQL => SQL로 변환되어 쿼리한다.
단점으로, string 으로 작성되기 때문에, 개발 동적 쿼리 작성어려움.
검색을 할 때는, 테이블이 아닌, 엔티티 대상으로 검색 필요 모든 DB 데이터를 객체로 변환해서 검색 불가능jpql 의 단점을 보안하기위해 querydsl을 사용. 동적쿼리 쉽게 날릴수있다.