ORM 구현체- HIBERNATE, MYBATIS

반응형
SMALL

Hibernate는 JPA의 대표적인 구현체로, ORM의 원칙에 따라 동작하며, MyBatis와 달리 SQL 생성과 데이터베이스 작업을 자동화합니다. MyBatis는 SQL을 개발자가 작성하도록 설계된 매퍼이기 때문에, 직접 SQL 작성이 필요합니다.

Hibernate

Hibernate는 JPA(Java Persistence API)의 구현체로, 자바 객체와 데이터베이스 테이블 간의 자동 매핑을 제공하는 완전한 ORM 프레임워크입니다.

  • 주요 특징
    • 객체-관계 매핑(ORM) 자동화: 자바 객체와 데이터베이스 테이블을 매핑하여 SQL을 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있습니다.
    • JPA 표준 구현: JPA 인터페이스를 통해 객체지향적인 방식으로 데이터베이스 작업을 할 수 있습니다.
    • 자동화된 CRUD: save, find, delete 등 기본 CRUD 작업을 쉽게 수행할 수 있습니다.
    • JPQL (Java Persistence Query Language): JPQL을 통해 객체 중심의 쿼리를 작성하며, 관계형 데이터베이스의 테이블이 아닌 엔티티를 대상으로 SQL처럼 작업할 수 있습니다.
    • 캐시 지원: Hibernate는 1차 및 2차 캐시를 제공하여 성능을 최적화합니다.
  • 장점
    • 생산성: CRUD 작업이 자동화되어 SQL을 일일이 작성할 필요가 없어 빠르게 개발할 수 있습니다.
    • 데이터베이스 독립성: 특정 데이터베이스에 의존하지 않고 다양한 DBMS에서 호환성을 제공합니다.
    • 객체 지향 코드: 객체지향적인 설계를 유지하면서 데이터베이스와 연동할 수 있어 코드의 가독성과 유지보수성이 높습니다.
  • 단점
    • 학습 곡선: JPA와 ORM 개념을 이해해야 하므로 초기 학습이 필요합니다.
    • 성능 문제: ORM에서 자동 생성된 쿼리가 복잡해질 경우 성능 저하가 발생할 수 있습니다.

MyBatis

MyBatis는 SQL 중심의 프레임워크로, 직접 작성한 SQL과 자바 객체 간의 매핑을 지원합니다. MyBatis는 Hibernate처럼 완전한 ORM은 아니며, SQL 매퍼 프레임워크에 가깝습니다.

  • 주요 특징
    • SQL 중심의 매핑: MyBatis는 개발자가 SQL을 직접 작성하여 자바 객체와 매핑합니다. 복잡한 쿼리를 다루기 쉽습니다.
    • 유연한 SQL 관리: MyBatis는 XML 파일 또는 애너테이션을 통해 SQL 쿼리를 관리하며, 동적 SQL을 지원하여 조건에 따라 SQL 문을 유연하게 생성할 수 있습니다.
    • 데이터 매핑: 개발자가 작성한 SQL의 결과를 자바 객체로 변환해주는 매핑 기능을 제공합니다.
  • 장점
    • SQL의 유연성: 복잡한 쿼리 작성이 가능하여, 다중 테이블 조인이나 복잡한 비즈니스 로직을 SQL로 세밀하게 제어할 수 있습니다.
    • 성능 최적화: 쿼리의 실행 계획을 직접 작성하고 제어할 수 있으므로 성능 최적화가 가능합니다.
    • 명확한 SQL: SQL을 명시적으로 작성하므로, SQL 실행 결과를 직관적으로 이해할 수 있습니다.
  • 단점
    • 반복 코드: CRUD 작업을 위해 직접 SQL을 작성해야 하므로, SQL 코드가 반복될 수 있습니다.
    • 데이터베이스 의존성: 특정 DBMS에 의존적인 쿼리가 발생할 수 있어, 데이터베이스 독립성이 떨어질 수 있습니다.
    • 작업량 증가: 복잡한 SQL이 많아질수록 SQL 작성 및 관리가 복잡해집니다.

Hibernate와 MyBatis의 주요 차이점 비교

 

특징
Hibernate MyBatis
ORM 수준 완전한 ORM SQL 매퍼 (반쪽 ORM)
쿼리 작성 방식 JPQL 및 자동 생성 SQL 직접 작성
유연성 자동화된 CRUD 작업에 유리 복잡한 쿼리와 조건부 SQL에 유리
캐시 기능 1차, 2차 캐시 제공 기본적으로 캐시 기능 제공하지 않음
DB 독립성 데이터베이스 독립성 우수 DB에 따라 SQL이 달라질 수 있음
적합한 사용 사례 CRUD가 많은 경우 복잡한 쿼리 작업이 많은 경우

결론

  • Hibernate는 자바 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 완전한 ORM 프레임워크로, CRUD가 많고 객체 지향 설계가 중요한 프로젝트에 적합합니다.
  • MyBatis는 SQL 매퍼 프레임워크로, SQL을 직접 작성하며 복잡한 쿼리와 조건을 제어하기 유리하므로, 비즈니스 로직이 복잡하고 SQL 제어가 중요한 프로젝트에 적합합니다.

이 두 프레임워크는 각기 다른 장점을 가지고 있으므로, 프로젝트의 요구사항에 따라 적절하게 선택하여 사용하는 것이 중요합니다.

2024.10.30 - [cs정리] - SPRING BOOT ORM이란?

 

SPRING BOOT ORM이란?

ORM은 객체-관계 매핑이라는 뜻으로, 객체 지향 프로그래밍 언어에서 사용하는 객체와 데이터베이스의 테이블 간의 데이터를 자동으로 변환해 주는 기술이다. 간단히 말해 , 자바나 파이썬 같은

ha-vlog.tistory.com

2024.10.30 - [cs정리] - SPRING BOOT JPA란?

 

SPRING BOOT JPA란?

JPA는 Java Persistence API의 약자로, 자바에서 객체와 관계형 데이터베이스를 쉽게 연결하고, 관리하기 위해 만들어진 ORM(Object Relational Mapping) 표준 인터페이스 입니다. JPA는 객체 지향 프로그래밍과

ha-vlog.tistory.com

 

반응형
LIST

'cs정리' 카테고리의 다른 글

스프링 빈 주입시 생기는 문제들  (0) 2024.11.09
SPRING BEAN이란  (0) 2024.11.09
SPRING BOOT ORM이란?  (0) 2024.10.30
SPRING BOOT JPA란?  (0) 2024.10.30
자바 추상클래스와 인터페이스 차이  (0) 2024.10.29