본문 바로가기
부트캠프/백엔드 스터디

[DB] ORM

by 상똥 2024. 1. 15.

[ORM의 개념]

- Object Relational Mapping, 객체-관계 매핑

- 객체 지향 프로그래밍에서의 객체를 구현한 클래스와 RDB의 테이블을 연결해주는 것

- ORM을 통해 자동으로 SQL문을 생성하여 연결하는 방식

- 즉, 사용자가 SQL문을 짤 필요가 없어진다

 

[ORM의 장단점]

1. 장점

- 객체지향적인 코드 작성 가능 : ORM을 활용하면 메서드를 통해서 데이터베이스 관리가 가능해지므로, 프로그래밍에 집중할 수 있게 함

- DBMS 종속성 하락 :  대부분의 ORM은 DB에 종속적이지 않기 때문에 구현 방법 뿐만 아니라 자료형 타입까지 유효함

- 재사용 및 유지보수의 편리성 증가 : ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용할 수 있음/ 매핑 정보가 정확하여 ERD에 대한 의존도를 낮출 수 있음

- 데이터베이스 독립성 : 데이터베이스의 변경이나 전환에 대한 비용이 낮아짐 (코드의 변경 없이도 다른 종류의 데이터베이스로 변경 가능)

- 생산성 향상

 

2. 단점

- 성능 손실 : ORM은 데이터베이스와의 매핑 및 객체 추적을 위한 추가 작업이 필요하여 일부 성능 손실이 발생할 수 있음 

- 일관성의 어려움 : 데이터베이스와 객체 사이의 매핑이 항상 완벽하게 일치하지 않을 수 있음

- 복잡한 객체 관리의 어려움 : 객체 간의 복잡한 관계를 다루는 경우, 처리가 복잡해질 수 있음 (다대다 매핑 등)

 

[JPA]

1. JPA란

- ORM 기술의 표준 명세로, 자바에서 제공하는 API

- 즉, JPA는 인터페이스고, 이를 구현한 대표적인 구현체는 Hibernate, EclipseLink등이 있음

 

2. 동작 방식

(1) 엔티티

- 데이터베이스의 테이블에 대응되는 클래스

- @Entity가 붙은 클래스는 JPA에서 관리하며, 엔티티라고 함

 

(2) 엔티티 매니저 팩토리

- 엔티티 매니저 인스턴스를 관리하는 주체

- 사용자로부터 요청이 오면 엔티티 매니저로부터 엔티티 매니저 생성

 

(3) 엔티티 매니저

- 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공

- 내부적으로 데이터베이스 커넥션을 사용해 데이터베이스에 접근

 

(4) 영속성 컨텍스트

- 엔티티를 영구 저장하는 환경

* 영속성 : 프로그램의 실행이 종료되더라도 그 상태를 영구적으로 보존하고 있는 것을 의미

생명주기 내용
비영속 (new) new 키워드를 통해 생성된 상태로, 영속성 컨텍스트와 관련이 없는 상태
영속 (managed) - 엔티티가 영속성 컨텍스트에 저장된 상태로 영속성 컨텍스트에 의해 관리되는 상태
- 영속 상태에서 데이터베이스에 저장되지 않으며 트랜잭션 커밋 시점에 데이터베이스에 반영
준영속 상태 (detached) 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태
삭제 상태 (removed) 영속성 컨텍스트와 데이터베이스에서 삭제된 상태

'부트캠프 > 백엔드 스터디' 카테고리의 다른 글

[DB] 트랜잭션, ACID  (0) 2024.01.29
[DB] KEY  (1) 2024.01.29
[DB] index  (0) 2024.01.16
[DB] RDBMS/NoSQL  (1) 2024.01.15