객체 와 관계형 데이터베이스를 따로 설계
( 객체 <-> 객체 ) ( 관계형 DB <-> 관계형 DB )
이 때, ORM 프레임워크 가 중간에서 매핑 한다
우리가 일반적으로 알고 있는
애플리케이션 class 와 RDB 의 테이블을 연결한다는 뜻이며,
기술적으로 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면 된다.
SQL 문이 아닌 Method 를 통해 DB를 조작할 수 있어
객체 모델을 이용하여 비지니스 로직을 구성하는 데만 집중할 수 있다.
내부적으로는 SQL문 쿼리를 생성하여 DB를 조작하긴 하나,
개발자가 따로 신경쓸 필요가 없다 . ORM 이 알아서 하기 때문에.
쿼리와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어
각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임
따라서 객체 지향적인 코드 작성이 가능하며,
객체지향적 접근만 고려하면 되기에 생산성이 증가한다.
매핑하는 정보가 Class로 명시 되었기 때문에
ERD를 보는 의존도를 낮출 수 있고, 유지보수 및 리팩토링에 유리하다
예를 들어 MYSQL DB 사용하는 중에, PostgreSQL로 DB를 변환해야 한다면
새로 쿼리를 생성해야하나, ORM 을 사용한다면 딱히 쿼리를 수정할 필요는 없다
학습비용이 비효율적이다.
프로젝트 규모가 크고 복잡해, 설계가 잘못된 경우
속도 저하 + 일관성을 무너뜨리는 문제점이 생길 수 있다.
복잡하고 비지니스 로직에 종속적인 쿼리는 속도를 위해 별도의 튜닝이 필요하다.
따라서 결국 SQL문을 써야할 수도 있다.
자바 어플리케이션에서 관계형 DB 를 사용하는 방식을 정의한 DB
자바에서 ORM 기술의 표준 DB API 이다
JPA 가 제공하는 API를 사용하면, 객체를 DB에 저장하고 관리할 때,
개발자는 SQL문을 작성하지 않아도 된다.
JPA가 개발자 대신 적절한 SQL을 생성해 ( 어떤 DB환경이든 )
객체를 자동으로 Mapping 까지 해준다.
JPA 는 특정 DB 에 종속되지 않는다
JPA 에 적용되는 다양한 DB 마다 각각 다른 SQL 문법과 메소드 는 조금씩 다르다.
( = DB 개발 환경마다 다르다 )
데이터베이스 방언은 SQL 표준을 지키지 않는 특정 DB만의 고유한 기능인데,
이를 oracle 이라고 한다
DB 방언 oracle 을 통해 DB 환경 및 언어 가 달라도 JPA 에서 작성한
SQL문 + 메소드를 실행시킬 수 있다.