ORM
: Object Relational Mapping
-> 객체와 entity간의 매핑
- 객체와 RDBMS Entity의 매핑을 도와주는 기술.
자바 기반 ORM을 구현해놓은 대표적인 프레임워크가 하이버네이트(Hibernate)이다.
Hibernate
- hibernate는 처음엔 쉽지만 좀더들어가면 학습곡선이 높다.
- EJB Entity bean (너무 무거워서 잘안씀)에서 출발해서 하이버네이트로 발전한 것이다.
- Hibernate가 테이블들을 조인을 많이 하기위해서는 그에 해당하는 자바 객체들을 모두 매핑하기 위해 has-a관계로 다 설정 즉, 클래스간의 설계를 잘해야 하는데 그걸 잘하기가 어렵고, 복잡하다보니 많은 사람들이 Hibernate를 공부하기가 어려웠고, 잘 안쓰게 됐음.
- 그러다가
Monolithic
->Micro하게 여러개
방식으로 유행이 바뀌게되고, Micro하게 서비스를 만들다 보니 전보다 매핑이 복잡하지 않아도 되다보니 Hibernate가 다시 각광받고 있다. (package를 나눠서 설계하는 방식)
- 원래는 한 서비스에서 테이블을 5개씩 join을 해야했다면, 조각내서(micro) 하면 테이블에 2~3개 정도 join을 하면 됨
- 이후로 MSA시장(클라우드시장)이 활성화 되다 보니까 join이 어렵지 않게돼서 hibernate를 사용하려 했는데,
여기서 문제는 spring에서 hibernate를 쓰기 어려웠다 -> hibernate를 좀 더 편하게 쓰기위한 기술이 나옴(발전)
-> Spring용 JPA- JPA를 뜯어보면 hibernate를 쓰고 있는 것을 알 수 있다.
- JPA 새로운 기술은 아니고 EJB(2000년대 초반)에서 부터 약간씩 방법이 바뀌면서 흘러들어온 애임.
-> 모든 기술들이 다 반짝 갑자기 생긴것들은 아니고, 다 세월이 흐르면서 조금씩 형태를 바꿔 생겼다는 것을 알았으면 좋겠다. 배워서 쓸모없는 기술은 없다.
JPA(JavaPersistenceAPI)
: 자바 ORM기술에 대한 표준명세, API이다!
- Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
: Hibernate(프레임워크)는 JPA의 구현체이다.- 스프링에서 흔히 사용하는 것으로 알고있는 JPA는, JPA를 이용하는 spring-data-jpa 프레임워크이지 JPA는 아니다.
- JPA를 공부하기 전에 Hibernate의 LifeCycle을 알아야함.
Spring-Data-JPA
: spring framework에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트
- CRUD 처리를 위한 공통 인터페이스 제공
- repository 개발 시 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입
- 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있도록 지원
- 공통 메소드는 스프링 데이터 JPA가 제공하는
org.springframework.date.jpa.repository.JpaRepository
인터페이스에
count, delete, deleteAll, deleteAll, deleteById, existsById, findById, save ..
- mybatis는 entity(DB테이블의 한 행)와 자바객체를 매핑해주기 위해서 sql구문을 사용한다.
-> ORM은 sql사용없이 자바객체와 entity를 매핑해줘야함
-> mybatis는 ORM이 아니야!
출처
- Spring-Data-JPA : https://data-make.tistory.com/621