본문 바로가기
백엔드/JPA

SPRING DATA JPA 개념들

by 임지혁코딩 2024. 1. 7.

프레임 워크는 이미 만들어진 구조와 도구의 집합으로 , 어플리케이션 개발의 속도와 효율을 지원한다.

템플릿은 이미 모든 것이 결정된 모양에 원하는 데이터를 삽입.

FRAMEWORK는, 도구나 라이브러리의 모음 

라이브러리는 도구 들의 모음. 

프레임 워크는 자동차, 라이브러리는 바퀴. 

 

ORM? OBJECT RELATIONAL MAPPING

객체 지향 언어를 활용 즉, DB DATA를 자바 객체와 매핑한다.

RDBMS를 객체 지향 DB로 가상화한다. (DB를 추상화한다)

즉, INSERT와 SELECT 등의 코드만을 작성하고, 그 외의 접근 포인터 등의 문제는 프로그램에게 위임한다.

효과 -> INETRFACE에 의존하여 위임하여 작성하니, 특정 DB(MY SQL 등등)을 고려하는 것을 줄인다.

 

JPA 

JAVA PERSISTENCE API -> 자바에서 ORM을 활용해 RDBMS를 다루기 위한 인터페이스 표준 명세 

JAKRATA로 의존성이 변겅 되었기 떄문에, 의존성에

testImplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
추가가 필요하다. 
 
PERSISTENCE (영속성)
트랜잭션 SQLD때 배웠지? 시스템의 상태가 종료된 후에도, 상태가 사라지지 않는다.
즉 시스템의 상태를 데이터 저장소에 저장한다. 
주기억장치인 RAM 등에 저장된 데이터는 사라지므로, 이를 사라지지 않는 보조기억장치(하드디스크 , 파일, 데이터베이스 등)에 저장하는 것을 의미한다. 
 
JPQL 
RDBMS에 독립적인 (DBMS가 될수도 있고) 독립적인 쿼리 언어 . 
JAVA VERSION SQL( JAVAC 등 기억하지 ? ) 
 
JPQL작성시
A.*는 A로 변경한다. 그리고, A.BOOKS B로 INNER JOIN을 할 수 있다. 
SQL은 TABLE을 기준으로 INNERJOIN을 표현했다면, JPQL은 객체적인 관점으로 사용한다 . 
<그대로 SQL언어를 쓸 수 없음에 주의하자> 
JPQL은, SQL과 다르게 SQL이라곤 써있지만, 특정 DB에 종속적인 언어가 아니다. 
 
JPQL을 썼다면 코드에, 과연 그것이 필수적인지를 다시 한번 점검해보자. 
JPQL이 추상화가 되어, 우리가 직접 그 내부를 보지 않고 쓰는것을 최우선으로 목표하는 것이 유리하다.
 
SQL MAPPER라는, RDBMS 쿼리문의 결과를 자바 코드에 매핑해준다. 
즉, 프로그램과 SQL 코드를 분리하는 것이다. 
 
- 1. APACHE  IBATIS
SQL문을 별도의 XML로 작성하여 프로그램 코드와 분리되어 있음. 
(현재 수명 종료)
 -2. MYBATIS
아직 살아있는 프로젝트. SPRING, SPRING BOOT와 연동이 가능하다. 
ORM은 자바 객체를, MYBATIS는 자바 메소드를 매핑한다. 
XML에 명시되어있고, <SELECT > </SELECT>로 , 그 방식외에 XML을 분리하고 싶지 않다면
@SELECT("SELECT * FROM ~~ ")를 활용한다.  
MAIN에서 SPRINGBOOT와 연동해서 사용한다. 
UPDATE,와 DELETE시 RETURN으로 UPDATE,DELETE된 행의 개수를 RETURN 한다. 
INSERT는 성공시 1 RETURN (MYBATIS 만을 작성했다)
 
 
JDBC . 
JdbcTemplate  -> JDBC 에서 제공하는 TEMPLATE .
이것 또한 MAIN METHOD 작동시, EXCEPTION을 던지고 이를 받아서 사용하는 형식으로 사용한다. 
 
이렇게 사용하면, SQL이라는 것을 다 알아야 되기 때문에 , 결과적으로 분리되었다고 보기는 힘들다. 
 
HIBERNATE VS SPRING DATA 
 
HIBERNATE
criteria query 
entityManger.getCriteriaBuilder()하여 해당을 가져와서 사용한다. 
<전혀 sql처럼 사용하지 않는다.>
OR entityManager.get()하여, 받아와서 sql문을 활용해서 작성할 수도 있다. 
 
table을 entity로 매핑할땐
@ENTITY, @TABLE(name = "EVENTS")뜽으로 . 
설정은 xml파일을 생성하여 여기에 작성. 
그 이후 createEntityManagerFacotry등을 통하여 생성한다. 
직접 getTransaction() 이후 prsistent 이후 close .  -> pl/sql처럼 begin ~~ close를 따른다. 
 
Spring Data JPA 
조금 더 추상화된 모듈 . 
이를 사용할거라면, hibernate 구현을 하지 않아도 된다 .
jpql,entitymanager,close, 트랜잭션 관리, 모든것을 하지 않아야 만 한다. 아니면 쓰질 말든가.
 
jpa repository를 사용하는 순간. save, findby 와 같은 기본 내용들을 모두 가지고 있다. 
 
@Transactional  -> jpa와 spring의 버전이 다르다. spring 을 사용할땐 spring transaction을 사용해야한다.
jparepository를 써놓고, entitymanager를 사용해서 다시 begin, rollback 하는 것은 지 양 하자. 
 
 
H2(엄청 가볍게 써왔던 얘는 대체 뭐일까? ) 
빠르고 , 세팅하기 쉽다. 아주 경량 . 
 
설정..할 경우가 있을진 잘 모르겠지만 
SPRING.H2.CONSOLE.ENABLE= TRUE. 
SPRING.DATASOURCE.URL=JDBC:H2:CONSOLE과 같이 설정이 필요 . 
 
 
 

 

'백엔드 > JPA' 카테고리의 다른 글

JPA TEST  (0) 2024.01.07
MYSQL 적용 ++ POSTGRESQL 까지  (0) 2024.01.07
DataSource, Transacation Manager  (1) 2024.01.07
SPRING DATA JPA 실제 활용  (1) 2024.01.07