^^; 예전에

글을 열심히 썼었는데...

ㅠㅠ 다날라갔다 다시 정리하는겸

써야지~

jpa공부해보니 꼭 실제 업무할때 써보고싶었다

그래야 더 잘 느낄 수 있을거 같다.

 

 


1. JPA 란 ? ( 그외 개념들)

JPA (Java Persistence API) : 자바 어플리케이션에서 관계형 데이터 베이스를 사용하는 방식을 정의한 인터페이스

 

JPA가 인터페이스면 이를 구현한 것도 있지 않을까?

그게바로 Hibernate이다.

 

Hibernate : JPA라는 명세의 구현체이다.

 

쉽게 설명하자면, JPA와 Hibernate는 자바의 interface와 interface를 구현한 class와 같은 관계이다.

즉, 반드시 Hibernate를 쓸 필요는 없다. 그런데 대부분 사용하고 있긴하다.

 

 

Spring Data JPA : JPA를 더 쉽고 편하게 사용할 수 있도록 도와주는 모듈이다. 

JPA를 한단계 추상화시킨 Repository라는 인터페이스를 제공한다.

 

대부분 개발할때 Repository를 이용한다,,

 

 

2. JPA를 왜 쓸까?

jpa는 DB와 객체사이를 mapping해주는 중간자 역할을 해준다.

그래서 기존에 jdbc를 쓸때 쿼리를 이용해서 data에 접근하였었는데 

쿼리를 이용하지 않고, 개발할 때 객체지향적인 관점에서만 접근하게 해준다. 그래서 더 효용이 좋다.

 

 

그런데 여기서  쿼리만 써본 사람들은 의문이 들 것이다.

현재 운영되고 있는 복잡한 쿼리들을 어떻게 JPA로 대체할 수 있을까?

나도 이거에 대한 의문점이 있었는데

 

우선, 간단한 조인 같은건 Querydsl로 적용이 가능하다.

 

그리고 애초에 DB설계자체를 객체지향적으로 하면 

애초에 그렇게 복잡한 쿼리가 나오지 않을 거란 설명이 설득력 있었다.

 

아래 참고 블로그에서 특히 JPA를 왜 쓰는지에 대해서 자세히 나와 있었는데

그중 와닿는 말은 다음과 같다.

 

 

JPA로 실무를 하다 보면, 테이블 중심에서 객체 중심으로 개발 패러다임이 변화된다.

테스트, 통합 테스트시에 CRUD를 믿고 간다.(내가 짠 쿼리는 그것 마저 테스트를 거쳐 가야 한다.)
- 이런거 테스트 할 시간에 CRUD 믿고, 핵심 비즈니스 테스트 코드를 열심히 짜자.


빠르게 에러를 발견할 수 있다.
- 컴파일 시점에 대부분 오류를 발견할 수 있다
-최소한 뭐리 문법 실수나 오류는 거의 발생하지 않는다.



 

https://ict-nroo.tistory.com/117

 

다음 블로그에 자세히 나와있으니 읽어보는 것을 추천한다.

 

 

그리고 실제로도 나도 간단한 개발을 해보았는데 혼자서..

쿼리를 짤때 자잘한 문법오류나 매핑해주는 데에서 오타가 나서 

오류가 나거나 하는 사소한 실수를 전혀 신경쓰지 않아도 되어서 좋았다.

 

 

 


https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레�

suhwan.dev

https://ict-nroo.tistory.com/117

JPA(Java Persistent API)


 JPA는 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean을 JPA라고 바꾸고 JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술이다. JPA는 ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA이다.

  ORM(Object Relational Mapping)이란 RDB 테이블을 객체지향적으로 사용하기 위한 기술이다. RDB 테이블은 객체지향적 특징(상속, 다형성, 레퍼런스, 오브젝트 등)이 없고 자바와 같은 언어로 접근하기 쉽지 않다. 때문에 ORM을 사용해 오브젝트와 RDB 사이에 존재하는 개념과 접근을 객체지향적으로 다루기 위한 기술이다.


따로 쿼리 없이 vo와 db를 연결해준다.








CRUDRepository를 extends 하는것만으로도

기본적인 CRUD는 모두 제공한다.


따라서 추가적으로 구현할 것은 없다.

다만 SQL이 필요 할때만 @Query로 annotation을 추가하여

쿼리를 추가해주면 된다.


Query를 추가하는 방식은 두가지가 있는데

1. db query

2.vo  클래스에 관해서 쿼리를 날리는 방법



+ Recent posts