프로그램이 종료되어도 사라지지않는 데이터의 특성
메모리에서만 존재하는 데이터는 프로그램이 종료되면 내용을 잃어버리기 때문에
파일, RDB, 객체 DB 등을 활용하여 데이터에 영속성을 부여해줌
a. 프로그램 아키텍처에서, 데이터에 영속성을 부여해주는 계층
- 계층 종류 -
프레젠테이션 계층 (Presentation layer) - UI 계층 (UI layer)
애플리케이션 계층 (Application layer) - 서비스 계층 (Service layer)
비즈니스 논리 계층 (Business logic layer) - 도메인 계층 (Domain layer)
데이터 접근 계층 (Data access layer) - 영속 계층 (Persistence layer)
JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장
SQL Mapper / ORM 으로 나뉨
ORM은 데이터베이스 객체를 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성해주지만 SQL Mapper는 SQL을 명시해줘야함
ORM은 RDB의 관계를 Object에 반영하는 것이 목적이라면, SQL Mapper는 단순히 필드를 매핑시키는 것이 목적이라는 점에서 지향점의 차이가 있다.
데이터베이스 데이터 <--- 매핑 ---> Object 필드
-> 객체를 통해 간접적으로 DB를 다룬다
-> ORM을 이용하여 직관적인 메서드로 데이터 조작이 가능
-> 객체간의 관계를 바탕으로 SQL을 자동 생성
Persistant API라고도 한다. (JPA, Hibernate)
-------------------------------------------------------------------->
Application | JDBC(Interface) | JDBC(Impementations) | Persistence Layer |
---|---|---|---|
DAO | Spring JDBC | JDBC(Driver) | Database |
Java ORM 기술에 대한 API 표준 명세로 이 또한 Java에서 제공하는 API
= JPA는 ORM을 사용하기 위한 표준 Interface를 모아둔 것
JPA 구성 요소
1) javax.persistance 패키지로 정의된 API 그 자체
2) JPQL(Java Persistence Query Language)
3) 객체/관계 메타데이터
사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다.
JPA의 대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다.
이 구현체들을 ORM Framework라고 부른다
JPA의 구현체 중 하나로 JDBC를 거쳐 HQL(Hibernate Query Language)를 사용한다.
HQL(Hibernate Query Language)
1) HQL은 SQL과 매우 비슷하며 추가적인 컨벤션을 정의할 수도 있다.
2) HQL은 완전히 객체 지향적이며 이로써 상속, 다형성, 관계등의 객체지향의 강점을 누릴 수 있다.
3) HQL쿼리는 자바 클래스와 프로퍼티의 이름을 제외하고는 대소문자를 구분한다.
4) HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.
5) HQL은 SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공한다.
6) HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.
장점
단점