[JPA] JDBC, JPA/Hibernate, MyBatis

leehyunjon·2022년 7월 7일
0

JPA

목록 보기
1/10

Persistence

Persistence영속성으로 데이터를 생성한 프로그램이 종료되어도 삭제되지 않는 데이터의 특성이다.

메모리상 데이터를 JDBC, Persistence FramkeWork를 이용해서 데이터베이스에 저장해 영속성을 부여한다.

Persistence FramkeWork

Persistence FrameWork란 데이터베이스와의 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 프레임워크

  • 장점
    • DBMS에 대한 종속성이 줄어든다.
    • DBMS 교체작업 시 해야할 일이 줄어든다.
  • 단점
    • 잘못된 구현은 속도 저하 및 일관성을 무너트릴수 있다.

SQL Mapper

객체(Object)SQL을 매핑시켜주는 기술.

SQL문장으로 직접 데이터베이스의 데이터를 다룬다.

종류 : MyBatis

  • 장점
    • SQL쿼리를 그대로 사용할 수 있다.
  • 단점
    - DB에 따라 SQL이 다르기 때문에 DB에 종속적이다.

ORM(Object Relation Mapping)

객체(Object)관계형 데이터베이스를 매핑시켜주는 기술로 데이터베이스의 테이블을 객체지향적으로 사용할 수 있다.

객체를 관계형 데이터베이스에 자동으로 영속화 해준다.

SQL쿼리가 아닌 메서드를 통해 데이터를 조작할 수 있다.

종류 : JPA, Hibernate

  • 장점
    • SQL문법이 아닌 메서드를 통해 데이터베이스를 조작할 수 있어 비즈니스 로직을 구성하는데 집중할 수 있다.
    • 객체지향적인 코드가 가능하여 가독성과 생산성 증가.
    • 재사용 및 유지보수가 쉬움.
  • 단점
    • ORM만으로는 복잡한 서비스를 구현하는데 어려울 수 있다.
    • 잘못된 사용 방법으로 속도 저하 및 일관성을 무너트리는 일이 발생할 수 있다.

JDBC, JPA/Hibernate, MyBatis

JDBC(Java DataBase Connectivity)

JDBC란 데이터베이스에 접근할 수 있도록 자바에서 제공하는 API

모든 자바의 데이터베이스 접근의 기본이다.

JDBC 내부의 쿼리를 통해 데이터베이스의 데이터를 읽거나 쓴다.

JDBC의 기본적인 사용 방법

  1. Driver Load
  2. 데이터베이스 연결을 위한 Connection 객체 생성
  3. Statement객체를 생성하여 질의 수행
  4. 질의 결과를 ResultSet객체를 생성하여 결과 저장
  5. 추가 로직 실행 후, 객체들을 close

자세한 코드는 https://victorydntmd.tistory.com/145

JPA(Java Persistence API)

JPA란 자바 ORM 기술에 대한 API 표준 명세서로, 자바에서 제공하는 API이다.
즉, ORM을 사용하기 위한 표준 인터페이스를 모아둔 것이다.

JPA 구성 요소

  • 'javax.persistence' 패키지로 구성된 API 자체
  • JPQL(Java Persistence Query Language)
    • JPA에서 지원하는 다양한 쿼리 기술 중 하나
    • 데이터베이스의 테이블을 대상으로 하는 것이 아닌 엔티티 객체를 대상으로 동작.
    • SQL을 추상화 하여 특정 데이터베이스에 의존하지 않는다.
    • type safe하지 않아 오타로 인한 런타임 에러가 발생할 수 있다.
  • 객체/관계 메타 데이터
    • 객체와 데이터베이스 사이의 매핑정보를 기술한 것

Spring Data JPA

Spring Data JPA는 JPA를 한 단계 더 추상화 한 인터페이스 제공.

Spring Data JPA는 Repository를 통해 영속성 관리하고 JPA는 EntityManager를 통해 영속성 관리를 한다.

  • Repository의 구현으로 JPA를 사용한다.
    • Repository 개발시 인터페이스만 작성하면 Spring Data JPA가 메서드 이름을 분석해서 JPQL을 생성한다.(쿼리 메서드)
    • @Query 어노테이션을 사용하여 JPQL을 직접 작성한다.

Hibernate

Hibernate는 JPA의 구현체 중 하나.

Hibernate 내부에서 JDBC API가 동작하여 개발자가 직접 SQL을 작성하지 않을 뿐 SQL을 사용하지 않는것은 아니다.

HQL(Hibernate Query Language)라는 강력한 쿼리언어를 포함하고 있다.

  • HQL은 SQL과 매우 유사하다.
  • HQL은 객체지향적으로써 상속, 다형성 등의 객체지향 강점을 누릴 수 있다.
  • HQL은 쿼리 결과를 객체로 반환한다.
  • HQL은 SQL에서 제공하지 않는 페이지 네이션과 같은 향상된 기능 제공.

MyBatis

MyBatis는 개발자가 직접 지정한 SQL쿼리를 JDBC에 매핑시켜주는 SQL Mapper이다.
기존 JDBC를 처리할 때는 Connection과 같은 복잡한 설정을 해주어야 했지만 SQL Mapper는 자바 객체를 실제 SQL문에 연결함으로써 빠른 개발과 테스트 환경을 제공한다.


Reference

https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html

https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

https://dbjh.tistory.com/77

https://leveloper.tistory.com/103

https://onecellboy.tistory.com/355

profile
내 꿈은 좋은 개발자

0개의 댓글