본문 바로가기
개발/java spring

[java spring] JDBC와 JPA/Hibernate, Mybatis

by m2162003 2020. 9. 24.

1. Persistence 영속성

- 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성

- 일반적으로 데이터베이스에 저장하면 영속성이 생긴다. 

 

Persistence Layer

- 프로그램 아키텍쳐에서 데이터에 영속성을 부여해주는 계층

- 데이터베이스 역할과 관련된 계층이라고 보면 된다.

- java에서는 jdbc를 이용한 직접 구현과 framework를 이용한 개발 두 가지가 존재하지만 후자를 더 많이 사용한다.

 

2. Persistence Framework

- JDBC보다 간단하게 데이터베이스와 연동가능. 빠른 개발과 안정적인 구동이 장점

- 두 종류가 존재한다. SQL Mapper와 ORM

- 예시: JPA, Hibernate, Mybatis

 

1) SQL Mapper와 ORM

- ORM은 디비 객체를 자바 객체로 매핑함으로써 SQL이 자동 생성되지만 SQL Mapper는 SQL을 명시해 주어야 한다.

- ORM은 RDB의 관계를 객체에 반영하는 것이 목적. SQL Mapper는 단순히 필드를 매핑시키는 것이 목적

 

SQL Mapper

- SQL <-- 매핑 --> Object 필드

- sql 문장으로 직접 디비를 다룬다.

ex) Mybatis, JdbcTemplates

 

ORM

- 디비 데이터 <--매핑--> Object 필드

- 객체를 통해 간접적으로 디비 데이터를 다룸

- sql이 아닌 메서드로 데이터 조작 가능

- persistant API라고도 할 수 있다.

ex) JPA, Hibernate

 

3. JDBC , JPA/Hibernate, Mybatis

 

1) JDBC(Java Database Connectivity)

- Java에서 DB에 접근할 수 있도록 하는 API

- 모든 Persistance Framework은 내부적으로 JDBC API를 사용함.

 

2) JPA(Java Persistent API)

- 자바 ORM 기술에 대한 API표준 명세로 Java에서 제공하는 API

- ORM을 사용하기 위한 표준 인터페이스를 모아둔 것 -> Hibernate도 JPA 구현체의 일부임

- 기존에 Entity Bean을 대체하는 기술이다.

- 구성요소 3가지

: javax.persistance 패키지로 정의된 api 그 자체, JPQL(Java Persistence Query Language), 객체/관계 메타 데이터

- 사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다. 이 때 구현체들을 ORM Framework라고 부름.

ex) Hibernate, EclipseLink, DataNucleus, OpenJPA 등

 

3) Hibernate

- JPA 구현체 중 하나

- 내부에선 JDBC API가 쓰이고 있음. 개발자 대신에 Hibernate가 대신 해주는 것 뿐

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

- HQL의 특징

  • SQL과 비슷하며 추가적인 컨벤션 정의 가능
  • 완전히 객체 지향적. 상속, 다형성, 관계 등 객체 지향의 강점을 누릴 수 있다.
  • 자바 클래스와 property를 제외하고 대소문자를 구분한다.
  • 쿼리 결과로 객체를 반환. 프로그래머에 의해 생성되고 직접 접근 가능.
  • 여러 테이블 작업 시 명시적인 join을 요구하지 않는다.
  • 장점
    • 비즈니스 로직에 집중 가능. 객체 지향 개발이 용이
    • 테이블 생성, 변경, 관리가 쉽다.
    • 쿼리보다는 객체자체에 집중한 로직 개발 가능
    • 빠른 개발 가능
  • 단점
    • 어렵다.
    • 잘못 사용시 데이터 손실이 있을 수 있음
    • 성능 문제가 있을 수도

4) Mybatis

- SQL Mapper의 일종

- 자바 객체를 실제 sql문에 연결함으로써 빠른 개발과 편리한 테스트 환경을 제공

  • 장점
    • sql에 대한 모든 컨트롤을 하고자 할 때 매우 적합
    • sql 쿼리들이 최적화되어 있을 때 유용
  • 단점
    • 어플리케이션과 데이터베이스 간의 설계에 대한 모든 조작을 하고자 할 때에는 적합하지 않다.

 

참고: 

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

'개발 > java spring' 카테고리의 다른 글

[java spring] maven 이란  (0) 2020.09.22
[java spring] Bean: Scope와 Injection  (0) 2020.03.25

댓글