아카이브

[스프링 데이터 JPA] ORM 개요 본문

Spring/스프링 데이터 JPA

[스프링 데이터 JPA] ORM 개요

주멘이 2021. 1. 10. 20:37

ORM(Object Relation Mapping)

ORM은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여, 자바 애플리케이션의 객체를 SQL 데이터베이스의 테이블에 자동으로 (또 깨끗하게) 영속화 해주는 기술입니다.

/* 도메인 모델을 사용하는 코드를 Object 라고 함 */
/* Connection을 사용한 방법보다 훨씬 깔끔하게 작성할 수 있다. */

Account account = new Account(“keesun”, “pass”);
accountRepository.save(account);

 

JDBC 대신 도메인 모델을 사용하는 이유? 

  • 객체 지향 프로그래밍의 장점을 살릴 수 있다.
  • 여러가지 디자인 패턴도 적용할 수 있다.
  • 코드의 재사용성도 높일 수 있다.
  • 비즈니스 로직 구현과 테스트 코드 작성이 용이하다.

장점

  • 생산성: 맵핑만 하면 데이터 입 출력이 정말 쉬워짐. (MyBatis와 같은 Mapper 방식은 컬럼이 추가될 시 수정해야 할 부분들이 상당히 많았다.)
  • 유지보수성: 코드가 굉장히 간결해지고 코드양이 줄어 유지보수성이 높아짐(Entity Class 정보만 수정하면 된다)
  • 성능
    • 논쟁의 여지가 있음 SQL단건만 보면 ORM이 더 느릴수있음
    • Hibernate는 객체와 테이블에 데이터 사이에 캐시가 존재하므로 불필요한 쿼리를 사용하지 않음(1차 캐시)
    • 하나의 트랜잭션 내에서 여러 요청이 일어나도 정말로 데이터베이스에 반영해야되는 시점에만 반영을함(Write Behind)
    • 데이터가 같거나 반영할 필요가 없다면 반영하지 않아서 성능에 장점이 있음(Dirty Checking)
    • 성능 최적화를 위한 여러가지 기능들을 제공함
  • 벤더 독립성: Hibernate가 어떠한 데이터베이스에 맞게 SQL을 생성해야 되는지만 알려주면 됨
    • 데이터베이스가 바뀌어도 코드가 변경되지 않음
    • Hibernate가 데이터베이스 sync를 할때 객체를 영속화 할때 발생하는 SQL만 자동으로 바뀜