🔥스파르타 TIL (Spring)
JPA 란? (1)
승승장규
2025. 2. 8. 14:57
애플리케이션에서 데이터를 DB에 저장해서 관리하기 위해 직접 Table을 만들고 SQL을 작성한 뒤,
JDBC를 사용해서 직접 실행해서 SQL의 결과를 객체로 직접 만들어야 했었다.
이러한 경우 SQL에 의존적이라 변경에 취약하다는 단점이 있다.
이러한 단점을 보안하기 위해 ORM을 사용할 수 있다.
ORM (Object Relation Mapping) ▼
- 반복적이고 번거로운 SQL 작업을 줄여주기 위해 사용
- 자바의 클래스와 DB의 데이터를 직접 매핑할 수 있다
- JPA는 자바 ORM의 표준 명세이다
Hibernate ▼
- 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체
- JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다.
- JPA는 애플리케이션과 JDBC 사이에서 동작한다.
- DB 연결과정을 직접 개발하지 않아도 자동으로 해준다.
- SpringBoot 환경에서는 EntityManagerFactory와 EntityManager를 자동으로 생성해 준다.
- @Transactional : 어노테이션으로 트랜잭션 환경을 자동으로 제공해 준다.
- 이때 @Transactional(readOnly = true)를 설정하면 트랜잭션에서 데이터를 읽기만 허용되어 읽기 작업에 최적화를 줄 수 있지만, 데이터를 수정할 수 없다.
build.gradle JPA 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
application.properties Hibernate 설정 추가 : +자동으로 EntityManagerFactory와 EntityManger를 만들어준다.
/*
create : 기존의 테이블을 모두 삭제 후, 다시 생성
create-drop : 종료 시점에 테이블을 삭제
update : 변경된 부분만 반영 ex) 테이블이 없으면 생성, 있으면 생성 x
validate : 엔티티와 테이블이 정상적으로 매핑 되었는지 확인
none : 아무것도 하지 않음
*/
spring.jpa.hibernate.ddl-auto=update
// Hibernate가 자동으로 만들어주는 sql
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
영속성 콘텍스트와 트랜잭션의 생명주기에 대해 알아보자
Entity란 무엇일까? (2) - 영속성 콘텍스트의 기능
Entity란 무엇일까? (2) - 영속성 콘텍스트의 기능
이전 내용과 더불어 영속성 콘텍스트의 기능에 대해 알아보자. 1차 캐시영속성 콘텍스트는 내부적으로 캐시 저장소를 가지고 있다.우리가 저장하는 Entity 객체들이 1차 캐시 (캐시 저장소)에 저
seungg8361.tistory.com
- Spring 컨테이너 환경에서는 영속성 콘텍스트와 트랜잭션의 생명주기가 일치한다.
- 트랜잭션이 유지되는 동안 영속성 콘텍스트도 유지되기 때문에 영속성 콘텍스트의 기능을 사용할 수 있다.
- @Transactional 어노테이션에는 propagation 옵션이 존재하는데 디폴트로 REQUIRED 옵션이 설정되어 있다. -> 트랜잭션 전파
- 부모 메서드에 트랜잭션이 존재한다면 자식 메서드의 트랜잭션은 부모 메서드에 합류하게 된다.
- 한 마디로 자식 메서드의 트랜잭션이 있지만 부모 메서드에 없다면, 자식 메서드에서만 트랜잭션 환경이 적용된다.
이후에 자세한 내용을 다뤄보자 🖐️🖐️