Spring + Boot

Spring data JPA - ORM과 JPA

devRachel 2021. 4. 6. 23:25

ORM이란? Object Relational Mapping "객체지향 패러다임을 관계형 데이터베이스에 보존하는 기술"

패러다임 입장에서 보면 객체지향 패러다임을 관계형 패러다임으로 매핑해주는 개념입니다.

ORM은 객체지향의 구조가 관계형 데이터베이스와 유사하다는 점에서 시작하는데 클래스를 사용하는 언어는 데이터의 구조를 잡기 위하여 우선적으로 클래스를 설계하죠? 관계형 데이터 베이스에서는 테이블을 설계합니다. 새로운 테이블을 만들 때 컬럼을 정의하고 컬럼에 맞는 데이터 타입을 설정해서 데이터를 보관하는 틀을 만든다는 개념에서 클래스와 유사한 성격을 가지고 있습니다.

인스턴스와 Row(레코드/튜플)도 유사합니다. 클래스에서 인스턴스를 생성해서 인스턴스라는 공간에 데이터를 보관하죠? 테이블에서는 하나의 Row에 데이터를 저장하게 됩니다. 여기서 차이점은 객체가 데이터+메서드 라는 의미라면 Row는 데이터만을 의미한다는 점이 다를 뿐입니다. 

관계와 참조의 의미도 유사합니다. 관계형 데이터베이스는 테이블 사이의 관계를 통해서 구조적인 데이터를 표현하고, 객체지향에서는 참조를 통해서 어떤 객체가 다른 객체들과 어떤 관계를 맺고 있는지를 표현합니다. (하지만 구현에서는 조금의 차이가 있다는 점!)

이런 특징에 기초하여 객체지향을 자동으로 관계형 데이터베이스에 맞게 처리하는 기법이 ORM의 시작이었습니다.  완전히 새로운 패러다임을 말하는 것이 아니라, 객체지향과 관계형 사이의 변환 기법을 의미하는 것입니다. 그렇기 때문에 특정 언어에 국한되어 있는 개념이 아니며 관계형 패러다임을 가지고 있다면 데이터 베이스의 종류를 구분하지 않습니다. 

 

JPA란? Java Persistence API  ORM을 Java 언어에 맞게 사용하는 스펙

ORM이 상위 개념이 되고, JPA는 Java에 국한된 개념입니다. JPA는 해당 스펙을 구현하는 구현체마다 프레임워크의 이름이 달라지는데 가장 유명한 것은 Hibernate입니다. 

Hibernate는 오픈소스로 ORM을 지원하는 프레임워크인데 단독으로 프로젝트에 적용 가능한 독립된 프레임워크입니다. 그렇기 때문에 스프링 부트가 아닌 스프링 프레임워크에서도 Hibernate를 연동해서 JPA 사용이 가능하다는 점!

Spring Data JPA ↔ Hibernate ↔ JDBC ↔DB