Spring : ORM의 꽃 JPA

cad·2021년 12월 12일
0

Spring

목록 보기
5/15

MyBatis의 문제점

  • 이전에는 SQL매퍼를 이용해서 데이터베이스의 쿼리를 작성했었다.

  • 그러다 보니 실제로 개발하는 시간보다 SQL 다루는 시간이 더 많아지는 문제점이 발생했다.

  • 테이블 모델링에 집중하고 객체를 단순히 테이블에 맞추어 데이터 전달 역할만하는 개발은 분명 기형적인 형태이다.

JPA

  • 자바 표준 ORM(Object Relational Mapping)
  • 아직 SI 에서는 MyBatis를 많이 사용한다
  • 대기업 및 자사 서비스를 개발하는 곳에서는 SpringBoot & JPA를 전사 표준으로 사용하고 있다.

Why JPA??

  • 자바 클래스 이외에 DB에 접근하기 위해서 무조건 SQL을 통해야하는 상황
  • 프로젝트 대부분이 어플리케이션 코드보다 SQL 가득하게 되는 것이다.
  • 단순 반복 작업으로 스트레스는 받게 된다.
  • 뿐만 아니라 JPA를 통해 패러다임 불일치 문제도 있다.

데이터베이스 -> 어떻게 데이터를 저장할지 초점이 맞춰진 기술

객체지향 프로그래밍 -> 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술

  • 데이터베이스로 객체지향을 표현하기는 쉽지 않다.

  • 패러 다임의 불일치
    관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임(paradigm)이 서로 다른데, 객체를 데이터베이스에 저장하려고 하니 문제가 발생한다. 이를 패러다임의 불일치라고 한다.

객체지향

User user = findUser();
Group group = user.getGroup();

데이터베이스가 추가된 객체지향

User user = userDao.findUser();
Group group = groupDao.findGroup(user.getGroupId());
  • 데이터베이스가 추가되면 부모-자식 관계인 User, Group이 따로 조회하게 된다.
  • 상속, 1:N 등 다양한 객체 모델링을 DB로 구현할 수 없다.

해결사 JPA

  • JPA는 이와 같은 문제를 해결하기 위해 등장했다.
  • 이 둘 사이에서 패러다임 일치를 시켜주기 위한 기술이다.
  • 개발자는 객체 지향적으로 프로그래밍을하고 JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행한다.
    -더는 SQL에 종속적인 개발을 하지 않아도 된다.

그 결과...

  • 생산성 향상은 물론이요
  • 유지 보수가 정말 편하다더라
  • 365일 24시간, 대규모 트래픽과 데이터를 가진 서비스에서 JPA는 점점 표준 기술로 자리 잡고 있다
JPA 최고다!!

Spring Data JPA

  • JPA는 인터페이스로서 자바 표준 명세서이다.
  • 인터페이스인 JPA를 사용하기 위해서 구현체가 필요하다
    대표적으로 3가지
    1. Hibernate
    2. Eclipse
    3. Link
  • 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈로 JPA를 다룬다.
이들 간의 관계

JPA <- Hibernate <- Spring Data JPA

  • Hibernate와 Spring Data JPA 사용에 큰 차이는 없지만 Spring Data JPA 등장 이유는 있다.
  1. 구현체 교체 용이성
  2. 저장소 교체 용이성
  1. 구현체 교체 용이성

    • Hibernate 외 다른 구현체로 쉽게 교체하기 위함
    • 언제가 새로운 JPA 구현체가 대세로 떠오를 때 Spring Data JPA를 쓴다면 쉽게 교체 가능
    • 예를 들어 Spring Data Redis에서
      - Jedis -> Lettuce로 대세가 넘어갈 때 아주 쉽게 교체했다
  2. 저장소 교체 용이성

    • 관계형 DB외 다른 저장소로 쉽게 교체하기 위함
    • 관계형 DB에서 No SQL로 넘어가야한다면 Spring Data MongoDB로 의존성만 교체하면 된다.
    • Spring Data 의 하위 프로젝트 들은 기본적은 CRUD의 인터페이스가 같기 때문이다.

즉 Spring Data JPA, Spring Data Redis, Spring Data MongoDB 등등 Spring Data의 하위 프로젝트 들은 save(), findAll(), findOne() 등 인터페이스를 가지고 있다. 그러니 저장소가 바뀐들 기본적인 기능은 변경할 것이 없다.

  • 이러한 장점으로 Spring 팀에서도 Spring Data 프로젝트를 권장하고 있다.

실무에서 JPA

  • 실무에서 JPA를 사용하지 못하는 가장 큰 이유는 높은 러닝 커브
  • JPA를 잘 쓰려면 OOP, RDB를 잘 알아야 한다.
  • 속도 이슈도 JPA에서 성능 이슈 해결책이 있으므로 네이티브 쿼리만큼 퍼포먼스를 낼 수 있다.

다음 포스트에 실습 코드를 작성해보겠습니다.

깃허브 실습 코드

profile
Dare mighty things!

0개의 댓글