ORM
ORM
Object Relation Mapping의 약자로 ORM이라고 불린다.
Object
란 자바 코드의 도메인 모델을 의미하며,
Relation
이란 데이터베이스 테이블을 의미한다.
ORM은 애플리케이션의 클래스와 SQL 데이터베이스 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여 자바 애플리케이션의 객체를 SQL 데이터베이스 테이블에 자동으로 영속화 해주는 기술이다.
매핑정보를 기술한 메타데이터는 도메인 모델 내의 프로퍼티가 어떤 어떤 테이블의 어떤 컬럼에 매핑이 되는가를 기술하는 데이터이다.
Account account = new Account("hjhng", "password");
accountRepository.save(account);
Jpa, Hibernate와 같은 ORM을 사용하는 궁극적인 목표는 위와 같은 방법으로 코딩하는 것이다.
그 이유는 아래와 같다.
- 도메인 모델없이 코딩하는 것(jdbc를 직접 사용하는 코드)에 비해 도메인 모델 기반 코딩이 훨씬 더 객체지향적 프로그래밍을 하기에 유용하다.
- 이 말인 즉슨, 각종 디자인 패턴을 적용하기 쉽고, 코드 재사용성을 증대시키기 쉽다.
- 또한 비즈니스 로직 자체에 집중하기 쉽다.
- 테스트 코드를 짜기 쉽기에 유지보수하기 쉽다.
- ORM의 장단점
- 장점 : 생산성, 유지보수성, 성능, 벤더 독립성(방언-dialect)
- 단점 : 학습비용
성능에 장점이라는 맥락에 논의점이 있을 수 있다.
- 실제 Hibernate가 생성해낸 query는 우리가 직접 짠 쿼리보다 느릴 수 있다.
- *하지만 여기서 말하는 성능은 다른 쿼리의 속도를 의미하는 것이 아니다.
- hibernate는 relation과 object사이에 캐시가 있다. (1차 캐시)
- 따라서 한 트랜잭션 내에서 조회하고자 하는 객체가 캐싱되어 있을 경우 조회 쿼리를 DB에 보내지 않으며, 캐싱되어 있는 객체를 같은 값으로 업데이트 할 경우 업데이트 쿼리를 DB에 보내지 않는다. (변경 감지)
댓글남기기