백엔드 개발 · 중급
JPQL과 QueryDSL의 차이점과 각각의 장단점에 대해 설명해주세요.
힌트 · 타입 안전성, 동적 쿼리, 학습 곡선을 비교해보세요.
JPQLQueryDSLORM타입 안정성동적 쿼리
모범답안
JPQL과 QueryDSL은 JPA를 사용할 때 쿼리를 작성하는 방식입니다. JPQL은 SQL과 유사한 문자열 기반의 쿼리 언어이고, QueryDSL은 자바 코드로 쿼리를 작성할 수 있게 해주는 프레임워크입니다.
가장 큰 차이점은 타입 안전성입니다. JPQL은 컴파일 시점에 오류를 잡기 어렵지만, QueryDSL은 컴파일 시점에 타입 오류를 발견할 수 있습니다.
동적 쿼리 측면에서는 QueryDSL이 훨씬 강력합니다. 조건에 따라 쿼리를 유연하게 변경하기 쉽습니다. JPQL은 문자열을 조합해야 해서 복잡해질 수 있습니다.
학습 곡선은 JPQL이 더 낮습니다. SQL에 익숙하다면 쉽게 배울 수 있습니다. QueryDSL은 별도의 학습이 필요하지만, 익숙해지면 생산성이 높아집니다.
간단히 요약하면, JPQL은 배우기 쉽지만 타입 안전성이 떨어지고 동적 쿼리에 약합니다. QueryDSL은 학습 곡선이 있지만 타입 안전성이 높고 동적 쿼리에 강력합니다. 프로젝트의 복잡도와 요구사항에 따라 적절한 기술을 선택하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 JPA / ORM 면접 질문
- JPA에서 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이점과 사용 시 주의사항은?
- JPA의 더티 체킹(Dirty Checking)이란 무엇이며, 어떻게 동작하나요?
- JPA의 @ManyToOne, @OneToMany 관계에서 양방향 매핑 시 주의사항은 무엇인가요?
- @Transactional의 readOnly 속성은 어떤 역할을 하며, 성능에 어떤 영향을 주나요?
- JPA에서 상속 관계 매핑 전략(SINGLE_TABLE, JOINED, TABLE_PER_CLASS)의 차이점과 선택 기준은?
- JPA 2차 캐시(Second Level Cache)란 무엇이며, 1차 캐시와의 차이점은 무엇인가요?