본문 바로가기
Spring

Spring | JPA(Java Persistence API)

by 2yy 2023. 12. 7.

JPA

  • JAVA 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스이며, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크. 구현은 여러 업체들이 하는 것이라고 보면 됨
    대표적인 오픈소스로는 Hibernate가 있음.
  • 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해줌
  • SQL과 데이터 중심의 설계에서 객체 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있음
  • 개발 생산성을 크게 높일 수 있음

ORM(Ojbect-Relational Mapping)

  • 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational Database)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면 됨.
  • SQL문이 아닌 메서드를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는 데만  집중할 수 있음. (내부적으로는 쿼리를 생성하여 DB를 조작하지만, 개발자가 이를 신경쓰지 않아도 됨.)
  • 프로젝트의 규모가 크고 복잡하여 설계가 잘못될 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음.

 

스프링 부트에 JPA 설정 추가

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.jpa.show-sql=true //JPA가 생성하는 SQL을 출력
// JPA는 테이블을 자동으로 생성하는 기능을 제공하는데, none을 사용하면 해당 기능을 끔
// create를 사용하면 엔티티 정보를 바탕으로 테이블도 직접 생성해줌
spring.jpa.hibernate.ddl-auto=none

 

서비스 계층에 트랜잭션 추가

  • org.springframework.transaction.annotation.Transactional 를 사용
  • 스프링을 해당 클래스의 메서드를 실행할 때 트랜잭션을 시작하고, 메서드가 정상 종료되면 트랜잭션을 커밋함
  • 만약 런타임 예외가 발생하면 롤백함
  • JPA를 통한 모든 테이터 변경은 트랜잭션 안에서 실행해야 함