본문 바로가기
IT/Spring boot

[Spring boot] Persistent Framework & JPA의 등장

by kyu-nahc 2024. 8. 11.
반응형

데이터 영속성

Persistence(영속성)은 

데이터들이 프로그램이 종료되어도 사라지지 않고, 어떤 곳에 저장되는 개념을 뜻한다.

물리적인 저장소를 이용해 프로그램의 상태와 상관없이 데이터를 저장하는 행위가 영속화이다.

관계형 데이터베이스에 데이터를 저장하기 위해 SQL을 이용해 데이터를 영속화한다고 할 수 있다.

자바에서는 데이터의 영속성을 위해 JDBC 인터페이스를 지원한다.

 

하지만 JDBC를 사용 시 개발자가 DB 연결, 예외 처리 등의 부가적인 요소를 모두 작성하고,

Connection 같은 자원은 더 이상 사용하지 않는다면 반환해줘야 하는데,

이러한 부분 모두 개발자가 직접 처리해야 한다. 

위와 같은 부분을 보완하고 독립적인 Query 생성 환경을 구축하기 위하여

Persistent Framework가 등장하였다.

 

 

Persistent Framework

자바 프로그램에서 관계형 데이터베이스 사용을 돕는 프레임워크로

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

비즈니스 로직에 집중을 위해 JDBC를 한 단계 추상화시켜 불필요한 과정을 숨긴 것으로,

개발자가 직접 JDBC를 사용하지 않을 뿐이지, 내부적으로는 JDBC를 통해 데이터베이스에 접근한다.

즉, Persistence Framework는 개발자가 직접 JDBC Programming을 하지 않도록 기능을 제공한다.

 

Persistent Framework 종류로는 SQL MapperORM 2개가 존재한다.

  • SQL Mapper는 자바 코드와 SQL을 분리하며
    개발자가 작성한 SQL의 수행결과를 객체로 매핑
  • ORM은 객체와 관계형 데이터베이스 사이에서 매핑을 담당하며
    SQL을 생성하여 패러다임의 불일치를 해결

 

위의 사진은 매핑을 통해 데이터베이스의 데이터를 객체화하는 모습이다.

SQL Mapper와 ORM을 좀 더 자세히 비교하면 다음과 같다.

 

SQL Mapper

  • Object와 SQL 필드를 매핑하여 데이터를 객체화하는 기술
  • 객체와 테이블 간의 관계를 매핑하지 않는다.
  • SQL 문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할지 바인딩하는 방법
  • RDBMS에 종속적
  • JdbcTemplate, MyBatis

ORM (Object-Relational Mapping)

  • Object와 DB Table을 매핑하여 데이터를 객체화하는 기술
  • 객체가 DB에 연결되기 때문에 SQL을 직접 작성하지 않음
  • RDBMS에 독립적
  • 복잡한 쿼리의 경우 JPQL을 사용하거나 SQL Mapper를 혼용하여 사용 가능
  • JPA

 

JPA

 

위에서 설명한 것처럼 JPAJava의 ORM (Object-Relational Mapping) 기술 표준이다.

JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, 표준 인터페이스이다.

그리고 JPA 인터페이스의 구현체Hibernate, Spring JPA, EcliplseLink 등이 존재하는 것이다.

JPA는 CRUD(Create Read Update Delete) 메소드 기본 제공하며,

동작을 살펴보면 Java가 JDBC API에 명령을 내리는 것이 아닌, 

JPA가 JDBC API를 사용해서 데이터베이스와 통신하고 SQL을 호출 후 반환한다.

 

 

Hibernate

Hibernate는 ORM Framework 중 하나로, JPA Provider라고도 부른다.

현재 JPA 구현체 중 가장 많이 사용되고, 

Java ORM(JPA) 구조에서 개발자가 따로 Query를 작성하지 않아도 된다.

Hibernate가 내부적으로 Query를 생성하고 JDBC API를 호출하기 때문에,

Hibernate는 SQL을 직접 사용하지 않고, 메소드 호출만으로 쿼리가 수행된다.

Mybatis에서는 관련 DAO의 파라미터, 결과, SQL 등을 모두 확인하여 수정해야 한다.

하지만 JPA의 Hibernate를 사용하면 JPA가 이런 일들을 해주기 때문에 테이블 관리가 쉬워진다.

 

 

 

Spring Data JPA

Spring Data JPAJPA를 더 쉽게 사용하기 위한 Spring Data Framework이다.

JPA의 구현체를 더 추상화시켜 더 쉽고 간편하게

JPA를 이용한 프로젝트를 개발할 수 있게 해주는 Spring 모듈이라고 할 수 있다.

CRUD (Create Read Update Delete) 처리용 인터페이스 제공하며,

Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입한다.

데이터 접근 계층 개발 시 인터페이스만 작성해도 되며,

Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현할 수 있다.

 

 

 

Persistent Context (영속성 컨텍스트)

 

Persistent ContextEntity를 영구 저장하는 환경으로, JPA가 관리하는 Entity 객체의 집합이다.

Entity 객체가 Persistent Context에 들어오게 되면

JPA는 Entity 객체의 매핑 정보를 가지고 데이터베이스에 반영한다.

Entity 객체가 Persistent Context에 들어오게 되어 관리 대상이 되면 그 객체를 영속 객체라고 부른다.

Persistent Context는 Session(세션) 단위로 생명주기를 갖고 있다.

세션이 생성되면서 만들어지고, 세션이 종료되면 없어진다.

 

Persistent Context에 접근하기 위해서 EntityManager를 사용한다.

EntityManager는 아래와 같은 방식으로 동작을 구성한다.

  1. EntityManagerFactory를 통해 EntityManager 생성
  2. EntityManager가 가지고 있는 Transaction을 시작
  3. EntityManager를 통해 Persistent Context에 접근하고 객체를 CRUD 작업
  4. Transaction을 Commit 하여 데이터베이스에 반영
  5. EntityManager 종료

EntityManager의 CRUD와 주요 메소드 및 Entity Life Cycle에 관한 글은 아래를 참고하면 된다.

 

[Spring boot] EntityManager & JPA Entity Life Cycle

Entity ManagerEntityManager는 Persistent Context 내에서 Entity들을 보관 관리한다.Persistent Context와 JPA에 대한 내용은 아래 포스팅에 자세히 나와있다.  [Spring boot] Persistent Framework & JPA의 등장데이터 영속성P

kyu-nahc.tistory.com

 

반응형

loading