Woopii Vyeolog

Hibernate 관련 정리,(3계층 구조, 간단 설명 포함) 본문

Spring Framework

Hibernate 관련 정리,(3계층 구조, 간단 설명 포함)

WooPii 2020. 3. 20. 14:57

사전 지식

전 블로그에서 MVC모델에 대해 적었을 때(https://woopi1087.tistory.com/4)

 

'3계층 구조(3 Tier architecture) 를 효과적으로 구현 할 수 있는 디자인 패턴이 

MVC패턴이다. ' 이런식으로 말을 했었다.

 

그럼 3계층 구조를 보면, 

1. Presentation Layer( == UI Layer)(View 와 Controller)

2. Business Logic Layer( == Service Layer)(Service)

3. Data Access Layer( == Persistence Layer)(Repository)

3개의 층으로 나누어져 있다. 

이 3계층에서 Hibernate와 관련된 계층은 가장 아래 계층인 Data Access Layer( == Persistence Layer)이다.

 

여기서 Persistence(영속성)이란 단어를 주목할 필요가 있다.

 

영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 얘기 한다. 

 

영속성을 갖지 않는 데이터(예 : list)는 단순히 메모리 상에서만 존재하기 때문에 프로그램을 종료하면 해당 데이터는 사라지게 된다. 그렇기 때문에 파일에 저장하거나, 데이터베이스에 저장하여 영속성을 갖게 하는 것이다. 

 

그렇다면 Persistence Layer는 데이터에 영속성을 부여해주는 계층이라는 의미이다.

 

DB처리를 통한 영속성을 부여하는 경우 이를 직접 JDBC를 이용하여 구현 하기도 하고, Persistence framework를 이용하여 구현한다. 

 

JDBC를 이용한 프로그래밍이 복잡하고 번거로웠기 때문에, 간단한 작업만으로 데이터베이스와 연동되고 속도와 편의성, 안정성이 높은 Persistence framework가 나온것이다. 

 

JDBC(Java DataBase Connectivity)

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

JDBC는 쿼리를 통해 데이터베이스에서 자료를 처리하는 방법을 제공한다.

 

Persistence Framework는 SQL Mapper 와 ORM(Obejct Relationship Mapper)로 나눌 수 있다.

 

1. SQL Mapper는 SQL문장과 객체(Object)를 매핑한다.

Mybatis, jdbcTemplate 은 SQL Mapper이다.

 

2. ORM은 DB테이블과 객체(Object)를 매핑한다.

JPA, Hibernate는 ORM이다.

 

JPA(Java Persistence API)

자바 ORM 기술에 대한 API 표준 명세로서, Java에서 제공하는 API이다.
자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.

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

기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다.

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

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

 

SQL Mapper는 SQL문장과 객체를 매핑하기 때문에 직접 SQL을 적어줘야 하지만, ORM은 DB테이블과 객체 간의 관계를 바탕으로 자동으로 SQL을 생성해 준다.

 

ORM은 관계형 데이터베이스의 ‘관계’를 Object에 반영하자는 것이 목적이라면, SQL Mapper는 단순히 필드를 매핑시키는 것이 목적이라는 점에서 지향점의 차이가 있다.

 

Hibernate

Hibernate는 자바 기반의 ORM(Obejct Relationship Mapper)이다.(JPA의 구현체 중 하나이다.)

 

쉽게 말해서, DB서버에 있는 관계형 DB table과 java객체를 매핑(연결)시켜 사용하는 프레임워크인 것이다.

 

Hibernate SQL을 직접 사용하지 않는다.(그렇다고 JDBC API를 사용하지 않는것은 아니고 내부적으로 동작한다.)

 

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

 

Hibernate는 Repository계층을 관리함으로서 객체 지향적으로 데이터를 관리하게 되어. 개발자가 비지니스 로직에 집중 할 수 있는 환경을 제공한다.

 

또한 다양한 기능들이 있어 개발 생산성 향상과 애플리케이션 성능 향상, 개발 리스크 최소화를 기대 할 수 있다.

Hibernate Architecture

https://howtodoinjava.com/hibernate-tutorials/

1. Configuration(설정) : 일반적으로 hybernate.properties 또는 hibernate.cfg.xml 파일로 작성된다. Java환경에서는 @Configuration으로 주석을 단 클래스가 Configuration이다. Session Factory에서 Java Application 및 Database와 함께 작업할 때 사용한다.

 

2. Session Factory : 사용자 어플리케이션에서 Session Factory에 Session 객체를 요청하면 Session Factory는 Configuration 정보를 사용하여 Session Object를 인스턴스화 한다. 

 

3. Session : 응용 프로그램과 데이터베이스 간의 상호작용을 나타낸다.(항시적으로 )

세션의 인스턴스는 SessionFactory Bean으로 부터 발생한다.

 

4. Query : 응용프로그램이 하나 이상의 저장된 객체(Persistence Object)에 대해 데이터베이스를 쿼리할 수 있게한다.

 

5. First-level cache : 데이터베이스와 상호 작용하는 동안 Hibernate Session 객체가 사용하는 기본 캐시를 나타낸다. Session cache라고도 하며, 현재 세션 내에서 객체를 현제 Session에 저장한다. Session에 저장된 객체에서 DB에 하는 모든 요청은 Session cache를 거친다. Session 객체가 활성중일 때만 Session cache를 사용할 수 있다.

 

6.  Transaction  : 데이터의 영속성을 달성시키고(commit) 예기치 못한 상황이 발생할 경우 롤백할 수 있게한다.

 

7. Persistent objects : Persistent objects는 관계형 데이터베이스의 한 필드로서 유지되는 평범한 오래된 Java 객체들(POJOs)이다.

구성 파일(hibernate.cfg.xml 또는 hybernate.properties)에서 구성하거나 @Entity 어노테이션으로 선언될 수 있다.

 

8. Second-level-cache : 여러 세션에 걸쳐 객체를 저장하는 데 사용된다(application 단위의 cache). Second-level-cache는 명시적으로 사용되며, 해당 캐시에 대한 캐시 공급자를 제공해야 한다. 일반적인  Second-level-cache 공급자 중 하나로 EhCache가 있다.

 

 


출처 & 참고

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://howtodoinjava.com/hibernate-tutorials/

 

Hibernate Tutorial - HowToDoInJava

Hibernate Tutorial for beginners and experienced developers. Learn hibernate annotations, mappings, caches, configuration, HQL and validation with examples.

howtodoinjava.com

 

Comments