딱 정답이 있다곤 할 수 없음.
상황에 맞춰, 사람에 맞춰 하는 게 좋다고 생각.
JdbcTemplate, MyBatis는 SQL을 직접 작성해야 하므로, SQL에 익숙한 집단에게 좋음.
JPA, 스프링데이터JPA, Querydsl은 배울 필요가 있지만, 생산성이 높아짐.
예를 들어 거의 7~80% 통계쿼리만 작성해야 하는 프로젝트면 MyBatis도 괜찮음.
근데 보통 애플리케이션은 로직과 약간 일부의 통계 보통 이런 식이긴 하다.
그래서 보통 선생님이 추천하는 방식은,
JPA, SpringDataJPA, Querydsl을 기본으로 사용하면서,
해결이 잘 안되는 복잡한 쿼리를 직접 짜는게 나을 경우 JdbcTemplate나 MyBatis 등을 함께 사용.
거의 실무에서 95%정도 JPA,SpringDataJPA,Querydsl, 한 5%정도 JDBCTemplate나 MyBatis로 SQL.
복잡한 통계쿼리를 자주 작성하게 된다면 jdbcTemplate나 MyBatis의 비중이 높아짐.
참고로, 저런 JPA, SpringDataJPA, Querydsl 이런 거 다 내부적으로 JDBCTemplate를 사용하는 거기 때문에, 같이 사용해도 연동되기 때문에 대부분 걱정을 덜 해도 되지만,
JPA와 JdbcTemplate를 함께 사용할 경우 JPA의 플러시 타이밍을 주의해야 한다.
JPA는 데이터 변경 시에 즉시 DB에 반영하지 않는다. Default가 트랜잭션이 커밋되는 시점에 반영한다.
그래서, JPA로 데이터를 변경한 다음 JdbcTemplate를 사용한 경우, JPA가 변경한 데이터를 JdbcTemplate가 읽지 못한다.
이 부분은 JPA호출이 끝난 시점에 JPA 기능 중 하나인 플러시(즉시 반영) 기능을 사용해 DB에 바로 반영해 주어야 한다. (DB에 SQL 날려서 바로 반영 하는거다.)
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
41. 스프링 트랜잭션 우선순위 (0) | 2023.10.14 |
---|---|
40. 스프링 트랜잭션 테스트 (0) | 2023.10.14 |
38. 실용적인 구조로 변환 (0) | 2023.10.14 |
37. 트레이드 오프, SpringDataJPA 사용에 따른 구조변화 (0) | 2023.10.13 |
36. Querydsl 적용 (0) | 2023.10.13 |