ORM (Object Relational Mapping, 객체-관계 매핑)
- 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말한다.
ORM을 사용하면 DB를 몰라도 될까?
- ORM을 이용할 때 어쨋든 영속성을 가진 객체는 DB에 저장된다. 테이블과 객체의 매핑을 하는 것이기 때문에 DB와 OOP를 모두 잘 알고 있어야 한다.
ORM을 사용하는 이유는?
- DB(SQL)를 직접 다루게 되면 코드의 반복이 발생하고, SQL에 의존적인 개발을 하게 된다.
ORM | DB | |
데이터 | 객체(클래스) | 테이블 |
연관관계 | 속성(관계매핑) | FK 혹은 Join Key |
ORM을 쓰면 좋은 점은?
(1) 객체 지향적이기 때문에 개발자가 비지니스 로직 및 코드 자체에 집중할 수 있다.
(2) 관념적 코드가 없거나 적어진다.
(3) 코드의 재사용, 유지보수의 편리성이 증대된다.
(4) DBMS의 종속성이 줄어든다.
ORM을 쓰면 안 좋은 점은?
(1) N+1의 문제 등 해결해야 할 과제가 있다.
(2) 생성되는 쿼리 속도 등의 문제가 있다.
(3) 설계가 잘못되면 일관성이 무너지거나 성능 저하의 문제가 있다.
JPA (Java Persistence API)
- Java의 ORM 표준 기술로, Application과 JDBC 사이에서 동작한다.
JPA를 사용해야 하는 이유?
(1) 생산성 향상
(2) 유지보수성의 향상
(3) 패러다임의 불일치 해결
(4) 성능
(5) 데이터 접근의 추상화와 벤더 독립성
JPA의 구현체
(1) Hibernate
(2) Spring Data JPA - JPA를 한단계 추상화시킨 Repository 인터페이스를 제공
객체 매핑
@Entity
- 이 클래스를 table과 매핑한다고 JPA에게 알려주는 annotation
- 엔티티 클래스라고 한다.
@Table
- Entity 클래스에 매핑할 테이블 정보를 알려준다.
- name 속성을 이용하여 테이블 명을 지정한다.
- name 속성이 생략되어 있다면 클래스의 이름(Entity의 이름)을 table 이름으로 매핑한다.
@Id
- Entity 클래스의 필드를 table의 PK에 매핑한다.
- @Id가 사용된 필드를 식별자 필드라고 한다.
@Column
- 필드를 칼럼에 매핑한다.
Entity Manager
- 특정작업을 위해서 데이터베이스에 엑세스 하는 역할
- 엔티티를 DB에 CRUD 하는 역할
- 엔티티와 관련된 일을 처리하는 엔티티 관리자
Entity Manager 사용 주의사항
(1) Entity Manager 팩토리는 설정 정보를 읽어와 DB 커넥션 풀도 생성하기 때문에 Entity Manager 팩토리를 생성하는 비용은 아주 크다. 따라서 Entity Manager 팩토리는 어플리케이션 전체에서 딱 한번만 생성하고 공유헤서 사용해야 한다.
(2) Entity Manager는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안된다.
(3) 사용이 끝난 Entity Manager는 반드시 종료해야 한다.
'Web Develop > Spring' 카테고리의 다른 글
[Rest API] Spring JPA를 통한 CRUD 구현하기_SpringBoot (0) | 2023.10.25 |
---|---|
[Rest API] 컨트롤러를 통한 게시판 기능 구현하기_SpringBoot (0) | 2023.10.25 |
스프링 Swagger 오류 해결 - Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException (0) | 2023.09.02 |
스프링 프레임워크 (0) | 2023.06.17 |
댓글