오늘부터 공부한다
ORM이란? 본문
ORM
Object Relational Mapping(객체-관계 매핑)이라 불리는 이것은
객체와 관계형 데이터베이스의 데이터를 자동으로 연결(매핑)해주는 것을 말한다
- 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
- 객체 모델과 관계형 모델 간에 불일치가 존재한다
- ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
데이터베이스 데이터 <- 매핑 -> Object 필드
이것은 Persistant API라고도 할 수 있다
Ex) JPA, Hibernate 등
ORM의 장점
완벽한 객체지향적인 코드
ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어서 객체 모델만 이용해서 프로그래밍을 하는데 집중할 수 있게 한다.
SQL문을 사용하면서 샅이 선언한 선언문, 할당, 종료같은 부수적인 코드가 사라지거나 줄어들며, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다.
객체적인 접근과 SQL의 절차적/순차적 접근이 혼재되어있던 기존 방식과 달리 오직 객체지향적 접근만 고려하면 되기에 생산성이 증가한다.
단점
완벽한 ORM으로만 서비스를 구현하는 것이 어렵다.
사용하기는 편하지만 설계를 신중하게 해야한다.
프로젝트의 복잡성이 커질 경우 난이도가 올라갈 수 있다.
잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너질 수 있다.
프로시저가 많은 시스템에서는 다시 객체로 바꾸어야 하기 때문에 생산성 저하나 리스크가 발생할 수도 있다.
단점2 객체-관계 간의 불일치
세분성(Granularity)
경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클레스를 가진 모델이 생길 수 있다.
상속성(Inheritance)
RDMS는 객체지향 프로제래밍 언어의 특징인 상속 개념이 없다.
일치(Identity)
RDMS는 기본키를 이용하여 동일성을 제공한다.
하지만 자바는 객체식별(a==b)과 객체 동일성 (a.equals(b))을 모두 정의한다
연관성(Associations)
객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDMS는 방향성이 없는
외래키를 이용해서 나타낸다
탐색(Navigation)
자바와 RDMS에서 객체를 접근하는 방법이 기본적으로 다르다.
자바는 그래프 형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다.
그러나 RDMS에서는 일반적으로 SQL문을 최소화하고 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다.
'데이터베이스' 카테고리의 다른 글
데이터베이스 BCNF란? (0) | 2019.11.08 |
---|---|
데이터베이스 이상 현상(Anomaly) (0) | 2019.10.15 |
데이터베이스 정규화 (0) | 2019.10.15 |
무결성 제약조건 (0) | 2019.10.11 |
트랜잭션(Transaction) 내용 추가 및 기타 (0) | 2019.10.08 |