hibernate, mybatis, ibatis

spring

sql(mysql, mssql)

jpa

jdbc

jwt

entity

 

 

 

영속성 Persistance

애플리케이션의 생명주기를 연장시켜주는 데이터 속성

객체지향언어에서의 영속성은 실행되었던 애플리케이션이 실행을 멈춘 후에도 객체에 접근 가능하게 해준다.

 

JDBC

Java DataBase Connectivity. JDBC API는 CRUD(Create, Read, Update, Delete)를 수행하는데 SQL을 사용한다.

JDBC코드는 자바 클래스에 포함되며, 이는 비즈니스 로직과 강하게 연결되있다는 것을 뜻한다. 이 코드는 데이터베이스들 간에 표준화 되어 있지 않은 SQL에 기반한다. 다른 데이터베이스로의 이전하는 것을 어렵게 한다.

 

ORM

Object Relational Mapping. 관계형 데이터베이스의 테이블에 애플리케이션 객체를 투명하게 저장할 수 있는 기술

ORM은 사용자로부터 데이터베이스 아키텍쳐 밑단에 있는 것을 숨기는 가상 데이터베이스처럼 동작한다. 완전한 CRUD연산과 객체지향 쿼리를 하기 위한 기능을 제공한다. 또한 애플리케이션의 트랜잭션 관리를 돕고 메타데이터 매핑을 지원한다. 

 

iBATIS

ORM은 내부적으로 JDBC나 SQL코드로 바로 매핑시킨다. 하지만 어떤 애플리케이션 상에서 SQL쿼리를 직접 조작해야할 경우가 있는데 업데이트 쿼리들이 필요한 애플리케이션을 개발할 경우 ORM이 생성하는 SQL에 의존하는 것보다는 직접 SQL을 사용하는게 더 효과적이다. 

데이터를 위한 코드를 구현하기 위해 사용되는 API레이어와 심플한 매핑을 제공한다. 

iBATIS는 도메인에 있는 객체를 데이터베이스의 테이블로 매핑시키는 메타데이터 매퍼 대신에 XM디스크립터를 통해 ResultSets나 SQL문장이나 순차적인 저장방식으로 매핑시키는 데이터 매퍼를 사용하기 때문에 데이터 모델과 객체 모델이 정확하게 매핑될 필요가 없다.

따라서 iBATIS는 데이터 모델과 객체 모델 각각을 독립적으로 다룰 수 있다.

적합: SQL에 대한 모든 컨트롤을 하고자 할 때 (SQL중심적)

부적합: 애플리케이션과 데이터베이스간의 설계에 대한 모든 조작을 하고자 할 때

 

Hibernate

객체 기반의 모델링을 지원함으로서 persistance에 대하여 투명한 체계를 제공한다. 데이터베이스와 애플리케이션 간의 매핑을 위해 XML을 이용하고 매우 정제되어 있는 객체를 지원한다.

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

 Hibernate는 선택된 데이터베이스에 기반하여 JDBC코드를 생성하므로써 JDBC코드를 쓰면서 사용하는 문제로부터 해방시켜준다. 또한 커넥션 풀도 지원해준다. 

내부적으로 Hibernate는 다른 애플리케이션과의 통함을 위한 JTA(Java Transaction API)와 JNDI를 적용하기 위한 데이터베이스의 추상화 계정을 제공하는 JDBC를 사용한다.

Hibernate는 Session과 Transaction 두가지 인터페이스로 구성되어 있다. 

적합: 하나부터 열까지 OR매핑을 하고자 할 때. SQL에 익숙하지 않은 객체지향 프로그래머에게 최고의 옵션

부적합: 쿼리로 제어하고자 할 때

 

JPA

JPA는 애플리케이션 도메인에 있는 자바 객체와 관계 데이터베이스에 있는 테이블간의 매핑설정을 하기 위해 메타데이터 어노테이션 그리고(혹은) XML 디스크립터 파일을 사용한다. JPA는 완전한 ORM 솔루션이며 상속과 다형성을 지원한다. 또한 entity beans에서 사용하던 EJB-QL JPQL(Java Persistence Query Language) 과는 다른 JPQL(Java Persistence Query Language)라는 SQL과 비슷한 쿼리 언어를 정의한다. JPA를 사용하면 현재 사용하고 있는 Java  EE container에서 제공하는 기본 퍼시스턴스 프로바이더를 사용하는 대신에 JPA 스팩을 구현한 어떤 퍼시스턴스 프로바이더든 간에 연결시킬 수 있다.

 

Hibernate + JPA

Hibernate 자체를 사용하고자 한다면 JDBC 객체를 조작할 필요 없이 HQL을 사용하여 SQL을 생성하는 Hibernate Core 모듈을 사용하게 될 것이다(애플리케이션은 여전히 데이터베이스에 독립적이다)

Hibernate Core는 어떤 애플리케이션 서버든간에 사용될 수 있으며 object-relational 매핑의 수행을 필요로 하는 그 어떤 Java 애플리케이션에도 사용될 수 있다. 이 매핑은 navtive Hibernate API인 Hibernate Query Language와 XML 매핑에 의해 이루어질 것이다. Hibernate 팀은 EJB3 스팩 개발에 깊이 관여를 해왔다. EJB3에 대한 도입에 이어서 EJB3 퍼시스턴스의 스탠드얼론 구현은 Hibernate의 일부로 가용해 졌다-Hibernate 어노테이션과 Hibernate EntityManager. 이 두가지는 Hibernate Core의 최상위에 구현되어 있다. EJB3의 사용을 필요로 하는 Java EE 5를 사용하여 개발된 애플리케이션을 위하여 Hibernate EntityManager 는 퍼시스턴스 프로바이더에 대한 선택사항으로서 고려될 수 있다. Java EE 5로 개발된 애플리케이션은 Hibernate와 JPA를 함께 사용할 수 있을 것이다

 

Maven

Maven이란 자바용 프로젝트 관리 도구이다.

pom.xml파일을 이용해 관련된 라이브러리 파일과 모듈을 자동으로 다운로드하고 관리한다.

프로젝트를 관리하기 위한 툴이다.

라이브러리, 컴파일, 테스트, 패키지 등 다양한 기능을 제공한다.

네트워크에 연결되어 있지 않으면 다운로드가 되지 않는다는 단점이 있다.