DB/JPA

JPA 개념

단짠단짠감자 2022. 2. 24. 00:39

학습목표

  • ORM란
  • JPA란
  • Hibernate
  • 동작과정
  • JPA를 사용해야하는 이유

 

 

ORM(Object-Relational-Mapping)란

이름 그대로 객체와 관계형 DB를 매핑한다는 뜻이다.

객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형데이터베이스대로 설계해서 ORM 프레임워크가 중간에서 매핑해준다.

 

JPA

자바 진영의 ORM 기술 표준이며, 인터페이스의 모음이다.

(JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate다.)

JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 된다. JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 매핑해준다.

 

Hibernate

자바 진영의 다양한 ORM프레임워크 중 가장 많이 사용되는 성숙한 프레임워크로 HIbernate기반으로 만들어진 ORM 기술표준이 바로 JPA다.

 

동작과정

JPA는 애플리케이션 JDBC사이에서 동작한다.

개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
개발자가 ORM 프레임워크에 저장하면 적절한 INSERT SQL을 생성해 데이터베이스에 저장해주고, 검색을 하면 적절한 SELECT SQL을 생성해 결과를 객체에 매핑하고 전달해 준다.

 

예를 들어 MemberDAO에서 객체를 저장하고싶다면

1. 개발자는 JPA에 Member객체를 넘겨주고

2. JPA는 Member 엔티티를 분석하고

3. INSERT SQL을 생성

4. JDBC API를 사용해서 SQL을 DB에 전달해준다.

 

JPA를 사용해야하는 이유

1. 생산성

JPA를 사용하면 자바 컬렉션에 저장하듯이 JPA에게 저장할 객체를 전달하면 된다.

지루하고 반복적인 코드를 직접 작성하지 않아도 되며, DDL문도 자동으로 생성해주기 때문에 데이터베이스 설계 중심을 객체 설계 중심으로 변경할 수 있다.

 

2. 유지보수

필드를 하나만 추가해도 관련된 SQL과 JDBC코드를 전부 수행해야했지만 JPA는 이를 대신 처리해주기 때문에 개발자가 유지보수해야하는 코드가 줄어든다.

 

3. 객체와 RDB간의 패러다임 불일치 해결

자바는 객체지향 언어지만, 관계형 데이터베이스는 객체지향이 다루는 개념이 존재하지 않고 서로 지향하는 목적이 다르기때문에 이로 인해 패러다임의 불일치가 발생한다.

객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다. 객체로 모델링을 하게 되면 이러한 많은 장점을 얻을 수 있다.

하지만, 객체를 저장하려고 할 때, 상속을 받았거나 다른 객체를 참조하고 있어 문제가 발생한다. 회원을 저장할 때 팀을 함께 저장하지 않았다면 팀이 사라져버릴 수 있다.

서로 다른 목적 때문에 개발자가 중간에서 문제를 해결하기 위해 코드를 작성해 매핑해야 한다.

 

JPA는 연관된 객체를 사용하는 시점에 SQL을 전달할 수 있고, 같은 트랜잭션 내에서 조회할 때 동일성도 보장하기 때문에 다양한 패러다임의 불일치를 해결한다.

 

4. 데이터 접근 추상화와 벤더 독립성

RDB는 같은 기능이라도 벤더마다 사용법이 다르기 때문에 처음 선택한 데이터베이스에 종속되고 변경이 어렵다. JPA는 애플리케이션과 데이터베이스 사이에서 추상화된 데이터 접근을 제공하기 때문에 종속이 되지 않도록한다.

만약 DB가 변경되더라도 JPA에게 알려주면 간단하게 변경이 가능하다.