ORM이란 JPA의 기술 표준으로써, Object-Relational Mapping 이라는 뜻으로 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)해준다.
기술적으로 보면 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화해준다고 볼 수 있다.
그렇다면 영속성이란 무엇일까?
데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성이다.
기존의 영속성이 없는 데이터는 메모리 내에서만 존재하고 프로그램 종료 시 사라진다.
ORM이 객체에게 영속성을 부여해준다는 것까지는 알겠는데 그렇다면 ORM은 어떤 상황에 사용하면 좋을지 장단점을 알아보자!
객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해 준다.
패러다임의 불일치: 데이터베이스는 데이터 중심으로 구조화 돼있어 객체의 상속, 다형성 같은 개념이 없기 때문에 서로 지향하는 점이 다른데 이 점을 패러다임의 불일치라고 한다.
Query와 같이 필요한 선언문이나 할당 등의 부수적인 코드가 줄어 객체에 대한 코드를 별도로 작성해 코드의 가독성을 높일 수 있다.
메서드를 통해 DB를 조작할 수 있어서 개발자가 비즈니스 로직을 구성하는 데만 집중할 수 있다.
내부적으로 쿼리를 생성하여 DB를 조작하지만 개발자는 신경 쓰지 않아도 된다.
매핑정보가 Class로 명시되어 있어 ERD(Entity Relationship Diagram)를 보는 의존도를 낮출 수 있고 유지/보수 및 리팩토링에 유리
예를 들어 MySQL 데이터베이스 사용 중 PostgreSQL로 변환 시 쿼리를 새로 짜야 하는 경우가 생김. 이런 경우 ORM을 사용하면 쿼리를 수정할 필요가 없다.)
객체지향적 접근만 고려하면 되기 때문에 객체지향적인 코드 작성으로 생산성이 증가한다.
학습 비용이 비싸다.
설계가 잘못된 경우 속도가 저하될 수 있고 일관성을 무너뜨릴 수 있다.
더 빠른 속도를 위해서는 별도의 튜닝이 필요하기 때문에 결국 SQL 문을 써야 할 수도 있다.