여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] JPA가 무엇이고, 왜 써야 하는가!?

여니's 2022. 3. 21. 12:29

JPA는 자바 표준 ORM입니다.

 

ORM ( Object Relational Mapping)

:  객체-관계 매핑의 줄임말입니다.

객체라는 개념을 구현한 클래스와

테이블을 자동으로 매핑(연결)하는 것을 의미합니다.


1. 단순 반복 작업

: 수십, 수백개의 테이블의 SQL을 만들고 유지보수 해야하는

단순 반복 작업을 하게 되는 걸

ORM이 해결해줍니다. 

 

 


2. 패러다임 불일치 문제

그러나 클래스와 테이블이 애초에 

호환가능성을 염두해두고 만들어진 것이 아니기 때문에

불일치가 발생하게 됩니다.

 

이를 ORM을 통해 해결할 수 있습니다. 

객체 간의 관계를 바탕으로 SQL 문을 자동으로 생성하기 때문입니다.

 

ORM을 사용하면

직접 따로 SQL문을 짤 필요 없이

클래스의 메서드를 통해,

객체를 통해서 간접적으로 DB를 조작하게 됩니다.

 

 

ORM 프레임워크의 종류는

JPA/Hibernate, Sequelize, Django ORM 등이 있습니다. 

 


JPA란?

JPA는 인터페이스로서 자바 표준 명세서입니다.

인터페이스인 JPA를 사용하기 위해서는 구현체가 필요한데,

대표적으로 Hibernate, Eclipse, Link 등이 있습니다.

Spring에서는 Spring Data JPA라는 모습들을 이용하여 JPA 기술을 다룹니다.

 

이들의 관계는

JPA <- Hibernate <- Spring Data JPA

 

Hibernate를 직접 쓰는 것보단

Spring Data JPA를 쓰는 것을 권장하고 있다고 합니다.

 

구현체들을 좀 더 쉽게 사용하기 위해 추상화시킨

Spring Data JPA라는 모듈이 등장한 이유는

 

 

1. 구현체 교체의 용이성

Hibernate외에 다른 구현체로 쉽게 교체하기 위함입니다.

 

 

2. 저장소 교체의 용이성

관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함입니다. 

 


JPA 적용하는 방법

 

1. 의존성 등록


implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2'

 

(1) spring-boot-starter-data-jpa

: 스프링 부트용 spring data jpa 추상화 라이브러리입니다.

스프링 부트 버전에 맞춰 자동으로 jpa 관련 라이브러리들의 버전을 관리해줍니다.

 

(2) h2

: 인메모리 관계형 데이터베이스입니다.

별도의 설치없이 프로젝트 의존성만으로 관리가 가능합니다.

애플리케이션 재시작 할 때마다 초기화되는 점을 고려하여 

주로 테스트 용도로 사용됩니다.

 

@SpringBootTest를 사용하면, H2 데이터베이스를 자동으로 실행해줍니다.

 


참고서적 및 링크

: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

https://eun-jeong.tistory.com/31

 

[DB] ORM (Object Relational Mapping) 사용 이유, 장단점

ORM (Object Relational Mapping) 객체지향적 구조? 모든 데이터는 객체이며, 각 객체는 독립된 데이터와 독립된 함수를 지님 SQL 구조? 데이터는 테이블 단위로 관리되며 객체들을 조회하기 위한 명령어

eun-jeong.tistory.com

https://geonlee.tistory.com/207

 

ORM(Object Relational Mapping)이 뭘까? 🤔

ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(R..

geonlee.tistory.com