JPA란?
더 큰 Spring Data 패밀리의 일부인 Spring Data JPA는 JPA 기반(Java Persistence API) 저장소를 쉽게 구현할 수 있게 해줍니다. 데이터 액세스 기술을 사용하는 Spring 기반 애플리케이션을 더 쉽게 빌드할 수 있게 해줍니다.
애플리케이션에 대한 데이터 액세스 계층을 구현하는 것은 꽤 번거로울 수 있습니다. 가장 간단한 쿼리를 실행하기 위해 너무 많은 보일러플레이트 코드를 작성해야 합니다. 페이지 매김, 감사 및 기타 자주 필요한 옵션과 같은 것을 추가하면 결국 길을 잃게 됩니다.
Spring Data JPA는 실제로 필요한 양만큼 노력을 줄여 데이터 액세스 계층의 구현을 크게 개선하는 것을 목표로 합니다. 개발자는 다양한 기술을 사용하여 리포지토리 인터페이스를 작성하고 Spring은 자동으로 이를 연결합니다. 사용자 정의 파인더나 예제별 쿼리를 사용할 수도 있으며 Spring은 쿼리를 작성합니다! -Spring 공식 사이트
https://spring.io/projects/spring-data-jpa
Spring Data JPA
Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA-based (Java Persistence API) repositories. It makes it easier to build Spring-powered applications that use data access technologies. Implementing a data access l
spring.io
간단히 말해 JPA는 자바 어플리케이션에서 관계형 데이터베이스를 쉽게 다를수 있도록 도와주는 ORM(Object-Relational Mapping)프레임워크이다. JPA를 사용하면 자바 객체와 데이터베이스 테이블을 연결해 주어서, 개발자가 SQL이라는 데이터베이스 언어를 직접 작성하지 않아도, 자바 코드만으로 데이터베이스 작업이 가능하다!
JPA는 4가지의 주요 개념이 있다.
엔티티(Entity)
- 데이터베이스 테이블에 대응하는 자바 클래스입니다. 엔티티 클래스는 데이터베이스 테이블의 각 행을 객체로 나타낸다.
예를 들어 'User라는 엔티티 클래스가 있다고 가정해보자!
이 클래스는 데이터베이스의 users 테이블과 연결된다. 그래서 User클래스의 각 인스턴스는 users 테이블의 한 행을 나타내게 된다.
즉 엔티티는 데이터베이스의 테이블의 각 줄을 자바 객체로 만들어주는 도구라고 생각하면 편하다!
엔티티 매니저(Entity Manager)
- JPA의 핵심 인터페이스로, 엔티티 객체를 생성, 삭제, 수정, 조회하는 등의 데이터베이스 작업을 관리한다.
- 엔티티 매니저는 트랜잭션을 관리하며, 영속성 컨텍스트(Persistence Context)라는 작업 영역을 통해 엔티티의 상태를 관리한다.
간단히 말하자면
엔티티 매니저는 데이터베이스에서 데이터를 가져오거나 저장할 때 사용하는 중간 관리자 역할을 한다. 만약 데이터베이스에 새로운 정보를 저장하고 싶다면, 엔티티 매니저를 통해 그 작업을 수행한다. 또한 데이터베이스 작업이 잘 끝나도록 트랜잭션(작업단위)을 관리한다. 예를 들어, 여러 작업을 한 번에 묶어서 처리할 때, 중간에 오류가 발생하면 이전 작업을 되돌려서 데이터의 일관성을 유지할 수 있게 한다.
Ex) User 데이터를 추가하고 싶을때
User라는 데이터를 추가하고 싶다면, 엔티티 매니저에게 "이 User를 데이터베이스에 저장해줘"라고 요청한다. 그러면 엔티티 매니저는 이 요청을 받아서 데이터베이스에 반영하게 된다.
(마찬가지로, 특정 사용자의 정보를 수정하거나 삭제할 떄도 엔티티 매니저를 통해 이런 작업을 처리한다.)
영속성 컨텍스트(Persistence Context)
- 엔티티 매니저가 관리하는 엔티티 객체들이 저장되는 곳이다. 영속성 컨텍스트는 1차 캐시 역할을 하며, 데이터베이스와의 동기화를 관리한다.
- 영속성 컨텍스트 안에 있는 엔티티는 '영속 상태'에 있다고 하며, 이 상태의 엔티티는 변경사항이 자동으로 데이터베이스에 반영된다.
쉽게 말해서, 영속성 컨텍스트는 임시 저장소처럼 작동한다. 여기에 저장된 엔티티 객체들은 1차 캐시로 관리되며, 이 상태에서 변경된 내용이 자동으로 데이터베이스에 반영된다.
JPQL(Java Persistence Query Language)
- 객체지향 쿼리 언어로, SQL과 유사하지만 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성한다.
예를 들어, "20살 이상인 사용자를 가져와라"라는 쿼리를 SELECT u FROM User u WHERE u.age > 20처럼 엔티티를 대상으로 쿼리를 작성할 수 있다.
(여기서 User는 데이터베이스 테이블이 아니라 자바의 엔티티 클래스이다.)
간단히 말해 JPQL은 SQL처럼 생겼지만 자바 객체를 대상으로 데이터를 조회하거나 조작하는 데 사용된다.
'Spring' 카테고리의 다른 글
IOC(Inversion fo Control), DI(Dependency Injection) (0) | 2024.08.22 |
---|---|
인증(Authentication)와 인가(Authorization) (0) | 2024.08.20 |
@RestController, @Controller (0) | 2024.08.18 |
post, put, get, delete (0) | 2024.08.14 |
Spring MVC (0) | 2024.08.12 |