Backend/SpringBoot 이론 부분

Spring Data JPA

Dean83 2025. 9. 29. 18:59

Spring Data 란 스프링에서 데이터를 다룰때 편리하게 다루기 위해 정의한 인터페이스들 이다. 이 안에는 Elastic search 등 다른 데이터를 스프링에 연결해주는 각각의 인터페이스들이 있다. 그 중 하나가 JPA이다. 

 

인터페이스 이므로, 실제 구현체가 필요한데, 가장 많이 사용하는것이 Hibernate 이다. 그리고 개발자는 보통 이걸 사용해서 JPA를 이용하게 된다. 

 

JPA 특징으로는, Entity Manager 가 중간에서 DB와 프로그램 간의 컨트롤타워 역할을 수행하며, Persistance Context가 DB와 관련되어 특히 중요한 역할을 수행한다. Persistance Context 는 트랜잭션과 밀접한 연관이 있는데 역할을 보면, 

  • 1차 캐싱을 한다
    • 한 트랜잭션 내에서 동일한 항목을 반복 조회해 올때, DB를 거치지 않고 캐싱된 데이터를 전달한다.
  • 트랜잭션 별로 모아서 DB에 쓴다.
    • 트랜잭션 내에서 중간 과정에서 데이터가 여러번 변경되더라도, 매번 DB에 접근하는것이 아니라 트랜잭션 종료시 최종값만 DB에 반영한다.
  • 지연 로딩, 쓰기를 한다
    • A 엔티티를 조회하는데, B 엔티티와 연관이 있다고 하자. 이때, B 엔티티를 바로 조회하여 데이터를 가져오는게 아니라 실제 B엔티티가 필요한 순간에 가져오는, Lazy loading을 한다. 이를 통해 B를 사용하지 않는 경우에는 네트워크 사용량을 줄인다.
    • 바로바로 DB에 쓰는게 아니라 트랜잭션 별로 모아서 쓴다.
  • 자동으로 변경 감지를 한다.
    • 데이터의 변경을 자동으로 감지하여 트랜잭션 종료시 이를 DB에 반영해준다.

사실, JPA 자체는 자바 레벨에서 제공을 한다. JPA가 있기 전에는 JDBC를 제공했었고, 불편함으로 인해 개선하기 위해 JPA가 생겨난 것이다. 그리고 이를 좀 더 자동화 하고 편리하게 사용하기 위해서 Spring에서는 Spring Data의 JPA가 있는것이다. Java 레벨에서 제공하는 JPA 를 이용하기 위해서는 Entity Manager를 직접 활용하여 필요한 함수 호출을 해야 한다. (persist 등) Spring Data의 JPA는 이를 어노테이션과 Repository를 통해 직접적으로 Entity Manager를 쓰지 않는다. 

 

Spring Data JPA의 특징을 보면 다음과 같다. 

  • interface 를 통해 리파지토리를 정의해주면, 구현체는 자동으로 생성해준다. 
  • 인터페이스 내에서 정해진 규칙에 따라 함수명을 정의해주면, 해당 구현체를 자동으로 생성하여 처리해준다.
  • 자동으로 생성하는 구현체가 부족하다면 @Query 어노테이션을 이용해 직접 쿼리문을 작성 할 수도 있다.

 

상세 동작을 요약하면, 

  • Entity Manager 가 DB에서 데이터를 조회한다
  • 조회한 데이터를 Persist Context에 두고, Entity 객채로도 준다.
  • Entity가 변경되면 자동으로 감지하여 Persist Context 에 기록한다.
  • 트랜잭션을 통해 Persist Context 내용을 DB에 반영하고 Persist Context를 비운다. 
  • 만일 @Query 어노테이션을 통해 bulk 연산을 할 경우, 이는 Persist Context를 거치지 않으므로, 데이터가 맞지 않게 된다. 이 경우는 clearAutomatically = true 옵션을 적어주어야 한다. (https://dean83.tistory.com/289)

 

 

https://dean83.tistory.com/277

 

[기본구조2] JPA 초기 설정 (DB 관리) 및 Entity 예제(validation 포함)

spring boot 에서 DB 연계를 위해서는 JPA를 통해 진행해야 한다. build.gradle 에 다음을 추가implementation 'org.springframework.boot:spring-boot-starter-data-jpa' appication.yml 설정 추가spring: jpa: hibernate: ddl-auto: update upd

dean83.tistory.com

https://dean83.tistory.com/278

 

[기본구조3] Repository with JPA (DB CRUD동작,Interface, findby)

앞에선 DB와 매칭되는 클래스인 엔티티를 정리 하였다. 엔티티로 매핑해 놓으면 해당 테이블과 연결된 항목들을 쉽게 가져올 수 있고, 설정할 수 있다. 그러나 프로그램 상에서만 그러할 뿐 실제

dean83.tistory.com

이곳에 일전에 작성한 것과 같이, 정해진 규칙에 따라 함수명을 작성해주면 된다. 

 

또한, 이를 통해 처리를 못하는 경우에는 https://dean83.tistory.com/289 에 명시한 @Query 어노테이션을 통해 특정 쿼리를 직접 작성 할 수 있다. 

 

'Backend > SpringBoot 이론 부분' 카테고리의 다른 글

Filter 및 SecurityFilterChain  (0) 2025.12.15
Spring boot의 요청 처리 흐름  (0) 2025.12.15
SpringBoot 에서 트랜잭션  (0) 2025.10.01
Entity 심화  (0) 2025.09.30
Proxy  (0) 2025.09.30