JPA 를 공부하기 이전에..

YEON·2022년 4월 10일
0

JPA

목록 보기
1/5

JPA 를 공부하면서, 공부하기 이전에 알아야 할 개념들


ORM

ORM (Object-Relational Mapping) 이란?
객체와 관계형 데이터베이스의 테이블을 매핑(연결)한다는 것을 의미한다.
ORM을 이용하면 SQL 쿼리가 아닌 코드를 통해 데이터를 조작할 수 있다.

만약 ORM을 사용한다면 Member 테이블과 매핑된 객체를 member 이라고 할 때,
SELECT * FROM Memver 대신 member.findAll() 의 메소드 호출로 데이터 조회가 가능하다.

장점

  • 객체지향적인 코드로 인해 더 직관적이고 로직에 집중할 수 있도록 해준다.
  • 객체의 재사용 및 유지보수의 편리성이 증가한다.
  • 맵핑 정보가 명확하여 ERD를 보는 것에 대한 의존도를 낮출 수 있다
  • DBMS에 대한 종속성이 줄어든다.

단점

  • 완벽한 ORM으로만 서비스를 구현하기는 어렵다
  • 별도의 튜닝이 필요한 경우가 존재한다
  • 이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔야하기 때문에 리스크가 발생할 수 있다.

JPA

JPA는 자바의 ORM 기술 표준으로 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
(=ORM 프레임워크)


하이버네이트

Hibernate 는 JPA (표준 명세) 구현체이다.
구현체이기 때문에 JPA를 사용하기 위해서 하이버네이트를 필수로 사용할 필요는 없다.
(=ORM 프레임워크)


Spring data JPA

Spring data JPA 는 JPA를 쓰기 편하게 사용할 수 있는 Spring 모듈이고 구현체가 아니다.
Spring data JPA는 JPA를 더 추상화시킨 Repository 라는 인터페이스를 제공한다.

JPA를 사용하여 데이터에 접근할때 공통적으로 사용되는 CRUD 코드를 처리하기 위하여 공통 인터페이스(JpaRepository)를 제공 하고자 한다. 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성하여 주입해주기 때문에 리포지토리를 개발할 때 코드 작성 없이 인터페이스만 작성해도 된다.

  • 이때 JpaRepository 인터페이스는 공통적인 CRUD 메소드도 제공하지만, findByUsername() 같이 직접 작성한 메서드는 스프링 데이터 JPA가 쿼리 메소드 기능을 사용하여 해당 메소드 이름으로 적절한 JPQL쿼리를 생성하여 실행한다. (@Query 어노테이션을 통해 직접 쿼리를 정의해줄 수 도 있다.)
  • 또한 JpaRepository 인터페이스는 추가로 JPA에 특화된 기능들을 제공해주는데, save(), delete(), findOne(), findAll() 과 같이 EntityManager 를 호출해주는 메소드들을 JpaRepository 를 상속받음으로써 사용할 수 있다.

Spring data JPA를 사용하는 방법은 다음과 같이 인터페이스를 상속 받으면 된다.
이렇게 사용함으로서 실제 개발할때 직접 모든 코드에 EntityManager 를 사용하며 개발하지 않을 수 있다.
(이때, 스프링 데이터 JPA가 제공하는 공통 인터페이스는 org.springframework.data.jpa.repository.support.SimpleJpaRepository 클래스가 구현한다)

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<Line, Long> {
}


JPA 를 사용하는, 사용하게 된 이유

프로젝트를 하다보니 프로젝트(서비스)가 커질 수록 SQL 쿼리 자체도 복잡해지고 수정도 복잡해졌다.

SQL로 각각의 테이블을 조회해서 처리하다가 조인으로 한 번에 조회하도록 변경하려고 하니 SQL 전체를 수정하거나 이와 관련된 많은애플리케이션 수정해야하는 사태가 발생하게 되었다.

때문에, SQL을 직접 사용하다보니 유연한 최적화가 어려워 JPA 를 사용하게 되었다.





[참고]
https://sas-study.tistory.com/364
https://livenow14.tistory.com/70
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa
자바 ORM 표준 JPA 프로그래밍

profile
- 👩🏻‍💻

0개의 댓글