Tiny Star

📊ORM

[ORM] ORM(Object-Relational Mapping)의 개념

청크 2024. 4. 12. 18:30

요새 Django&Python으로 프로젝트를 하며 접하게 된 SQLAlchemy...

 

팀장님께서 갑자기 던지신 질문.

 

"SQLAlchemy가 뭐야? "

 

처음 들어보는 놈이라 이 놈이 프레임워크인가 싶었는데 SQL이 붙은거보니 DB관련 머시기 같고...

" 프레임워크...는 아니고......DB 관련한..... (?) (⊙_⊙)?공부해오겠습니다."

"ORM이야"

 

우물쭈물 긴장해서 엉덩이가 축축ㅋㅋㅋㅋㅋㅋㅋ해진김에....

SQLAlchemy를 계속 사용해야 하는 김에.... 정리해보는 ORM의 개념과 활용...인데

정리하다보니 자바에서 JPA-Hibernate가 ORM이었다는걸 이제 깨달은 나.

 

진짜 그동안 멍청이처럼 코드만 짰다는 사실에 울고간다. 제일 되기 싫었던 가짜개발자가 나야 나!

어디가서 JPA 써봤단 이야기 하면 안되겠다..ㅜㅜ

 

장고랑 플라스크의 개념을 잡으면서 작성한 포스팅에도 존재하는 ORM.

그치만 머리에 남아있는게 없으니 다시한번 정리해보자.


ORM(Object-Relational Mapping)

먼저 ORM은 Object-Relational Mapping의 약자로, 객체 지향 프로그래밍 언어에서 사용하는 데이터들을

관계형 데이터베이스의 테이블과 연결할 수 있도록 도와주는 프로그래밍 기법이다.

 

쉽게 이야기하면 개발자가 직접 데이터베이스를 다루는 SQL 명령어를 사용하지 않고,

프로그래밍 언어로 작성한 객체를 통해 데이터베이스의 데이터를 조작할 수 있도록 한다.

 

이로 하여금 코드의 가독성이나 유지보수성 향상에도 도움이 되고,

데이터 모델을 더 직관적으로 표현이 가능하며 데이터베이스 설계 변경 시에 코드에 미치는 영향도 최소화 할 수 있다.


ORM의 종류

각 프로그래밍에 맞는 여러 ORM 라이브러리가 존재하는데, 대표적으로 몇가지 소개를 해보자면

 

JPA (Java Persistence API) + Hibernate

JAVA의 ORM은 JPA와 Hibernate가 있다.

 

두 가지가 종종 혼용되어 설명된 포스팅을 많이 봤는데, 기본 개념을 설명하면 엄연히 다르다.

JPA는 자바에서 제공하는 ORM을 위한 공식 표준 인터페이스로,

데이터베이스와 객체 간의 매핑을 위한 표준 방식을 제공하고 개발자가 ORM기술을 사용하여 데이터베이스와

상호작용할 수 있도록 API와 어노테이션을 정의한다.

 

즉, JPA는 ORM 구현을 위한 명세일 뿐 구현체가 아니다.

 

반면 Hibernate는 JPA의 명세의 구현으로, JPA의 표준을 따르는 ORM라이브러리 중 하나이다.

JPA를 사용하여 데이터베이스와 객체를 매핑하는 실제 방법을 제공하며,

JPA를 포함한 다양한 추가 기능, 자체적인 기능 및 확장 등을 포함하고 있다.

 

정리해보면 JPA는 이론적인 표준, Hibernate는 이 표준을 실제로 구현한 라이브러리다.

+ Hibernate는 JPA 이전부터 존재하던 ORM 프레임워크인데 JPA가 등장한 후 JPA 명세를 지원하도록 확장된 케이스로,

JPA 명세에 포함되지 않는 고유의 기능들을 추가로 제공하고 있다.

따라서 JPA를 사용하는 것과 Hibernate를 직접 사용하는 것 사이에는 세부적인 기능과 확장성에서 차이가 있을 수 있다.

 

+ Hibernate가 가장 유명한 것 같지만 HibernateEclipseLink, OpenJPA 같은 다른 JPA 구현체도 있다고 한다.

 

 

SQLAlchemy, Django ORM

두가지 모두 Python에서 사용되는 ORM 라이브러리이다.

 

우선 SQLAlchemy는 Python용 ORM 라이브러리로, 데이터베이스와의 상호작용을 추상화하여 

개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스를 조작할 수 있게 해주는 ORM 기능에 충실하다.

 

이 라이브러리는 Core와 ORM 두 가지 주요 구성 요소를 제공한다.

 

Core는 SQL 표현언어로, 데이터베이스와의 저수준 상호작용을 제공하며ORM은 고수준 객체 관계 매핑 기능을 제공하여 Python 클래스와 데이터베이스 테이블 간의 매핑을 관리하는 요소이다.

 

SQLAlchemt의 장점은 유연성과 확장성이 뛰어나 복잡한 쿼리나 다양한 데이터베이스 작업을굉장히 자유롭게 처리할 수 있다.또 강력한 쿼리 구성 능력을 제공하여 세밀한 데이터베이스 조작이 가능하고 다양한 데이터베이스 시스템을 지원하지만

 

설정과 초기 구성이 복잡하며 학습 곡선이 높은 편으로, 간단한 프로젝트에 사용할 때는 과도하게 복잡해질 수 있다.

 

Django ORM은 Django 웹 프레임워크에 내장된 ORM으로 장고 프로젝트에 일부 자동으로 포함이 되고,이 ORM을 사용한다면 장고 모델을 정의할 때 간단하게 데이터베이스 스키마를 생성하거나 조작할 수 있다.

 

즉, 장고 프레임워크가 긴밀한 통합이 되어 있어 웹 애플리케이션 개발 시 빠르고 효율적인 개발이 가능해지고간단하고 직관적은 API를 제공하여 쉽게 접근/사용이 가능하다.추가로 자동으로 데이터베이스 스키마 마이그레이션을 관리하는 기능이 내장되어 있기도 하다.

 

하지만 SQLAlchemy랑 비교했을 때 쿼리의 세밀한 조절이 다소 제한적이고,Django 웹 프레임워크 내에서 사용되기 때문에 다른 프레임워크 환경에서는 사용이 어렵다는 단점이 있다.

 

정리해보면 폭넓게 사용되고 쿼리의 세밀한 조절이 가능한 SQLAlchemy.간편하고 빠른 개발을 돕고 쉽게 접근이 가능한 DjangoORM 정도의 차이가 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'📊ORM' 카테고리의 다른 글

[ORM] 즉시로딩(EAGER)과 지연로딩(LAZY)  (1) 2024.04.18