[Spring]JPA 걷어내고 JDBC Template 사용하기

HW·2024년 4월 14일
0

Java

목록 보기
7/7
post-thumbnail

서론

프로젝트에서 Spring Data JPA를 사용하고 있다.
JPA와 JDBC의 차이는 이 글에서 확인할 수 있다.

간단히 말하면 JPA는 ORM 기술로서
내부적으로 JDBC를 사용하는 High Level API이다.

JPA유아용 레고,
JDBC어른용 레고.

쿼리 학습을 위해서라도 JPA 내부에 사용되는
JDBC에 대해 공부할 필요가 있다.
그래야 나중에 더 복잡한 프로그램에 잘 적용할 수 있다.

그리고,

유아용 레고만 깨작거릴 수는 없다.

유아용 레고 대신 어른용 레고를 가지고 놀 수 있도록
JPA와 더불어 불필요한 것들을 모두 걷어내고 경량화 하여
JDBC Template을 적용해보자.

본론

왜 JDBC API 안 쓰고 JDBC Template 써?

JDBC TemplateSpring에서 제공하는 JDBC 템플릿 클래스다.
연결 및 트랜잭션 관리를 자동으로 처리해준다.

JDBC API에서는
try-catch 문 안에

연결(Connection)부터 시작해서
작성한 쿼리문 (PreparedStatement) 전송하고
결과를 가져오기 위해 ResultSet도 만들어야 해서

구조적인 반복이 심하다.

일단 뭔 말인지는 모르겠으나, 순수 JDBC는 너무 으른용 레고 같으니까
일단 15세용 레고로 가보자.

JPA Dependency 제거

application.properties


먼저 application.properties에서
jpa 관련 속성들을 다 주석처리 해준다.
위에 있는 데이터베이스에 통신하기 위한 속성이다.
(오 나도 알게 모르게 jdbc를 쓰고 있었구나)

build.gradle


build.gradle에서
implementation
'org.springframework.boot:spring-boot-starter-data-jpa' 도 주석처리한다.

source code

그러면 각종 EntityRepository에서 빨간불이 들어온다.
JPARepository상속 받았기 때문이지.

모든 Repository에서
대충 요로코롬 annotation을 주석처리 해주고
import 했던 JPA는 지워주자.

지우지 않고 주석처리하는 이유는
Repository Interface를 상속 받아서
JDBC Repository를 구현해야하기 때문이다.

JDBC Dependency 추가

build.gradle


build.gradle에서 주석 처리한 JPA 대신 JDBC를 추가해준다.

application.properties

앗 그러면 spring 입맛에 맞게 작성했던
JDBC 속성을 내 입맛에 맞게 수정할 수 있다.

source code


내 입맛에 맞춘 속성들을 변수로 불러와서
dataSource 객체를 생성해준다.

dataSource

이렇게 Repository를 상속 받아 구현해준다.

단일 객체는 queryForObject로 불러오고
List 객체는 query로 불러온다.

Final


그런데 어라라 Spring Boot를 실행하면
여전히 JPA 관련 로그가 발생한다.

이 부분은 더 알아봐야겠다.

결론

Java의 다형성으로 새로운 형식의 Repository를 만들어서
JPARepository를 대체해 주었다.

JPA로 편하게 DB를 운용하면서 생산성을 높일 수 있었지만,

JDBC Template로 바꾸면서 더 낮은 레벨의 접근으로
모든 DB 액세스를 관리할 수 있게 되었다.
이것이 득이 될 수 있도록 DB 쿼리를 학습해야겠다.

순수 JDBC는 낮은 레벨에서 DB에 접근 하기보다
코드 구조가 반복이 되는 느낌이 강하다.

JDBC Template에서 충분히 낮은 레벨에서 접근할 수 있다.

잠깐 JDBC Template를 맛 봐본 결과,
가져온 데이터 중 필요한 데이터만 선택적으로 반환하면서
다양한 요구 사항에 맞게 데이터 표현 방식을 조정할 수 있을 것 같다.

관련 커밋

🚨BREAKINGCHANGE: Refactor Repository using JDBC Template

profile
예술융합형 개발자🎥

0개의 댓글