우선 hibernate를 공부하기 전에 ORM과 JPA에 대한 개념을 간단하게 알아야 한다고 생각했다.
그래서 오늘은 Persistence framework 그리고 JAVA를 사용할 때 필요한 JPA, 그에 관련된 hibernate순으로 간단하게 개념만 공부를 해봤습니다. (사실 hibernate라는 주제이지만 두루두루 다룹니다..ㅎㅎ)
persistence (영속성)
-영구적으로 메모리를 저장한다
-데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미
-파일 시스템, 관계형 테이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현
Persistence framework
-JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업으로 db와 연동되는 시스템 개발 가능 -> 안정적인 구동 보장
SQL mapper vs ORM
1) SQL mapper
-SQL 문장으로 DB를 다룬다
-SQL을 명시 해줘야 한다
Ex)Mybatis, JdbcTempletes 등
-직접적으로 sql을 사용하기 때문에 불필요한 코드를 줄일 수 있다.
1-1)ORM(Object-Relational Mapping)(JPA)
-객체를 통해 간접적으로 데이터를 다룬다
-객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
-ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작가능
-persistence API (JPA, hibernate 등)
EX)
python -Django ORM
라라벨(오픈 php웹 프레임워크) => eloquent ORM
Node.js => sequlize or type ORM
JDBC(Java Database Connectivity)/database의 종류에 상관이 없음
-DBMS를 편하게 다룰 수 있도록 일종의 규격을 만든 것이 JDBC
-자바 프로그램이 데이터 베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스
-JDBC는 모든 데이터 베이스에 접근할 수 있도록 JAVA에서 제공하는 API
-JAVA의 모든 Persistence Framework는 내부적으로 JDBC API를 이용
-JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공
JPA(Java Persistence API)
-JPA를 사용해야 하는 이유 : sql 코드의 반복, 객체지향과 관계지향 데이터베이스의 패러다임 불일치
-JAVA ORM 기술에 대한 API 표준 명세로, Java에서 제공하는 API
-JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공
문제)
검색을 할때도 엔티티 대상으로 검색 - > 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능
- > 필요한 데이터만 불러오려면 결국 SQL이 필요 - >JPQL
-JPA 구성요소 3가지
1) javax.persistance 패키지로 정의된 API 그 자체
2) JPQL(Java Persistence Query Language)
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공(SQL문법과 유사/SELECT,FROM,WHERE,등등)
- JPQL은 엔티티 객체를 대상으로 쿼리 사용
select_문 :: =
select_절
from_절
[where_절]
[groupby_절]
[having_절]
[orderby_절]
+SQL은 데이터베이스 테이블을 대상으로 쿼리 작성 / JPQL은 엔티티 객체를 대상으로 쿼리 작성
3) 객체/관계 메타데이터
+JPQL사용법
JPA의 대표적인 구현체
-ORM framework
-Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials
Hibernate
-JPA는 DB와 자바 객체를 매핑하기 위한 인터페이스(API)를 제공하고 JPA 구현체(하이버네이트)는 이 인터페이스를 구현한 것
-Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작
->HQL(Hibernate Query Language)
-HQL(Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함
-완전히 객체 지향적이며, 상속 , 다형성 , 관계등의 객체 지향의 강점을 가지고 있음
-쿼리 결과로 객체를 반환하며 프로그래머에 의해 직접 생성,접근 가능
-SQL에서 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공
-여러 테이블을 조인할때 명시적인 join을 요구하지 않음
[장점]
-객체지향적으로 데이터를 관리 할 수 있기 때문에 비지니스 로직에 집중 가능, 객체 지향 개발이 가능
-테이블 생성, 변경, 관리가 쉬움
-빠른 개발이 가능
[단점]
-메서드 호출만으로 쿼리를 수행하므로 성능이 떨어질 수 있음
-러닝커브가 존재한다
->어렵다(눈에 보이지 않은 많은 내용이 있기 때문에 )
->데이터 손실 가능성이 있음 (persistence context)
->성능상 문제가 있을 가능성이 있음
References
-gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html
'Spring' 카테고리의 다른 글
@Autowired (0) | 2021.05.17 |
---|---|
페이징처리 (0) | 2021.05.10 |
Spring VS Node.js (0) | 2021.04.25 |