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만 자동으로 바뀜