개발/Spring

Spring Data JPA - 1

IamBD 2022. 2. 24. 21:44

1. JPA 개요

 

1-1. ORM

Object Relational Mapping의 약자로 한글 해석은 객체 관계형 매핑입니다.

간단하게 말하면 관계형 데이터베이스의 테이블 데이터를 자바 객체와 매핑하는 기술을 뜻합니다.

 

ORM을 통해 얻고자 하는 것들은 다음과 같습니다.
  • 특정 DB에 종속된 표현이나 구현들을 할 필요가 없기에 DB 변경에 유연함.
  • DB에 종속된 표현이 아닌 객체의 이점을 살릴 수 있기에 객체간 참조나 type-safety에 유리함.
  • 연결 관리, 자원의 관리 등의 동작을 프레임워크에 맡겨 필요한 비즈니스 로직에만 집중할 수 있음.

 

1-2. JPA

Jakarta(Java) Persistence API의 약자로 자바에서 ORM 기술을 활용하여

RDBMS를 다루기 위한 인터페이스의 집합입니다.

 

JPA 자체만으로는 인터페이스뿐인 껍데기로 이를 구현하는 구현체가 필요한데 대표적으로

사용되고 있는것이 Hibernate 입니다.

 

중간에 Persistence 즉 영속성이란 생성한 객체나 변수 등 특정한 값들이 프로그램이 종료되어도

사라지지 않는 데이터의 특성을 뜻합니다.

 

JPA를 공부하게 되면 영속성 컨텍스트라는 말을 자주 접하게 됩니다.

 

이는 프로그램과 저장 장소 사이에 위치해 데이터를 저장, 조회 등 일련의 작업들을 할 때

보관하는 가상의 데이터베이스를 뜻합니다.

 

중간에 가상의 데이터베이스를 두어 생기는 이점은 다음과 같습니다.
  • 1차 캐싱으로 값의 조회시 매번 DB에서 조회하는것이 아닌 캐시에 없을 경우에만 DB에서의 데이터 조회를 요청하고 그 이후 요청부터는 캐싱된 값을 반환합니다. 이는 트랜잭션이 끝나면 캐싱된 값도 사라지기 때문에 비교적 복잡한 비즈니스 로직의 수행시 성능 향상을 기대할 수 있습니다.
  • 동일성 보장으로 하나의 트랜잭션 안에서는 위에 언급된 1차 캐싱의 특징으로 최초 DB에서 조회된 이후 요청부터는 캐싱된 값만을 반환받기 때문에 하나의 로직 안에서 동일성을 보장받을 수 있습니다.
  • 엔티티 등록 시 1차 캐시에 저장되어 commit에 대한 옵션을 원하는대로 설정할 수 있어 상황에 따라 성능 향상을 기대할 수 있습니다.
  • 수정 시 직접 update를 할 필요없이 컨텍스트의 값과 DB의 값을 비교하여 자동으로 update 쿼리를 수행합니다.

 

1-3. JPQL

Jakarta(Java) Persistence Query Language의 약자로 모든 DB 플랫폼으로부터 독립적인 객체 지향 쿼리 언어입니다.

JPA 표준 사양의 일부로 정의되었으며 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리를 만드는데 사용됩니다.

애초에 SQL의 영향을 받았기 때문에 구문이 SQL 쿼리와 유사하다는 특징이 있습니다.

 

다만, 대부분의 Spring Data JPA에서는 QueryDSL 라이브러리를 사용하기 때문에

정말 복잡한 요구사항이 있거나 특수한 상황이 아니라면 직접적으로 JPQL을 사용할 일은 거의 없는 추세입니다.

 

 

2. 기존의 기술들

 

2-1. iBatis, myBatis

persistence 프레임워크의 일종으로 기본적으로 JDBC API를 사용하며 iBatis, myBatis와 같이

RDBMS 쿼리문의 실행 결과를 자바 코드에 매핑하여 프로그램 코드와 SQL을 분리하는 프레임워크들을

SQL Mapper이라 부릅니다.

 

위 기술은 SQL문을 별도의 XML 문서로 작성하여 프로그램 코드와 분리한 형식입니다.

iBatis의 경우는 2001년 최초 개발되어 2010년 3.0까지 개발되었으며 myBatis는 iBatis 3.0을 이어

최근까지도 사용되고 있는 프로젝트 입니다.

 

스프링이나 스프링 부트와 연동을 지원하고 있으며 Freemarker나 Memcached, Redis 등 다양한

프레임워크와의 연동을 지원하여 국내에선 아직 많이 사용되고 있습니다.

 

myBatis 사용 예제

 

ORM과의 차이점은 다음과 같습니다.
  • 자바 객체를 DB 테이블과 매핑한다 => ORM
  • 자바 메소드를 SQL 실행 결과와 매핑한다 => myBatis

 

2-2. JdbcTemplate

스프링 JDBC에서 제공하는 템플릿 클래스로 쿼리 실행과 결과 전달 기능을 제공합니다.

start.spring.io에서 보면 spring-boot-starter-jdbc 모듈을 추가하면 사용할 수 있습니다.

 

이름 그대로 JDBC를 사용하기 위한 Template, 즉 틀로서 JDBC의 사용을 단순화하고 일반적인 오류를 방지해줍니다.

 

JdbcTemplate 사용 예제

'개발 > Spring' 카테고리의 다른 글

[Spring] json deserialize ClassCastException  (0) 2022.06.16
InvalidDefinitionException 에러  (0) 2022.06.08
Spring Data JPA - 2  (0) 2022.02.25