ORM
장점
- 객체 지향적이기 때문에 개발자가 비즈니스 로직 및 코드 자체에 집중할 수 있다.
- 관념적 코드(Boilerplate code)가 없거나 적어진다.
- 코드의 재사용, 유지보수의 편리성이 증대된다.
- DBMS의 종속성이 줄어든다.
단점
- N+1 문제 등 해결해야할 과제가 있다.
- 생성되는 쿼리 속도등의 문제가 있다.
- 설계과 잘못되면 일관성이 무너지거나 성능 저하의 문제가 있다.
JPA
Java의 ORM 표준 기술
JPA를 사용해야 하는 이유
- 생산성 향상
- 유지보수성 향상
- 패러다임의 불일치 해결
- 성능
- 쿼리에 비해 성능이 느려지는 경우도 있어 단순히 성능이 좋아지는 것은 아니다.
- 하지만, 동일한 쿼리를 캐싱하는 기능 등 성능이 개선되는 기능이 있다.
- 데이터 접근의 추상화와 벤더 독립성
JPA의 구현체
- Hibernate
- Spring Data JPA
- JPA를 한단계 추상화시킨 Repository 인터페이스를 제공
객체 매핑
@Entity
- 이 클래스를 테이블과 매핑한다고 JPA에게 알려주는 어노테이션
- @Entity 어노테이션이 있는 클래스 = 엔티티 클래스
@Table
- 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
- name 속성을 이용하여 테이블명 지정
- name 속성이 생략되어 있다면 엔티티 클래스의 이름을 테이블 이름으로 매핑
@Id
- 엔티티 클래스의 필드를 테이블의 PK에 매핑
- @Id가 사용된 필드 = 식별자 필드
@Column
- 필드를 컬럼에 매핑
- name 속성을 이용하여 컬럼명 지정
엔티티 매니저
- 특정작업을 위해서 데이터베이스에 액세스하는 역할
- 엔티티를 DB에 CRUD하는 역할
주의사항
- 엔티티 매니저 팩토리는 설정 정보를 읽어와 DB커넥션 풀도 생성하기 때문에 엔티티 매니저 팩토리를 생성하는 비용은 아주 크다. 따라서 엔티티 매니저 팩토리는 어플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용
- 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용 금지
- 사용이 끝난 엔티티 매니저는 반드시 종료
엔티티 매니저 팩토리 & 엔티티 매니저
- 엔티티 매니저 팩토리
- 생성 비용이 크기 때문에 DB를 하나만 사용하는 어플리케이션이라면 일반적으로 하나만 생성
- 스레드 세이프하기 때문에 여러 스레드가 동시 접근해도 안전
- 스프링 부트를 사용하면 자동으로 생성
- 엔티티 매니저
- 엔티티 매니저 팩토리를 이용해서 생성
- 여러 스레드가 동시에 접근하면 동시성 문제가 발생
'Spring' 카테고리의 다른 글
스프링 부트 디자인 패턴 (Spring Boot Design Patterns) (0) | 2024.01.11 |
---|