본문 바로가기
ORM/Spring Data JPA

JPA 란

by 코딩하는 랄로 2024. 1. 5.
728x90

JPA란 Java Persistence API의 약자로써, 자바 진영에서 ORM  기술의 표준으로 채택하고 있는 인터페이스의 모음이다. 본격적으로 JPA 가 무엇인지에 대해서 알아보기 전에 먼저 JPA의 이름안에 들어가 있는 Persistence 가 무엇인지에 대해 먼저 알아야 한다.

 

 

 

Persistence

Persistence는 영속성으로서, 데이터를 생성한 프로그램이 종료되더라도 '사라지지 않는' 데이터의 특성을 의미한다. 어떻게 프로그램의 메모리 상에 존재하는 데이터가 종료되도 사라지지 않을 수 있을까??

 

그 이유로는 메모리 상에 존재하는 데이터를 데이터베이스 등을 활용하여 데이터를 보관하고 관리할 수 있는 서버에 따로 저장하기 때문이다. 대표적으로 MySQL, MariaDB 등 여러 데이터 베이스 시스템이 있다.

 

자바에서는 데이터 베이스의 프로그램이 생성한 데이터를 저장하기 위한 아래와 같은 여러 방법이 있다.

  • JDBC, Spring JDBC
  • MyBatis와 같은 SQL Mapper

위의 방법으로 프로그램의 데이터를 데이터베이스의 저장함으로써 데이터베이스에 의해 관리되는 데이터를 영속화되었다고 한다. 하지만 위의 방법의 경우, 단점이 있는데 바로 자바 코드를 작성하는데 SQL 문까지 작성을 하고 신경을 써야 한다는 것이다.

 

이러한 단점을 보완하고자 나온 개념이 바로 ORM 이다.

 

 

 

ORM (Object-Relational Mapping )

ORM은 이름에서 알 수 있듯이 자바의 객체와 Relational, 즉 관계형 데이터베이스(Relational DB)를 Mapping 해주는 개념이다. 비영속성인 자바의 객체를 ORM을 통해 DB에 자동으로 매핑을 해주어 영속화시켜줌으로써, 자바의 객체만으로도 데이터 베이스의 데이터를 다룰 수 있게 되는 것이다.

 

이를 통해 ORM이 가지는 장점으로는 다음과 같다.

  • 개발자는 비즈니스 로직에만 신경을 쓰고 SQL은 신경을 쓰지 않아도 된다. (내부적으로 query를 생성하여 동작하지만 개발자가 신경쓰지 않아도 된다.)
  • SQL query 문 등 부수적인 코드가 줄어 코드의 가독성을 높인다.
  • 또한 객체지향적인 코드 작성이 용이해진다.
  • ERD 의존도를 낮출 수 있고 이를 통해 유지보수 및 리팩토링에 유리하다.

단점으로는 다음과 같다.

  • 프로젝트의 규모가 크고 복잡할 때 설계를 잘못하게 되면 성능의 저하로 이어진다.
  • 복잡하고 무거운 Query의 경우 속도를 위해 별도의 SQL문을 작성해야 할 수 있다.
  • 학습 난이도가 있다.

 

 

 

JPA

JPA는 글의 초반에서도 말했듯이, 자바 진영의 ORM 표준으로 채택된 API이다. 설명을 보태면, Persistence 영역, 즉 데이터 베이스에 접근하기 위한 API 구격을 정의한 것이다. 여기서 주의해야할 점은 ORM은 '개념'이라는 것이다. 자바 객체를 영속화하여 이를 다루는 것만으로도 데이터 베이스의 데이터를 다룰 수 있게 한다라는 개념이고 이를 정의한 것이 바로 JPA인 것이다.

 

JPA는 자바 진영의 ORM 표준이고, 이 외에도 파이썬 진영의 Diango 자체 ORM이나 C# .NET 진영의 EF, C++의 ODB, Node.js의 Sequelize 라이브러리 등 여러 ORM 기술들이 존재한다.

 

JPA를 들어보았다면, Hibernate 라는 단어를 들어보았을 것이다. JPA와 Hibernate는 어떤 연관이 있는걸까? JPA는 ORM 개념을 정의하고 구현한 interface이다. 이를 이용하여 실제로 구현한 것이 바로 Hibernate 인 것이다. Hibernate 이외에도 Eclipse Link 등이 거의 사용되지 않고 주로 Hibernate를 사용한다.

 

 

 

Why JPA?

JPA를 사용하는 이유는 개발자가 SQL에 신경쓰지 않아도 되기 때문이다. JPA가 반복적인 SQL을 처리해주고 Persistence Obejct를 이용하여 JPA가 어떤 SQL을 생성하고 실행하는지만 생각하면 되기 때문에 비즈니스 로직에만 더 집중할 수 있게 되는 것이다.

 

만약, SQL을 직접 짜야 하는 상황이 발생한다면 native SQL이란 기능을 통해서 직접 작성하여 사용하여 프로그램의 성능에 대한 이슈를 해결하는 것도 가능하다.

 

또한, 자바의 객체를 이용하여 데이터베이스를 다루기 때문에 프로그램이 보다 객체 중심으로 개발 될 수 있다는 장점을 가진다. 프로그램이 더 객체 중심적으로 개발될 수록 유지보수 및 확장성 및 생산성도 좋아지기 때문에 오늘날 SQL Mapper가 아닌 JPA를 사용하여 영속성 영역의 데이터를 다루는 것이다.

 

 

 

Spring Data JPA

마지막으로, JPA와 Spring Data JPA가 무엇이 다른지에 대해서도 알아보자. Spring Data JPA는 JPA를 구현한 Hibernate를 다시 한번 감싸서 개발자들이 더욱 더 편리하게 사용하기 위해 Spring 에서 만든 프레임워크이다.

 

Hibernate 중에서도 자주 사용되는 기능들을 묶어 놓았기 때문에 거의 대부분의 작업은 Spring Data JPA를 이용하여 Hibernate의 EntityManager 등 복잡한 개념에 접근하지 않고도 보다 쉽게 데이터를 다룰 수 있게 되는 것이다.

 

또한 Spring Data JPA는 동적으로 인터페이스를 구현하는 클래스를 이용해서 실제 클래스를 작성하지 않아도 자동으로 만들어지기 때문에 별도의 코드 또한 작성할 필요가 없다는 장점이 존재하기 때문에 자바 진영에서 JPA를 사용한다고 하면 대부분 Spring Data JPA를 일컫는 다고 생각해도 될 정도로 많이 사용하는 프레임워크이다.

728x90

'ORM > Spring Data JPA' 카테고리의 다른 글

기본 CRUD - Create & Update  (0) 2024.01.16
기본 CRUD - DELETE  (1) 2024.01.16
기본 CRUD - READ  (0) 2024.01.16
JPA Repository - 개념  (0) 2024.01.15
Entity 개념 & 기본 사용법  (1) 2024.01.11