티스토리 뷰
1. ORM(Object-Relational Mapping)
- 객체 지향 프로래밍의 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 Mapping 하는 기술을 의미한다.
- 객체 지향 프로그래밍에서 사용할 수 있는 가상의 객체지향 데이터 베이스를 만들어 프로그래밍 코드와 데이터 연결
- 결국? SQL을 사용하지 않고도 DB의 데이터를 쉽게 객체로 만들어 주는것!
- SQL 코드를 직접 입력하지 않고 선언문이나 할당 같은 부수적인 코드가 생략되기 때문에 직관적이고 간단하게 데이터를 조작할 수 있음
- ORM 프레임워크는 ORM의 구조와 구현을 위해 필요한 여러 기능 제공
- ORM을 구현하기 위한 구조와 구현을 위해 필요한 여러 기능들을 제공하는 소프트웨어
- JAVA : JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등
- C++ : ODB, QxOrm 등
- Python : Django, SQLAlchemy, Storm 등
- iOS : DatabaseObjects, Core Data 등
- .NET : NHibernate, DatabaseObjects, Dapper 등
- PHP : Doctrine, Propel, RedBean 등
2. ORM의 장단점
(1) 장점?
- SQL을 사용하지 않고 객체 지향 프로그램 언어를 사용하여 그대로 사용할 수 있다.
- 즉, SQL query 를 쓰지 않고 객체간의 관계를 풀어낼 수 있기 때문에 개발자가 좀더 직관적으로 객체간의 관계를 파악할 수 있다.
- 재 사용 및 유지보수의 편리성이 높고, DBMS에 대한 종속성이 줄어든다.
(2) 단점?
- 완벽하게 ORM을 사용해서 서비스를 구현하기는 힘들다.
- 프로시저(procedure)가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 힘들다.
- 프레임워크가 자동으로 작성하기 때문에 의도대로 작성되었는지 확인할 필요가 있음
- 객체지향적 사용을 고려, 설계한 데이터베이스가 아닌 경우 프로젝트가 크고 복잡할수록 ORM 기술을 적용하기 어려움
- 기존의 기업들은 ORM 고려하지 않은 데이터베이스를 사용하고 있어 ORM에 적합하게 변환하려면 많은 시간과 노력이 필요
3. Python SQLAlchemy
3.1 Core과 ORM의 차이는?
ORM은 말 그래도 Object Relational Mapper, Python 객체로서 데이터베이스의 관계를 나타내는것.
Core은 Query bilder, 이것은 SQL query를 생성해서 progammatic 의미를 제공해주는 목표이다.
일반적으로 query를 만드로 싶으면 Core을 선택하고, MVC스타일을 만들고 model을 만들기 원한다면 ORM을 사용해야 한다고 한다.
<출처>
1. https://www.slideshare.net/ssusercef361/yapp-aa-2-2-sugar-orm
2. http://aosabook.org/en/sqlalchemy.html
3. https://stackoverflow.com/questions/43300886/what-is-the-difference-between-sqlalchemy-core-and-orm
4.
'Programming > DATABASE' 카테고리의 다른 글
[DATABASE] Oracle SQL 개념 정리 - DDL, DML, DCL (0) | 2020.08.25 |
---|---|
[DATABASE/ OracleSQL] Oracle HR 스키마 문제 모음 (0) | 2020.08.24 |
[DATABASE/ OracleSQL] Oracle SQL 시작하기 (0) | 2020.08.23 |
[DATABASE] MongoDB 설치하기 (0) | 2020.02.18 |
[Database] 데이터베이스란? (0) | 2020.02.17 |