JPA 정리

그저늅늅·2022년 5월 12일
0

JPA

목록 보기
5/6
post-thumbnail

스프링 부트와 AWS로 혼자 구현하는 웹서비스 책을 읽으며 정리한 글입니다.

"객체지향 프로그래밍"을 배웠는데 왜 객체지향 프로그래밍을 못하지?
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

웹 서비스를 운영하다보면 DB를 다루는 것을 피할 수 없다고 합니다.
MyBatis같은 SQL Mapper를 이용한 쿼리 작성에는 다음과 같은 문제가 있었다고 합니다.

  1. 실제로 개발하는 시간보다 SQL을 다루는 시간이 더 많다.
  2. 객체 모델링 보다는 테이블 모델링에 집중하게 되어, 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 하는 개발을 하게된다.

ORM은 위와같은 문제를 해결하기에 좋은 기술이였고, JAVA에서는 JPA라는 자바 표준 ORM이 등장했다고 합니다.

JPA 소개

필요성

  1. 단순 반복 작업의 문제
    관계형 데이터베이스가 SQL만을 인식하기 때문에 각 테이블마다 기본적인 CRUD SQL을 매번 생성해야 하기 때문에, 애플리케이션 코드 보다 SQL로 가득차게 되었다고 합니다.
  2. 패러다임의 불일치 문제
    관계형 데이터베이스 : 어떻게 데이터를 저장할지
    객체지향 프로그래밍 : 메시지를 기반으로 기능과 속성을 한 곳에서 관리
    시작점이 다른 두 사상을 함께 사용하려다 보니 문제가 발생합니다.
// 객체지향의 경우
User user = findUser();
Group group = user.getGroup();
// 관계형 데이터베이스가 추가될 경우
// User, Group을 따로 조회하게 되고, 두 객체의 관계를 알기 힘들어진다.
User user = userDao.findUser();
Group group = GroupDao.findGroup(user.getGroupId());

따라서 개발자는 객체지향적으로 프로그래밍을 하고, JPA는 대신 SQL을 생성해서 실행하여 SQL에 종속적인 개발을 하지 않도록합니다.

Spring JPA

JPA는 인터페이스입니다.
따라서 사용하기 위해서는 구현체가 필요하며 대표적으로 'Hibernate, EclipseLink'등이 있지만 크게 2가지 이유로 Spring에서는 위 구현체들을 추상화시킨 Spring Data JPA라는 모듈을 이용합니다.

  1. 구현체 교체의 용이성
    'Hibernate'외의 다른 구현체가 대세로 떠오를때 쉽게 교체하기 위함입니다.
    Spring Data JPA는 내부에서 구현체 매핑을 지원해주기 때문입니다.
  2. 저장소 교체의 용이성
    관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함입니다.
    트래픽이 많아저 관계형 데이터베이스로는 감당이 되지 않아 NoSQL등으로 교체가 필요하게 될때, Spring Data JPA는 의존성만 교체하면 됩니다.
    CRUD의 인터페이스가 같기 때문에 가능합니다.
profile
양현석

0개의 댓글