강의

멘토링

로드맵

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

[서울_17반_배태용]님의 프로필 이미지
[서울_17반_배태용]

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

소개

Native Query와 MyBatis

작성

·

15

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

대부분을 jpa로 작성하고(jpql, QueryDSL), 극 소수의 안되는 것들에만 JDBC Templates, MyBatis를 이용하는 것으로 이해했습니다.

 

1) 그렇다면 가급적 Native Query는 사용을 지양하는게 좋을까요? Native Query를 사용해야할 정도라면 사실 JDBC Templates나 MyBatis를 이용하는게 나을테니까요.

 

2) 만약 그렇다면 MyBatis 등을 처리하기 위한 패키지를 따로 구분해서 처리를 하게 되나요? 이 경우에 .flush()를 처리하기 위해서 entityManager 인스턴스도 가져와서 따로 해줘야할 것 같은데, 구조가 조금 복잡해지지 않을까? 걱정 됩니다.

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. [서울_17반_배태용]님, 질문 주셔서 감사합니다.

Native Query와 관련된 고민을 하고 계시는 것 같네요. 먼저 몇 가지 답변 드리겠습니다.

  1. Native Query 사용 지양 여부: 일반적으로 JPA를 사용할 때 JPQL, HQL 또는 QueryDSL을 최대한 활용하고, Native Query는 꼭 필요할 때만 사용하는 것이 좋습니다. 주로 Native Query를 사용할 때는 복잡한 SQL 조작이 필요하거나 성능 최적화가 필요한 경우입니다. JDBC Templates나 MyBatis는 이 경우보다 더 유연하게 SQL을 작성할 수 있으며, 성능 면에서도 보다 직접적인 제어가 가능합니다.

  2. 구조 분리와 복잡성: MyBatis 등을 사용할 때 패키지 구조를 따로 구분하여 모듈화하는 것이 좋습니다. 이는 코드를 더 깔끔하고 유지 보수하기 쉽게 만듭니다. 예를 들어, 특정 도메인 패키지 안에 SQL Mapper 파일을 두고, MyBatis를 통해 SQL을 실행하는 클래스를 포괄하는 방법이 있습니다. EntityManager를 통해 .flush()를 수동으로 관리해야 하는 경우가 있을 수 있습니다. 그러나 이러한 복잡성은 더 나은 성능과 보다 복잡한 데이터 조작을 가능하게 하므로, 필요한 경우 적절히 사용하시면 됩니다.

관련하여 추가적으로 참고할 만한 질문들을 아래 링크에서 확인하실 수 있습니다:

  1. JPA와 Native Query, 그리고 MyBatis의 활용
  2. JPA에서 Native Query와 JdbcTemplate 사용 사례

고민하고 계신 내용은 많은 개발자 분들이 비슷하게 겪는 부분입니다. 따라서 여러 접근 방식을 시도해 보시고, 가장 적절한 방법을 찾아가는 과정이 필요할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

[서울_17반_배태용]님의 프로필 이미지
[서울_17반_배태용]

작성한 질문수

질문하기