DB

[DB] JPA vs MyBatis

Joo.v7 2024. 10. 8. 11:32

1. 영속성(Persistence)

  • 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성.
  • 영속성을 갖지 않는 데이터는 메모리에서만 존재하기 때문에, 프로그램을 종료하면 모두 사라진다.
  • 메모리 상의 데이터를 파일 시스템, 관계형 DB, 등을 활용하여 영구적으로 저장해서 영속성을 부여한다.

데이터를 DB에 저장하는 3가지 방법

  1. JDBC(Java Database Connectivity)
    • Java에서 DB에 접속하고 SQL을 실행할 수 있게 해주는 Java 표준 API.
  2. Spring JDBC
    • Spring Framework에서 제공하는 JDBC 모듈, JDBC의 복잡함을 간소화. ex) JDBC Template
  3. Persistence Framework: DB와 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 Framework.  
    • SQL Mapper: Java의 메소드와 SQL을 매핑. (SQL 문장을 직접 작성해 DB의 데이터를 다룬다)
      ex) MyBatis
    • ORM(Object Relational Mapping):  DB 테이블과 Java 객체를 매핑하여, SQL 없이 객체를 통해 DB 작업 처리.
      ex) JPA, Hibernate

 


2. MyBatis

  • SQL을 직접 작성하여 DB와 상호 작용하는 SQL Mapper Framework.
  • XML과 Annotation을 사용하여 SQL 매핑을 정의. (XML 파일에 Query를 직접 작성하고, JDBC 코드로 바꾸어 실행)
  • SQL을 직접 작성.

장점

  • SQL Query를 직접 작성하므로, 최적화된 Query를 구현할 수 있다.
  • Query 자체를 독립적인 파일(XML)에 작성할 수 있다.
  • 복잡한 쿼리문 작성 가능.

단점

  • 변경시, SQL Query를 직접 수정해야 한다.
  • XML 특성상, Query에 오류가 있더라도 빌드과정에서 오류를 확인할 수 없다.

 


3. JPA (Java Persistence API)

  • Java에서 ORM 기술을 표준화하기 위한 API.
  • 객체 중심의 매핑을 사용.
  • JPA는 ORM을 사용하기 위한 Interface의 집합이며, 사용을 위해 이를 구현한 Hibernate 등 ORM Framework를 사용해야 한다.
  • Hibernate는 SQL을 직접 사용하지 않고, 메소드 호출만으로 Query가 수행된다.
  • JPQL(JPA Query Language)을 사용하여 객체를 검색하고 조작.

동작

  • JPA가 JDBC API를 사용해서 DB와 통신하고 SQL을 호출하고 반환한다.

출처: https://velog.io/@kbk3771/Java-%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%EC%8A%A4-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-Persistence-Framework#mybatis

 

장점

  • Query를 직접 작성하지 않아서 간편하다.

단점

  • 복잡한 연산을 수행하기에는 부적절하다.
  • 초기 생산성은 높을 수 있으나, 사용시 성능상 이슈가 발생할 수 있다.
  • 성능 이슈의 연장선으로 복잡한 내부 로직을 이해해야 할 필요가 있다.

 


 

 

참고