[자바 ORM 표준 JPA 프로그래밍] - 2

쓰옹·2023년 4월 19일
0

JPA

목록 보기
2/4

김영한, ⌜자바 ORM 표준 JPA 프로그래밍⌟ 과
인프런 강의 <자바 ORM 표준 JPA 프로그래밍 - 기본편> 으로
공부한 JPA를 정리한 내용이다.

JPA 데이터베이스 방언

특정 데이터베이스에 종속적이지 않기 떄문에 다른 데이터베이스로 손쉽게 교체할 수 있다.
각 데이터베이스는 SQL표준과 조금씩 다른 문법과 함수가 있다. 이처럼 특정 데이터베이스만의 고유한 기능을 방언(Dialect)라고 한다.
하이버네이트를 포함 JPA 구현체들은 다양한 데이터베이스 방언 클래스를 제공한다.
표준 문법에 맞춰 JPA를 사용하면 특정 데이터베이스에 의존적인 SQL은 데이터베이스 방언이 처리해준다.

어플리케이션 개발

public class JpaMain {
	public static void main(String[] args) {
		// 어플리케이션 로딩 시점에 딱 하나만 만들어놔야함
        // 엔티티매니저팩토리 생성
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
		// 실제 트랜잭션 단위마다 꼭 만들어줘야함
        // 엔티티매니저 생성
		EntityManager em = emf.createEntityManager();
        // 트랜잭션 획득
		EntityTransaction tx = em.getTransaction();
		tx.begin(); // 트랜잭션 시작

		// 실행 code 작성
		try {
        	... // 비즈니스 로직
            ... 
			tx.commit(); // 트랜잭션 커밋
		} catch (Exception e) { // 예외처리
			tx.rollback(); // 트랜잭션 롤백
		} finally {
			// 꼭 닫아줘야함
			em.close(); // 엔티티매니저 종료
		}
		emf.close(); // 엔티티매니저팩토리 종료
	}
}
  • 엔티티매니저 설정
  • 트랜잭션 관리
  • 비즈니스 로직

엔티티매니저 설정

JPA 설정 정보(persistence.xml / 스프링에서 application.yml)를 사용해 엔티티매니저 팩토리를 생성 후 엔티티매니저 생성.
엔티티매니저팩토리는 어플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야함.
엔티티매니저를 사용해 데이터베이스에 엔티티를 등록/수정/삭제/조회 가능
스레디간 공유나 재사용 불가 (데이터베이스 커넥션과 밀접한 관계가 있으므로)
요청이 올 떄마다 엔티티매니저 생성
사용이 끝나면 반드시 종료해야함

트랜잭션 관리

JPA를 사용하면 항상 트랜잭션 안에서 데이터 변경이 이뤄져야 함.
트랜잭션 시작은 엔티티매니저에서 트랜잭션 API를 받아와야 함

EntityTransaction tx = em.getTransaction();

JPQL

JPA는 엔티티 객체 중심 개발이므로 검색 시에도 테이블이 아닌 엔티티 객체를 대상으로 검색해야함. 근데 그러려면 모든 데이터를 불러와서 객체로 변경한 다음 검색해야 하는데 사실상 불가능임. 그래서 검색 조건이 포함된 SQL을 사용해야하는데 JPQL(Java Persistence Query Language. SQL을 추상화한 객체지향 쿼리 언어) 을 작성하면 됨.

  • SQL 문법과 거의 유사 -> SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 등 사용 가능

JPQL과 SQL의 차이점

  • JPQL; 엔티티 객체 대상 쿼리 == 클래스와 필드 대상 ==> 방언이 바뀌어도 변경 안해도 됨
  • SQL; 데이터베이스 테이블 대상 쿼리

마무리

면접 예상 질문

  • 엔티티매니저란?
    데이터베이스에 접근하여 엔티티 객체를 등록,수정,삭제,조회하는 기능을 합니다. 스레드 간 공유나 재사용이 불가능하며 엔티티매니저팩토리에서 요청이 올 때마다 생성합니다. 사용이 끝나면 반드시 엔티티매니저를 종료해야합니다.
  • 트랜잭션이란 무엇이요?
    트랜잭션은 데이터베이스 시스템에서 한 번에 실행되어야 하는 하나의 논리적 기능을 수행하기 위해 실행되는 작업 단위를 의미합니다. 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 4가지 특성을 갖고 있습니다. 원자성은 작업 단위로 전체가 수행되거나 되지 않아야하는 속성으로 작업 중에 오류가 발생하면 해당 트랜잭션에 속한 모든 작업은 취소되어야합니다. 일관성은 트랜잭션이 수행되기 전과 후의 데이터베이스 상태가 일치해야하는 속성으로 트랜잭션 실행이 완료되면 데이터베이스의 상태가 일관성 있게 유지되어야 합니다.
    독립성은 여러 트랜잭션이 동시에 실행될 때 다른 트랜잭션에서 수행하는 작업에 영향을 받지 않도록 보장해야합니다.
    지속성은 트랜잭션이 완료되면 결과가 안전하게 영구적으로 보존되어야 하는 속성입니다.
profile
기록하자기록해!

0개의 댓글