O.R.M(Object Relational Mapping) 이란 무엇인가
간단히는 C#의 property / Java의 getter,setter를 이용하여
객체지향프로그래밍(O.O.P)의 객체와 관계형 데이터베이스 간의 Mapping을 지원해주는
Framework 혹은 Tool들을 의미한다.
그렇다면 ORM에는 어떤 것들이 있을까?
대표적으로 아래의 ORM들이 가장 대중적이다.
- MyBatis.
- iBatis.
- JPA.
- Hibernate
이 중 MyBatis, ibatis가 많이 쓰인다고 한다.
그렇다면 ORM들의 장단점은 어떨까
우선 장점에 대해서 알아보자.
1. 개발자로 하여금 좀 더 직관적이고 로직에 집중할 수 있게 도와준다.
- SQL이 아닌 객체에 접근해서 Data를 조작하기 때문에 좀더 직관적이다.
- SQL사용시 필요한 부수적인 코드들을 줄일 수 있다.
- 객체에 관해 코드를 작성하므로 가독성이 높아진다.
2. 코드 재사용성 증 및 유지보수의 편리성이 증가한다.
- Mapping 정보를 명확히 하기 때문에 ERD를 일일히 확인하지 않아도 된다.
- MVC패턴에 활용하기 쉽다.
3. DBMS에 대한 종속성을 줄일 수 있다.
- 개발자는 객체 정의에 집중함으로써 DBMS를 교체하는 등의 작업에서 작업 시간, 리스크를 줄일 수 있다.
4. SQL을 몰라도 독립적으로 개발이 가능하다.
반대로 단점들은 무엇이 있을까
1. 오롯이 ORM만 사용해서 모든 서비스를 구현할 수 없기 때문에 DBMS로 부터 완벽히 독립할 수 없다.
- 필요한 경우 DBMS를 사용해야 하는 상황이 발생한다.
2. ORM으로 인해 프로젝트의 복잡성, 난이도가 증가할 수 있다.
3. 잘못된 사용으로 인해 속도가 느려지거나 기타 문제가 발생할 수 있다.
4. DBMS의 고유 기능을 사용 못하는 경우가 발생한다.
5. 프로시저 사용이 많은 환경에서는 ORM 적용으로 얻는 장점을 활용하기 힘들다.
- 기존의 프로시저를 많이 사용하던 경우, 일일히 객체와 Mapping 시켜줘야 하며,
이 과정에서 비용(리스크, 시간소모 등)이 발생한다.
- 예 : User라는 table에 대해서 Person, Address 라는 객체를 구분해서 생성하는 경우
6. The Object-Relational Impedance Mismatch( 객체와 DBMS의 불일치성 ?)
- Granualrity ( 세분성 )
. 경우에 따라서 DB의 Table 명세보다 객체를 과도하게 만들 수 있다.
-> User라는 Table이 Person, Address라는 클래스로 구분해서 생성하는 경우 등등
- Inheritance ( 상속 )
. ORM에서는 상속 개념을 사용할 수 없다.
- Identity ( 일치 )
. RDBMS에서는 Pk값등으로 일치여부를 판별하지만 자바는 객체주소 비교, 객첵밧 비교를 모두 지원한다.
- Associations ( 연관성 )
. 객체 지향 언어는 Referance를 통해 객체를 참조하지만 RDBMS는 외래키로 객체를 참조한다.
-> 이 경우 쌍방향 참조를 할 때 java는 각 객체가 서로를 참조할 변수를 지녀야 하지만
RDBMS는 외래키만 참조하면 된다.
-> 즉, Java의 경우 방향정을 지니며 RDBMS는 방향성을 지니지 않는다.
- Navigation ( 탐색 / 순회 )
. Java의 경우 객체간의 연결을 통해서 이동하며 탐색/순회 한다
. RDBMS에서는 일반적으로 쿼리를 최적화하여 엔티티를 탐색 및 선택한다.
'기타 상식' 카테고리의 다른 글
FirebaseMessage 란? (0) | 2019.07.31 |
---|---|
멀티 스레드에 관해서 (0) | 2019.07.14 |
LockFree란? (0) | 2017.03.03 |
메모리 거짓 공유란? (0) | 2017.01.13 |
Concurrency와 Parallelism의 차이에 대하여 (0) | 2017.01.12 |