[JPA] ORM 이란?
ORM
정의
ORM (Object-relational mapping)은 객체와 데이터베이스의 관계를 매핑해 주는 도구이다.
객체와 관계형 데이터베이스 사이의 패러다임의 불일치를 해소해주고 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계할 수 있게 도와준다.
ORM은 객체, 데이터베이스 기술 중간에서 이들을 매핑하는 역할을 수행한다.
필요성
많은 애플리케이션은 객체 지향 언어를 사용해서 작성된다.그리고 애플리케이션에 필요한 데이터를 저장하는 기술로 데이터베이스가 주로 사용된다. 그런데 이 두 기술 사이에는 큰 간극이 존재한다. 때문에 이 둘 사이를 매핑해주는 작업이 요구된다.
각 맴버 변수를 SQL에 직접 매핑해주는 작업이 요구되는 것이다. 그런데 만약 여기서 Member에 새로운 맴버 변수가 생기면 어떻게 될까?
당연히 연관된 SQL도 전부 수정해야 된다…
이뿐만 아니라 기본적인 패러다임의 차이도 존재한다. 객체는 자연스럽게 다른 객체를 참조할 수 있고 자유롭게 객체 그래프를 탐색할 수 있다. 하지만 SQL은 처음 실행되는 결과에 따라 탐색 범위가 제한되게 된다.
위 코드를 보면 알 수 있듯이 처음에 SELECT
를 실행할 때 ORDER를 가져오지 않았기 때문에 Member에서 Order을 가져오면 null이 들어오게 된다. 실제로는 Member가 Order를 가지고 있다고 해도 말이다.
위 예시만 봐도 매핑 작업이 얼마나 귀찮을지 예상이 될 것이다. 이러한 단순 노동을 자동화해주는 친구가 바로 ORM 기술이다.
장점
1. 코드의 가독성이 좋아진다.
ORM은 객체지향 언어의 문법과 메소드를 그대로 사용하기 때문에 코드의 가독성이 높다. 당연히 SQL 쿼리를 직접 작성하는 것보다 메소드를 활용하는 것이 더 직관적이다.
2. 유지 보수가 용이하다.
ORM을 사용하게 되면 데이터베이스의 스키마가 변경됐을 때, 소스 코드의 변경을 최소화할 수 있다. 이러한 변경 사항에 대한 매핑을 ORM이 자동으로 해주기 때문이다.
단점
1. 성능이 조금 떨어진다.
적은 양의 데이터를 처리할 때는 상관없지만 대용량을 처리한다면 성능이 떨어질 수 있다.
정리
이번 포스트에서는 ORM에 대해서 알아봤다. ORM은 객체와 데이터베이스를 자동으로 매핑해주기 때문에 개발자는 비즈니스 로직에 집중하여 코드를 작성할 수 있다. 자바 진영의 ORM 표준은 JPA이다. 다음 시간부터는 JPA에 대해서 정리해보겠다.