프로그래밍 지식/Java

JPA, Java Persistence API 란 무엇인가?

게임이 더 좋아 2022. 8. 3. 23:09
반응형
728x170

 

나는 일전의 게임 클라이언트 개발자였다.

하지만 일신의 이유로 백엔드를 공부하기 시작했다.

오늘은 JPA라는 키워드에 대해서 알아보려고 한다.

시작해보자

 

 


 

우선 JPA 단어에 대해서 알아보자 

대문자를 보다시피 무엇의 약자인 것 같다.

바로 Java Persistence API 라는 뜻이다.

즉, 자바가 지속성(자체적)으로 가지고 있는 API라는 것이다.

다른 말로 하면 현재 자바 표준 인터페이스라고도 한다.

 

그 전에는 인터페이스가 없었느냐??

아니다. 

EJB 라고 있었다.

다만 지금은 주로 사용하지는 않기에.. (코드의 복잡성과 자원의 비효율성)

가볍게 찾아보면 좋을듯하다.

 

 

아무튼

인터페이스는 다른 말로하면 인터페이스 자체가 동작을 구현하지는 않는다.

구현은 개발자에게 맡긴다는 말과 같다.

 

대표적으로 JPA 구현체가 3가지가 있다.

 Hibernate, EclipseLink, DataNucleus : JPA 2.1 표준 명세를 구현함

 

 

참고하자면 Spring Framework, 스프링 프레임워크

우리가 백엔드 개발자가 되고 싶다면 노래를 부르는 스프링은 Application 프레임워크로 

역시  JPA를 사용하고 있다.

 


 

아니 JPA가 하는 역할이 뭔데???

이 역할을 이해하기 위해서는 아래 설명을 하기 전에 ORM 이라는 개념에 대해서 알아야 한다.

[분류 전체보기] - ORM, Object-Relational Mapping 이란 무엇인가?

 

짧게 말하자면 ORM은 어플리케이션 측과   RDBMS 측(관계형 데이터베이스의 테이블 과 열,column) 사이의 상호 작용을 도와준다.

https://javabydeveloper.com/orm-object-relational-mapping/

 

JAVA 에서 ORM은 JAVA 클래스와 객체의 관계를 DB에 저장할 수 있게 변환해주는 역할을 한다는 것이다.

 

기존의 DBMS 같은 경우 객체지향성이 떨어졌으며 테이블에 정의된 값(integer, string)에 대해서만 DB에 저장되는 그런 단점을 가지고 있었다.

다시 말해서 객체에 대한 정보를 저장하고 싶다면 간단한 값으로 치환해서 DB에 저장해야 했다는 말이다.

하지만 객체지향 프로그래밍이라는 배경에서는 데이터를 다루는 작업이 객체 기준으로 이루어진다.

다시 말해서 객체의 상태가 변하게 되는 DB 저장 과정은 정말 거지같은 것이었던 것이었다.

그래서 개발자들은 ORM이라는 구현체를 통해서 객체 값들을 논리적 정당성은 깨지 않으면서 DB에 저장할 수 있는 형태로 바꿀 수 있게 했다.

즉, 객체의 상태를 보존할 수 있다는 말이다.

다시 말해서 DB에 객체의 상태가 저장되고 어떤 객체였는지 검색할 수만 있다면 그 객체는 언제든지 다시 생성할 수 있다는 말과 같다.

그렇게 된다면 다른 어플리케이션에서도 그 DB만 있다면 언제든지 해당 객체를 만들 수 있다는 말이다.

놀라운 기술이다.

 

또한 ORM을 통해서 기존의 방식과는 가벼운 코드로 작성이 가능하며

실제 쿼리문을 작성하지 않고 관리가 가능하여 객체지향적으로 데이터 자체를 관리할 수 있다.

 

다만 ORM의 단점만 있다면 구현할 때 고수준의 추상화를 하기 때문에 적절하게 써야 한다.

(일반적으로 테이블 간의 관계 제약은 따로 설정하고 DDL 작업을 하는 것으로 알려져 있다)

 


 

다시 돌아와서 ORM은 알겠고

JPA가 역할이 뭔데?

 

위에서 말한 것과 같이

객체 중심으로 개발할 수 있게 해주며 데이터 접근에 대해 추상화를 제공하며
생산성과 유지보수의 효율을 높여준다.

더욱 나아가 우리가 노래를 부르는 Spring에서 JPA를 지원하게 되는데

그것이 Spring-Data JPA 이다.

 

 

그림을 보면 JPA를 사용하기 위해 쓰는 중간 tier 라고 볼 수 있다.

하지만 저렇게 래핑해서 쓰는 이유 중 하나는 구현체 교체를 용이하게하고 저장소 (repo) 교체를 용이하게 하기 때문이다.

 

예를 들면 자바 Redis 클라이언트가 Jdis에서 Lettuce로 넘어가게 될 때 Spring Data Redis를 썼다면 바로 교체가 가능했다.

또한 Spring Data JPA, Spring Data MongoDB, Spring Data Redis 등 다른 프로젝트들은 동일한 인터페이스를 가지고 있어서 저장소를 교체해도 동작을 똑같이 수행할 수 있다.

 


 

 

728x90
반응형
그리드형