우리가 사용하는 대부분 프로그램은 사용자가 입력한 데이터나 비즈니스 로직 수행 결과로 얻은 데이터를 재사용할수 있도록 데이터 베이스에 저장한다.
하지만 자바의 객체와 데이터 베이스의 테이블이 정확하게 일치하지 않는다. 따라서 둘 사이를 매핑하기 위해 많은 SQL 구문과 자바 코드가 필요할 수 밖에 없다 .
ORM(Object-Relation Mapping)은 이렇게 정확하게 일치하지 않는 자바객체와 테이블사이틀 매핑해준다 다시말하면 ORM 은 자바객체에 저장된 데이터를 테이블의 ROW 정보로 저장하고 , 반대로 테이블에 저장된 Row 정보를 자바객체로 매핑해준다 .
이 과정에서 사용되는 SQL 구문과 자바코드를 ORM 프레임워크가 자동으로 만들어준다 .
우리는 지금까지 스프링 JDBC나 Mybatis를 이용하여 자바객체와 테이블을 매핑해 왔다 . 하지만 어떤 DB 연동 기술이나 프레임 워크를 사용하더라도 SQL 명령어를 자바 클래스나 외부의 XML 파일에 작성해야 했다 . 그리고 이렇게 작성된 SQL은 유지보수 과정에서 지속적으로 수정되며 새로운 SQL이 추가되기도 한다.
ORM 프레임워크의 가장 큰 특징이자 장점은 DB연동에 필요한 SQL을 자동으로 생성한다는 것이다. 또한 이렇게 생성되는 SQL은 DBMS가 변경될때 자동으로 변경된다. 다만 ORM 환경설정파일 어딘가에 DBMS가 변경되었다는 것만 수정해주면 된다.
그 ORM 프레임 워크의 표준화된것이 JPA라고 한다
JPA의 특징
JPA는 모든 ORM 구현체(ORM 프레임워크)들의 공통 인터페이스를 제공한다.
JPA를 JDBC API 와 비교하여 이해하면 편하다

JDBC는 특정 DBMS에 종속되지 않는 DB 연동을 구현을 지원한다. DB연동 로직을 구현할때, JDBC API(java.sql)의 인터페이스들을 이용하면 실질적인 DB연동 처리는 해당 DBMS 드라이버 클래스들이 담당하는 구조이다. 따라서 DBMS가 변경되는 상황에서도 드라이버만 변경하면 JDBCAPI를 이용하는 어플리케이션은 수정하지 않는다 . 결국 개발 당시에는 MySQL을 사용하다가 실제 서비스가 오픈될때 Oracle로 변경할수도있다.
JPA도 JDBC와 마찬가지이다 . 애플리케이션을 구현할때 , JPA API(javax.persistence)를 이용하면 개발당시에는 Hiberinamte 를 프레임 워크를 사용하다가 실제 서비스에는 TOPLink로 변경할 수 있다.
