ORM
자바의 객체와 관계형 데이터베이스의 테이블을 자동으로 매핑시켜주는 프로그래밍 기법
직접 SQL문을 사용하지 않고 자바 코드를 사용해서 DB에 접근할 수 있는 기술이다.
JPA
자바에서 ORM 기술 표준으로 사용되는 인터페이스 모음.
실제로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해서 사용되는 프레임워크.
말그대로 인터페이스기 때문에 구현체가 없다.
Hibernate
JPA 인터페이스의 구현체의 한 종류. 내부적으로 JDBC 이용
아래 그림 참고하자.
Spring Data JPA
JPA의 기능을 기반으로 제작된 라이브러리다.
JPA에서 Repository를 제작할 때마다 반복적으로 작성되는 CRUD 메소드를 제공하는 라이브러리.
사용 방법
public interface DataJpaRepository extends JpaRepository<Type, Id> {}
앞으로 사용할 Repository를 인터페이스로 선언하고 다음과 같이 JpaRepository를 상속받는다.
- Type : 사용할 Repository의 기준이 되는 Entity의 이름
- Id : 기입된 Entity의 PK 자료형
예를 들어, Order를 관리하는 Repository를 선언한다고 하면
Order 엔티티는 Long 자료형을 PK값으로 사용한다고 치자.
다음과 같이 작성할 수 있다.
public interface OrderRepository extends JpaRepository<Order, Long> {}
즉, Entity를 자동적으로 관리하는데 필요한 자주 사용하는 메소드를 Spring Data JPA에서 알아서 제공해준다.
예) save(), findAll(), findOne(), delete()
Spring Data JPA가 만능은 아니고 JPA를 기반으로 한 것이기에 결국 JPA의 개념을 잘 알아야 한다.
Entity
- 데이터베이스의 테이블과 매핑되는 객체
- 엔티티 클래스 내부의 필드들이 DB 테이블의 Column
Entity Manager
엔티티를 생성, 수정, 삭제하거나 검색하는 역할을 하는 매니저 객체
Transaction
데이터베이스의 상태를 변화시키는 하나의 기능을 수행하는 작업 단위
만약 데이터베이스의 데이터를 수정하는 도중에 예외가 발생한다면, DB 데이터들은 수정 전으로 돌아가야 한다.
이렇듯이 여러 작업을 진행하다가 문제가 생겼을 경우 이전 상태로 롤백하기 위해 사용되는 것이 트랜잭션이다.
그렇기 때문에, JPA를 사용할 때 데이터의 변경은 트랜잭션 안에서 실행되어야 한다.
스프링은 @Transactional 어노테이션이 붙은 메소드를 실행할 때 트랜잭션을 시작하고
메소드가 정상 종료되면 트랜잭션을 커밋한다. 만약 런타임 예외가 발생하면 롤백한다.
Commit? 작업이 마무리됨
Rollback? 하나의 트랜잭션 처리가 오류 등 비정상적으로 종료돼서 DB의 일관성 보장을 위해 모든 연산을 취소하는 것이다. 트랜잭션의 일부는 정상적으로 처리됐다고 하더라도 모든 연산을 취소한다.
'Spring' 카테고리의 다른 글
[Spring] DAO, DTO, VO 차이 (1) | 2023.10.26 |
---|---|
[Spring] Spring MVC 동작 원리 (0) | 2023.10.25 |
[Spring] 도메인 (0) | 2023.10.24 |
[Spring] lombok 어노테이션 정리와 주의사항 (0) | 2023.10.24 |
[Spring] @RequestParam, @PathVariable, @RequestBody, @ResponseBody 차이 (0) | 2023.10.11 |