쎈 쿼리 = 순수 SQL(Native SQL)

ssongyi·2025년 7월 12일
0

Java/Spring TIL

목록 보기
25/27

“쎈 쿼리”는 일반적으로 개발자들이 직접 SQL을 작성하는 방식, 즉 순수 SQL(=Native SQL)을 사용할 때 쓰는 은어

✅ 쎈 쿼리란?

JPA나 QueryDSL 같은 추상화된 ORM 도구를 사용하지 않고, 직접 SQL을 작성해서 DB에 날리는 쿼리


🧩 예를 들어 보면:

🔸 일반 JPA (JPQL)

em.createQuery("SELECT m FROM Member m WHERE m.age > :age")

🔸 QueryDSL

queryFactory.selectFrom(member)
            .where(member.age.gt(30))

🔸 💪 “쎈 쿼리” (Native SQL)

em.createNativeQuery("SELECT * FROM member WHERE age > 30", Member.class)

✅ 왜 "쎈"이라고 부르나요?

  • JPA, QueryDSL은 추상화 계층 위에서 동작하며, DB 종류에 따라 SQL이 자동 생성됨

  • 반면, Native SQL은 추상화 없이 직접 DB에 날리는 강한 쿼리이기 때문에 "쎈 쿼리"라고 부름

  • 쿼리 최적화, 복잡한 JOIN, 서브쿼리 등 성능이 중요한 경우에 자주 사용됨


✅ 장단점 비교

항목쎈 쿼리 (Native SQL)JPQL/QueryDSL
성능 제어✅ 세밀한 튜닝 가능❌ 제한적
복잡한 쿼리✅ 자유롭게 작성❌ 구조적 제약
유지보수성❌ DB 종속적✅ 추상화로 관리
타입 안정성❌ 없음 (런타임 오류)✅ 컴파일 체크 가능

✅ 언제 쎈 쿼리를 쓰나요?

  • ORM으로 표현하기 힘든 복잡한 통계 쿼리, 서브쿼리, 집계 등을 처리할 때

  • 성능 최적화가 중요한 상황 (ex. 대용량 데이터)

  • DB 벤더 특화 기능 사용 시 (e.g. Oracle의 CONNECT BY, PostgreSQL의 WITH RECURSIVE 등)


✅ 예시: 쎈 쿼리를 사용하는 Spring Data JPA

@Query(value = "SELECT * FROM member WHERE age > ?1", nativeQuery = true)
List<Member> findByNativeAgeGreaterThan(int age);

0개의 댓글