아무나개발하자

영속성 (Persistence) 본문

JPA

영속성 (Persistence)

개발천재나천재 2023. 1. 16. 14:11

영속성(Persistence)

데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.
영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다. 때문에 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 데이터를 영구하게 저장하여 영속성 부여한다.

 

Persistence Framework

지속성 프레임워크(Persistence Framework)는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다. 지속성 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동도 보장한다.

Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다.

 

SQL Mapper와 ORM

 

SQL Mapper : Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술.

객체와 테이블 간의 관계를 매핑하는 것이 아니라, SQL문을 직접 작성하고 쿼리 수행결과를 어떠한 객체에 매핑하여 줄지 바인딩하는 방법. 즉 SQL 의존적인 방법이다. -> DBMS가 바뀌면 코드를 다 바꿔야 된다...

ex) JdbcTemplate, Mybatis

 

o MyBatis

: SQL을 xml파일로 분리하여 관리하고, SQL결과와 객체 인스턴스의 매핑을 도와주는 역할을 수행.

동적쿼리를 지원하여 다이나믹하게 변경되는 쿼리 작성가능.

 

--> SQL을 개발자가 직접 작성하는 문제.

--> DBMS에 종속적인 문제.

--> 비슷한 쿼리를 반복적으로 작성해야 하는 문제

--> 객체와 관계형 테이블 구조간 패러다임 불일치 발생.

 

ORM (Object Relation Mapping) : Object와 DB테이블을 매핑하여 데이터를 객체화하는 기술.

CRUD 관련 메서드를 사용하면 자동으로 SQL이 만들어져 개발자가 반복적인 SQL을 직접 작성하지 않아도 되고, DBMS에 종속적이지 않다. 또한 복잡한 쿼리의 경우 JPQL을 사용하거나 SQL Mapper를 혼용하여 사용할 수 있다.

Java ORM 기술에 대한 인터페이스 표준을 JPA라고 하고, 이를 구현한 가장 대표적인 기술이 Hibernate이다.

ex) Hibernate, EclipseLink, DataNucleus

 

--> DBMS에 의존하지 않음으로써 도메인과 비즈니스 로직 설계에 더 집중할 수 있는 장점

--> 요구사항 변화에 빠른 대처 가능한 장점

--> 복잡한 통계성 쿼리보다는 실시간 처리용 쿼리에 적합

 

 

1. JDBC(Java Database Connectivity)

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


JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다, 모든 Java의 Data Access 기술의 근간으로 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다.


JDBC는 데이터베이스에서 자료를 쿼리 하거나 업데이트하는 방법을 제공한다.

 

JDBC VS JDBC Template

JDBC(Java Database Connectivity) 란?
JDBC(Java Database Connectivity)는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. (모든 Java의 Data Access 기술의 근간)

JDBC는 데이터베이스에서 자료를 쿼리 하거나 업데이트하는 방법을 제공한다.
Plain JDBC API의 문제점
쿼리를 실행하기 전과 후에 많은 코드를 작성해야 한다. EX) 연결 생성, 명령문, ResultSet 닫기, 연결 등
데이터베이스 로직에서 예외 처리 코드를 수행해야 한다.
트랜잭션을 처리해야 한다.
이러한 모든 코드를 반복하는 것으로, 시간이 낭비된다.


# JDBC Template 이란?
JDBC Template은 Spring JDBC 접근 방법 중 하나로, 내부적으로 Plain JDBC API를 사용하지만 위와 같은 문제점들을 제거한 형태의 Spring에서 제공하는 class이다.

Spring JDBC가 하는 일
Connection 열기와 닫기
Statement 준비와 닫기
Statement 실행
ResultSet Loop처리
Exception 처리와 반환
Transaction 처리

Spring JDBC에서 개발자가 할 일
Datasource 설정, SQL 작성, 결과 처리만 하면 된다. 

 

2 JPA (Java Persistence API)

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

 

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

JPA 구성 요소 (세 가지)
1) javax.persistance 패키지로 정의된 API 그 자체
2) JPQL(Java Persistence Query Language)
3) 객체/관계 메타데이터


사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다.
JPA의 대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다.
이 구현체들을 ORM Framework라고 부른다.

 

3. Hibernate

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

 

Hibernate는 JPA의 구현체 중 하나이다. Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는다는 것은 아니다. Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 직접 작성하지 않을 뿐이다.

-------------------------------------------------------------------------------------------
HQL(Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함하고 있다.
HQL은 SQL과 매우 비슷하며 추가적인 컨벤션을 정의할 수도 있다.
HQL은 완전히 객체 지향적이며 이로써 상속, 다형성, 관계등의 객체지향의 강점을 누릴 수 있다.
HQL쿼리는 자바 클래스와 프로퍼티의 이름을 제외하고는 대소문자를 구분한다.
HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.
HQL은 SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공한다.
HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.

-------------------------------------------------------------------------------------------


장점
객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중할 수 있으며, 객체지향 개발이 가능하다.
테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우)
로직을 쿼리에 집중하기보다는 객체자체에 집중할 수 있다.
빠른 개발이 가능하다.


단점
어렵다. (많은 내용이 감싸져 있기 때문에 알아야 할 것이 많다.)
잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다. (persistence context)
성능상 문제가 있을 수 있다. (이 문제 또한 잘 이해해야 해결이 가능하다.)

 

4. Mybatis

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

 

개발자가 지정한 SQL, 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 SQL Mapper이다. JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해 준다. 기존에 JDBC를 사용할 때는 DB와 관련된 여러 복잡한 설정(Connection)들을 다루어야 했지만 SQL Mapper는 자바 객체를 실제 SQL문에 연결함으로써, 빠른 개발과 편리한 테스트 환경을 제공한다.

장점
SQL에 대한 모든 컨트롤을 하고자 할 때 매우 적합하다.
SQL쿼리들이 매우 잘 최적화되어 있을 때에 유용하다.


단점
애플리케이션과 데이터베이스 간의 설계에 대한 모든 조작을 하고자 할 때는 적합하지 않다.
애플리케이션과 데이터베이스 간에 서로 잘 구조화되도록 많은 설정이 바뀌어야 하기 때문이다.

 

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

 

[JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

출처 : https://gmlwjd9405.github.io/2018/05/15/setting-for-db-programming.html

 

[Spring JDBC] Spring JDBC를 이용한 데이터 접근 방법 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

출처 : https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4

 

SQL Mapper와 ORM 차이

프로그램을 실행하는 동안 그 안에서는 많은 데이터들이 사용되고, 만들어진다. 우리는 이 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 것이 필요한데, 이 개념이 바

deveun.tistory.com

 

'JPA' 카테고리의 다른 글

영속성 관리  (0) 2022.08.04