Replies: 1 comment
|
수고하셨습니당 ~~~~ 👍 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
데이터 접근 기술 - 활용 방안
1️⃣ 스프링 데이터 JPA 예제와 트레이드 오프
➡️ 고민
➡️ 다른 선택
ItemService 에서 스프링 데이터 JPA로 만든 리포지토리를 직접 참조한다. 물론 이 경우 ItemService 코 드를 변경해야 한다.
런타임 객체 의존 관계
➡️ 트레이드 오프
DI, OCP를 지키기 위해 어댑터를 도입하고, 더 많은 코드를 유지한다.
어댑터를 제거하고 구조를 단순하게 가져가지만, DI, OCP를 포기하고,
ItemService코드를 직접 변경한다.여기서 발생하는 트레이드 오프
2️⃣ 실용적인 구조
스프링 데이터 JPA의 기능은 최대한 살리면서 Querydsl도 편리하게 사용할 수 있는 구조를 만들어 보자.
복잡한 쿼리 분리
아래와 같이 분리하면 기본 CRUD와 단순 조회는 스프링 데이터 JPA가 담당, 복잡한 쿼리 조회는 Querydsl담당
➡️ 테스트 실행 해보기
ItemRepository 를 테스트 하는데, 현재 JpaItemRepositoryV3 가 스프링 빈으로 등록되어 있다.
V2Config 에서 사용한 리포지토리를 테스트 하려면 ItemQueryRepositoryV2 , ItemRepositoryV2 용 테스 트가 별도로 필요하다.
3️⃣ 다양한 데이터 접근 기술 조합
➡️ 어떤 데이터 접근 기술을 선택하는 것이 좋을까?
이 부분은 하나의 정답이 있다기 보다는, 비즈니스 상황과, 현재 프로젝트 구성원의 역량에 따라서 결정하는 것이 맞다 생각한다.
JdbcTemplate이나MyBatis는 SQL을 직접 작성해야하지만, 기술이 단순하기 때문에 SQL에 익숙한 개발자 개발 비용이 줄어든다.
JPA, 스프링 데이터 JPA, Querydsl 같은 기술들은 개발 생산성을 혁신할 수 있지만, 학습 곡선이 높기 때문에, 이런 부분을 감안해야 한다. 매우 복잡한 통계 쿼리를 주로 작성하는 경우에는 잘 맞지 않는다.
➡️트랜잭션 매니저 선택
JpaTransactionManager 를 선택하면 된다. 스프링 부트는 자동으로 JpaTransactionManager를 스프링 빈에 등록한다.
➡️JpaTransactionManager의 다양한 지원
➡️ 주의점
JPA와 JdbcTemplate을 함께 사용할 경우 JPA의 플러시 타이밍에 주의해야 한다.
JPA는 데이터를 변경하면 변경 사항을 즉시 데이터베이스에 반영하지 않는다. 기본적으로 트랜잭션이 커밋되는 시점에 변경 사항을 데이터베이스에 반영한다.
하나의 트랜잭션 안에서 JPA를 통해 데이터를 변경한 다음에 JdbcTemplate을 호출하는 경우
JdbcTemplate에서는 JPA가 변경한 데이터를 읽기 못하는 문제가 발생한다.
위 문제 해결 방법
All reactions