내일배움캠프 19일차 TIL : Spring - JPA

김원기·2024년 5월 17일

TIL

목록 보기
23/42
post-thumbnail

내일배움캠프 19일차 TIL : Spring - JPA

JPA

JPA란 자바 ORM 기술에 대한 API표준 명세를 의미한다.

JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM 플레임워크를 사용해야 한다.

ORM

ORM은 객체와 DB의 테이블이 매핑을 이루는 것

객체가 테이블이 될 수 있도록 매핑해주는 것을 망한다.

ORM을 사용하면 SQL쿼리가 아닌 직관적인 코드, 메서드로 데이터를 조작할 수 있다.

https://github.com/WonGi-Kim/spring_personal_project1

예를 들어 위의 깃허브 내의 코드에서 초기 커밋을 보면 jdbc로 데이터를 관리하는 Repository는 SQL 쿼리를 사용하여 데이터를 저장하며 관리했다.

후반 커밋을 보면 JPA형식으로 변경했을 때 Repository를 보면 인터페이스를 선언을 한 후 Service에서 findAll이나 findById 같은 메서드만으로 데이터를 호출하는 것을 볼 수 있다.

이렇게 사용하는 것이 ORM이다.

SQL quiry -> method 호출

형태로 데이터를 관리하는 방식이 바뀐것이다.

JDBC에 비해 코드의 복잡성도 낮아지며 간결해지고 유지보수가 쉽다는 점이 있다.

다만 여기서 사용한 프레임 워크는 Hibernate라는 것이고 조금 뒤에 다룰 내용은 Hibernate에 관한 내용이다.

Hibernate

JPA라는 명세의 구현체다.

avax.persistence.EntityManager와 같은 Jdbc Api기능을 구현한 라이브러리이다.

JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.

우리가 사용했다는 ORM 즉 Sql쿼리가 아닌 객체를 데이터로 다룰 수 있게 만든 프레임 워크가 Hibernate

다른 자료를 찾아보면서 EntityManager,EntityManagerFactory,EntityTranscation 같은걸 구현해서 JPA의 핵심을 구현하여 데이터베이스와 상호작용을 했다면

Hibernate는 각각을 미리 상속받고 구현한다.

여튼 다른 ORM 프레임워크도 있지만 대부분 Hibernate를 사용한다.

Hibernate 장점

  • Hibernate는 SQL를 직접 사용하지 않고, 메서드 호출만으로 쿼리가 수행된다.
  • SQL 반복 작업을 하지 않으므로 생산성이 매우 높아진다.
  • 테이블 컬럼이 하나 변경되었을 경우, PA를 사용하면 JPA가 이런 일들을 대신해주기 때문에 유지보수 측면에서 좋다.
  • 설정 파일에서 JPA에게 어떤 DB를 사용하고 있는지 알려주기만 하면 얼마든지 DB를 바꿀 수가 있다.
    (DB를 쉽게 바꿀 수 있다.)

Hibernate 단점

  • 메서드 호출로 쿼리를 실행한다는 것은 내부적으로 많은 동작이 있다는 것을 의미하므로, 직접 SQL을 호출하는 것보다 성능이 떨어질 수 있다.
  • 객체간의 매핑( Entity Mapping )이 잘못되거나 JPA를 잘못 사용하여 의도하지 않은 동작을 할 수 있다.
  • 복잡한 통계 분석 쿼리를 메서드 호출로 처리하는 것이 힘들 수 있다.

Spring-Data-JPA

위에서

다른 자료를 찾아보면서 EntityManager,EntityManagerFactory,EntityTranscation 같은걸 구현해서 JPA의 핵심을 구현하여 데이터베이스와 상호작용을 했다면

이라고 했는데

실제로 Repository를 정의하여 사용했다.

Repository가 바로 Spring Data JPA의 핵심이다.

Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로, JPA 위에 추가적인 기능을 제공하여 JPA 기반 애플리케이션 개발을 보다 간편하게 만드는 라이브러리/프레임워크다.

끝!

참고

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글