
JPA 를 사용했을 때의 장점 / 단점
장점
SQL을 작성하지 않아도 쿼리를 통해 데이터를 가져올 수 있다
객체 지향적으로 테이블이 아니라 객체로 생각하여 표현이 가능함
(user.getId() 같은)DB에 구애받지 않고 대다수의 DB를 제어할 수 있음
영속성 개념을 통하여 더티체킹을 통한 감지 자동화
1차 캐시 등의 개념으로 트랜잭션 내부 쿼리 생성 최소화
단점
패러다임의 불일치, SQL은 원자성을 지닌 각각의 row 별 각각 값을 지님
허나 객체로 생각하면 클래스라는 하나의 모음 형식으로 값이 List 적임불일치를 해결 및 활용하기 위한 연관관계를 통한 새로운 복잡성
그로 인한 부가적인 문제들 (로딩 방식, N+1, 예상 못할 SQL 등의 문제 발생)
QueryDSL 을 사용했을 때
QueryDSL 을 통하여 SQL과 유사하게 쿼리를 직접 개발자가 제어한다면
예상 못할 N+1, 로딩 방식 등의 문제를 해결 할 수 있음
복잡성도 원래 단방향, 양방향 연관관계를 없애고
따로 타 테이블의 PK를 개별 컬럼으로 보유한다면 줄일 수 있음
(연관관계 삭제를 통하여)
현실적인 사용법
단순 CRUD → JPA 쿼리메서드
복잡한 조회 및 동적 쿼리 → QueryDSL (연관관계는 Join 으로 해결)
정합성/복잡한 조인의 쿼리 → JPQL Native Query
SQL 타입 추구 → JOOQ, SQL 직접적 사용 방식
Share article