JPA란?
JPA가 포함하는 내용은 다양하다. 개발자에게 JPA가 무엇이냐고 묻는다면 다음과 같은 다양한 키워드들을 대답할 수 있다.
JPA(JAVA Persistence API), Transaction, Spring DATA JPA, Lock, Entity, Repository,
ORM(Object Relational Mapping), JDBC, RDB 등등
여기서는 JPA(Java Persistence API), Spring DATA JPA, Hibernate, ORM을 다루도록 하겠다.
ORM이란?
우리가 프로그래밍한 객체와 데이터베이스 사이의 관계를 연결해주는 것을 ORM(Object Relational Mapping)이라고 한다.
컴퓨터는 똑똑하지만, 사람이 말할때 말하지 않아도 '눈치'를 통해서 행동하는 것 만큼 똑똑하진 않다.
때문에 데이터베이스의 테이블에 있는 정보들을 JAVA로 구현한 객체의 정보와 맵핑할 때, 이를 자동으로 이루어지는 것이 아닌 ORM을 통해서 이루어지게 된다. ORM이 없다면 SELECT로 얻어낸 값들을 일일이 맵핑해야할 것이다.
JPA란(Java Persistence API)?
데이터에 접근하기 위한 API의 규격을 정의한 것이다.
JPA는 JAVA의 ORM 표준으로 채택되어있다.
ORM이 전체적인 개념이라면, JPA는 보다 구체적으로 기능을 정의한 스펙이라고 볼 수 있다.
추가로 2019년에 명칭이 바뀌어, Jakarta Persistence API라고 부른다.
기존에 사용된 Java Persistence API라고 불러도 무방하다.
Hibernate란?
위 그림의 중간을 보면 ORM의 Implementation의 예시로 Hibernate가 있다.
JPA에 대한 실제 구현체, 즉, Implementation이다.
Hibernate외에 유명한 JPA Provider로 Eclipse Link도 있지만, 현재 Java에서 사용하는 JPA Provider의 기본은 Hibernate이다.
Spring Data JPA란?
Spring에서 Hibernate를 보다 간편하게 사용할 수 있도록 추상객체를 한 번 더 감싸서 만든 것이다.
그래서 EntityManager에 접근하지 않고도 보다 쉽게 객체에 접근하여 데이터베이스의 데이터를 활용할 수 있다.
정리
JDBC(Java Database Connecticity)는 DB에 접근할 수 있도록 JAVA에서 제공하는 API이다.
여기서 ORM은 어플리케이션 내부의 객체가 DB의 테이블에 쉽게 맵핑될 수 있도록 연결해준다.
그리고 JAVA에서는 ORM의 표준 스펙으로 JPA를 인터페이스로 정의하여 제공한다.
해당 JPA의 실제 구현페이스를 모아둔 것이 Hibernate인데, 그 중 자주 사용되는 것들을 보다 쉽게 사용하기 위해서 Spring Framework에 다시 한 번 더 묶음으로 제공하는 것이 Spring Data JPA이다.
'👩🏻💻 Programming > SpringBoot' 카테고리의 다른 글
Entity의 기본 속성(annotation) (0) | 2021.09.05 |
---|---|
Pageable과 Page Request (0) | 2021.09.05 |
RestTemplate과 WebClient (0) | 2021.08.22 |
SpringBoot와 Swagger (0) | 2021.08.22 |
스프링과 JUnit (0) | 2021.08.19 |