인프런 커뮤니티 질문&답변

수환무님의 프로필 이미지

작성한 질문수

실전! Querydsl

소개

MyBatis vs JPA vs JPA + querydsl 질문이 있습니다.

작성

·

3.4K

3

JPA(ORM)

 

장점

1) RDB에 종류와 관계없이 사용 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다.

2) 비지니스 로직에 집중할 수 있다.

3) 테이블 생성, 변경 등 엔티티 관리가 간편하다.

4) 쿼리에 집중할 필요 없어 빠른 개발이 가능하다. 
  

단점

1) 어렵다.

단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, 

 

MyBatis(SQL Mapper)

 

장점

1) JPA에 비해 쉽다.

  SQL 쿼리를 그대로 사용하기에 복잡한 Join, 튜닝 등을 좀더 수월하게 작성 가능하다.

2) SQL의 세부적인 내용 변경 시 좀 더 간편하다.

3) 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다.

 

단점

1) 데이터 베이스 설정 변경 시 수정할 부분이 너무 많다. (Oracle의 페이징 쿼리를 MySQL에서 사용 불가능!)

2) Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.

3) 특정 DB에 종속적이다.

 

Querydsl

 

장점

1) 쿼리를 자바 코드로 작성

2) 문법 오류를 컴파일 시점에 잡을 수 있음.

3) 쉬운 SQL 스타일 문법(복잡한 쿼리 작성 용이)

 

질문 : Querydsl 초반부만 듣고 있는 수강생입니다. 

 

1) 서비스가 MVC + MYBatis에서 JPA + querydsl 바꾸는 점에 있어 생기는 기본적인 문제들이 있을까요?

 

2) QueryDSL MyBatis 대신해 커버 가능할까요?

 

 

답변 2

1

안녕하세요. 수환무님, 공식 서포터즈 OMG입니다.

 

1) 서비스가 MVC + MYBatis에서 JPA + querydsl 바꾸는 점에 있어 생기는 기본적인 문제들이 있을까요?

 

 

A) From절의 서브쿼리를 사용하였다면 JPA에서 지원하지 않는 점이 걸림돌이 될 수 있을 것 같습니다. 또한 잘 모르고 사용할 경우

 

성능상의 이슈(즉시로딩 => N+1 등)가 발생할 수 있고, 영속성 컨텍스트의 개념을 잘 모르고 사용할 경우 예기치 못한 쿼리가 발생하거나 / 발생해야할 쿼리가 발생하지 않는다거나 하는 등의 문제가 에상됩니다..

 

 

2) QueryDSL MyBatis 대신해 커버 가능할까요?

A) 온전히 커버하지는 못하겠지만, 네이티브 쿼리 혹은 JDBC template 등을 조합하여 사용하면 가능하다고 생각합니다.

 

추가로,  아래 영상도 보시면 흥미로울거라 생각합니다 :)

[2018] MyBatis에서 JPA로 - YouTube


감사합니다.

0

15년차 개발자입니다. jpa+querydsl 조합도 써봤지만 산으로 간다는 느낌을 많이 받았습니다. 배우는 문법이 더 많아 진다는 느낌.. 먼가 한계가 있어 추가적으로 덕지덕지 붙는 느낌.. 그리고 jpa쓰시면 db종류별 쿼리작성능력도 감퇴 하는 느낌이 들었습니다. 제 갠적으론 RDB는 쿼리작성능력도 중요하다고 생각하는데 JPA가 도움이 안된다는 느낌을 받았습니다. 복잡한 쿼리를 사용할땐 쿼리만 잘작성하면 끝나는데 JPA는 문법이 덕지덕지붙다가 산으로 간다고 해야할까.. DB쿼리를 몰라도 혹은 DB가 바껴도 사용할수 있는 장점은 있으나 RDB의 본질은 Sql입니다. 자동으로 만들어지는건 원치않는 방향으로 쿼리가 실행되면 성능이 나오지 않는 경우도 꽤 많이 봤습니다. 그리고 jpa로는 쿼리튜닝에도 한계가 있네요. 지나가다 적어봅니다.