seaking110 님의 블로그
JPA 꿀팁 본문
개발 순서
JDBC API - > Mybatis, JDBC -> JPA, Hibernate
JPA에서 간결한 코드와 동일한 기능을 구현할 수 있는 이유는 JPA의 자동 쿼리 생성 기능 덕분
- findByActiveTrue() - > SELECT * FROM WHERE active = true라는 쿼리가 자동 생성
- JPA 엔티티 매핑 기능 덕분에 User 엔티티와 users 테이블의 컬럼이 자동 매핑
- 파라미터 바인딩도 자동으로 처리
- 자동 트랙잭션 관리, JPA는 @Transactional이 기본적으로 적용 별도로 관리 필요 x
- JPA는 내부적으로 EntityManager가 자동으로 커넥션을 관리하므로 개발자가 관리 x
따라서 생산성이 뛰어난 JPA를 사용하자!
만약 복잡한 코드가 필요할 때는 JPQL로 JPA를 매핑해서 사용하면 됨
영속성
데이터가 프로그램이 종료되더라도 사라지지 않고 지속되는 것을 의미!
즉 DB에 데이터를 저장하여 프로그램이 종료되어도 유지되므로 영속성이다.
저장위치
RAM : 휘발성
DB : 비휘발
JPA에서 객체를 저장하고 관리하는 공간이 영속성 컨텍스트
- Entity를 영구 저장하는 환경이라는 뜻
- 데이터를 영속성 컨테긋트에 저장
- DB에 저장x
- 즉 JPA가 DB에 있는 데이터를 RAM에서 관리할 수 있도록 해주는 공간
- DB에 접근하면 성능이 떨어지므로!
- EntityManager를 통해 영속성 컨텍스트에 접근하고 관리
- 생성 시 그안에 영속성 컨텍스트
- JPA에서의 영속성 : Entity 객체를 영속성 컨텍스트에 저장하여 지속적으로 관리하는 것
- JPA가 객체를 보관하는 공간으로 DB와 메모리 사이에서 관리
- 따라서 성능이 최적화 되고 데이터 일관성을 유지해준다.
Hibernate
- 하이버네이트는 자바에서 데이터베이스와 객체를 쉽게 연결해주는 ORM 프레임워크
- JPA를 구현한 대표적인 프레임워크
- JPA의 구현체 중 하나로 실제로 동작하는 ORM 프레임 워크
- 즉 JPA는 개념, 하이버네이트는 실제 코드를 실행하는 도구
ORM
- SQL에 의존하면 객체를 저장하는 것에 상당한 문제가 생김
- 그래서 객체 간의 관계 만으로도 설계가 가능해지는 즉 객체 지향적으로 설계가 가능하게 만들어주는 프레임 워크
엔티티 생명 주기
- 비영속 -> 영속 - > 준영속 - > 삭제
- 비영속
- 객체 생성
- 엔티티가 연속성 컨텍스트에 없는 상태
- 영속
- em.persist(member)
- 여기서부터 영속성 컨텍스트가 엔티티 관리
- db에 저장된 것은 아님 commit되어야 저장
- 준 영속
- em.datch(member);
- 엔티티가 연속 상태일때 영속성 컨텍스트에 저장되었다가 분리되는 상태
- 영속성 컨택스트가 엔티티 관리 X
- detach(하나만 삭제) , clear (전부 삭제), close (종료)
- 준 영속에서 영속으로 가는 방법 merge()
- 삭제
- 영속성 컨텍스트에 있는 엔티티 삭제
- 중요!! DB에서도 해당 데이터가 삭제된다!!
총정리
객체 지향 설계 시 가장 중요한 4가지
더보기
추상화, 캡슐화(정보 은닉), 상속, 다형성
JPA
더보기
자바에서 ORM을 쉽게 할 수 있도록 제공하는 표준 인터페이스!
Hibernate
더보기
JPA의 구현체 중 하나로 실제로 동작하는 ORM 프레임워크로 데이터베이스와 객체를 쉽게 연결
ORM 프레임 워크
더보기
객체 간의 관계 만으로도 설계가 가능해지는 즉 객체 지향적으로 설계가 가능하게 만들어주는 프레임 워크
영속성 컨텍스트
더보기
"JPA가 DB에 있는 데이터를 RAM(메모리)에서 관리할 수 있도록 해주는 공간"
성능 최적화 및 데이터 일관성을 유지하게 도와줌
엔티티 생명 주기
더보기
비영속 -> 영속 - > 준영속 - > 삭제
비영속 : 객체 생성 new Member();
영속 : em.persist(member)
준영속 : em.datch(member)
'Today I Learned' 카테고리의 다른 글
JPA를 이용한 일정관리 프로그램 트러블 슈팅 (0) | 2025.02.13 |
---|---|
JPA (0) | 2025.02.10 |
일정 관리 피드백 (0) | 2025.02.07 |
인증/ 인가 (0) | 2025.02.05 |
트랜잭션과 인덱스 (0) | 2025.02.05 |