Spring

[Spring][JPA] ORM & JPA

dbssk 2023. 8. 14. 18:00

ORM 

장점

  1. 객체 지향적이기 때문에 개발자가 비즈니스 로직 및 코드 자체에 집중할 수 있다.
  2. 관념적 코드(Boilerplate code)가 없거나 적어진다.
  3. 코드의 재사용, 유지보수의 편리성이 증대된다.
  4. DBMS의 종속성이 줄어든다.

단점

  1. N+1 문제 등 해결해야할 과제가 있다.
  2. 생성되는 쿼리 속도등의 문제가 있다.
  3. 설계과 잘못되면 일관성이 무너지거나 성능 저하의 문제가 있다.

 

JPA

Java의 ORM 표준 기술

JPA를 사용해야 하는 이유

  1. 생산성 향상
  2. 유지보수성 향상
  3. 패러다임의 불일치 해결
  4. 성능
    • 쿼리에 비해 성능이 느려지는 경우도 있어 단순히 성능이 좋아지는 것은 아니다. 
    • 하지만, 동일한 쿼리를 캐싱하는 기능 등 성능이 개선되는 기능이 있다.
  5. 데이터 접근의 추상화와 벤더 독립성

JPA의 구현체

  • Hibernate
  • Spring Data JPA
    • JPA를 한단계 추상화시킨 Repository 인터페이스를 제공

 

객체 매핑

@Entity

  • 이 클래스를 테이블과 매핑한다고 JPA에게 알려주는 어노테이션
  • @Entity 어노테이션이 있는 클래스 = 엔티티 클래스

@Table

  • 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
  • name 속성을 이용하여 테이블명 지정
  • name 속성이 생략되어 있다면 엔티티 클래스의 이름을 테이블 이름으로 매핑

@Id

  • 엔티티 클래스의 필드를 테이블의 PK에 매핑
  • @Id가 사용된 필드 = 식별자 필드

@Column

  • 필드를 컬럼에 매핑
  • name 속성을 이용하여 컬럼명 지정

 

엔티티 매니저

  • 특정작업을 위해서 데이터베이스에 액세스하는 역할
  • 엔티티를 DB에 CRUD하는 역할

주의사항

  • 엔티티 매니저 팩토리는 설정 정보를 읽어와 DB커넥션 풀도 생성하기 때문에 엔티티 매니저 팩토리를 생성하는 비용은 아주 크다. 따라서 엔티티 매니저 팩토리는 어플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용
  • 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용 금지
  • 사용이 끝난 엔티티 매니저는 반드시 종료

엔티티 매니저 팩토리 & 엔티티 매니저

  • 엔티티 매니저 팩토리
    • 생성 비용이 크기 때문에 DB를 하나만 사용하는 어플리케이션이라면 일반적으로 하나만 생성
    • 스레드 세이프하기 때문에 여러 스레드가 동시 접근해도 안전
    • 스프링 부트를 사용하면 자동으로 생성

  • 엔티티 매니저
    • 엔티티 매니저 팩토리를 이용해서 생성
    • 여러 스레드가 동시에 접근하면 동시성 문제가 발생