Spring

ORM, 그리고 JPA ( Java Persistent API )

지금 느낌 그대로 2020. 12. 27. 00:33

ORM의 등장배경

 

ORM이 등장하기 이전의 웹개발은 서버에서 데이터베이스의 레코드들을 CRUD 하기 위해서 SQL Mapper를 활용한 SQL 중심의 환경이었다. 이런 환경에서 서버가 하는 일의 대부분은 sql의 수행결과를 필드에 매핑시키는 일이었고, Mapper 파일엔 CRUD를 위한 수많은 sql문으로 가득차 있었다. 그러다보니 자연스럽게 프로그램은 sql에 의존하게 되고, 자바의 장점인 객체지향적인 개발을 할 수 없게 되었다. 뿐만 아니라, 유지보수를 할 때도 복잡한 조건을 가진 긴 쿼리문을 가지고 씨름하는 일이 많았고 컬럼 하나만 변경해도 아주 많은 코드와 sql문이 수정되어야 했다. 

또한, RDBMS는 데이터를 효율적으로 저장하고 관리하기 위한 목적을 가진 반면,  자바와 같은 객체지향 프로그래밍 언어는 기능과 속성을 하나의 객체에서 관리하는 것을 목적으로 하고 있어 패러다임의 불일치가 발생한다.

 

다음 코드를 살펴보자

 

Student student = findStudent();
School school = student.getSchool();

 

위의 코드와 같이, 학생이 속한 학교에 대한 정보를 얻고자 할 때, OOP 프로그래밍언어에서는 학생 객체로부터 학생이 속한 학교를 얻는 방식처럼 프로그래밍하지만, 위의 정보를 DB로부터 얻어온다고 하면 아래의 코드처럼 변한다.

 

Student student = studentDao.findStudent();
School school = schoolDao.findSchool(student.getSchoolId);

 

학생이 속한 학교를 얻어오는 일을 하는데, 학생과 학교를 따로 조회하게 된다. 이렇게되면 학생과 학교의 관계를 코드상으로 알 수가 없다. 이런 방법으로는 상속이나 일대다 관계를 구현하기 힘드므로 점점 더 데이터베이스에 의존적인 형태로 개발을 하게 되었다. 

 

그래서, 어플리케이션과 데이터베이스 중간에서 패러다임을 일치시켜줄 기술을 필요로 하게되었다. 즉, 어플리케이션은 객체지향적인 프로그래밍을 하고, 이것을 중간에서 RDBMS에 맞게 SQL을 대신 생성하고 실행해주는 존재가 필요해졌다. 이렇게 하면, 더 이상 sql에 의존하지 않는 개발을 할 수 있고 유지보수도 편해지고 생산성도 향상된다.

이 중재자 역할을 해주는 기술을 ORM(Object Relational Mapping)이라고 부른다.  JPA는 자바진영의 ORM의 표준명세서이다. 쉽게말해, 자바에서의 ORM기술을 대표하는 애라는 이야기이다. 

 

SQL Mapper와 ORM의 차이

 

SQL Mapper

- SQL문을 이용하여 RDB에 접근,  데이터를 객체화 시켜준다.

- 개발자가 직접 작성한 SQL문으로 해당되는 ROW를 읽어온 후 그 결과를 객체화시켜 매핑하는 방식을 사용하므로

   RDB마다 SQL문이 다르기 때문에 RDB에 종속적이다.

 

ORM

- 객체를 통해 간접적으로 RDB에 접근한다. 

- 객체와 RDB를 자동으로 매핑해준다.

- SQL을 직접 입력하지 않고 엔티티라고 불리는 객체를 통해서 관리하므로 생산성이 높다.

 

 

Spring Data JPA

 

JPA는 인터페이스로서 자바 표준명세서이다. 인터페이스이므로 이를 구현한 구현체를 필요로 한다. 

대표적으로 Hibernate가 존재한다. 그러나 스프링에서는 Hibernate를 한단계 더 추상화 시킨 Spring Data JPA를 사용한다. 그 이유는 Hibernate와 관계형 데이터베이스에 종속되지 않고 구현체나 저장소를 쉽게 교체하기 위해서이다.

 

 

 

References

bk-investing.tistory.com/35

 

JPA란? ORM vs SQL Mapper

JPA란? ORM vs Sql Mapper 차이점 JPA ( Java Persistent API )와 ORM ( Object Relational Mapping ) JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미합니다. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔..

bk-investing.tistory.com

dreaming-soohyun.tistory.com/entry/JPA%EC%99%80-MyBatis%EC%9D%98-%EC%B0%A8%EC%9D%B4-ORM%EA%B3%BC-SQL-Mapper

 

JPA와 MyBatis의 차이 (ORM과 SQL Mapper)

JPA (Java Persistence API) - 자바 ORM의 기술 표준, 대표적인 오픈 소스가 Hibernate이다. ORM(Object-relational mapping) - 객체 관계 매핑, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할..

dreaming-soohyun.tistory.com

참고 도서