CS

[JPA] ORM, JPA

KJihun 2023. 10. 30. 15:27
728x90

 

 

ORM(Object-Relational Mapping)

Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며,

어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이다.

 

장점

  • SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음. (내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경 쓰지 않아도됨)
  • Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임
  • 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가
  • 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리
  • 예를들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환한다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없음

 

단점

  • 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음
  • 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있음

 

JPA

자바에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 

실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.

 

 

 

JPA 장점

 

3. 간편한 객체-관계 매핑

JPA는 자바 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리해준다.

개발자는 복잡한 SQL 쿼리를 직접 작성하지 않고도 객체를 데이터베이스에 저장하고 조회할 수 있다.

 

2. 반복적인 CRUD SQL을 처리

JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.

 

3. 유지보수 용이성

JPA는 데이터베이스 스키마의 변경에 유연하게 대응할 수 있다. 객체 모델을 변경하더라도 JPA가 알아서 데이터베이스 스키마를 갱신해준다.

4. 쿼리 언어(JPQL) 제공

JPA는 객체를 대상으로 하는 쿼리 언어인 JPQL(Java Persistence Query Language)을 제공한다.

이는 SQL과는 다르게 객체를 기준으로 쿼리를 작성할 수 있다.

'CS' 카테고리의 다른 글

[Network] websocket & stomp, 실시간 통신  (0) 2023.11.07
[JPA] N+1  (0) 2023.10.30
[JPA] Propagation  (0) 2023.10.27
[DB] 트랜잭션(Transaction, ACID)  (0) 2023.10.27
[JPA] 영속성 컨텍스트 및 이점(5가지)  (0) 2023.10.27