CS지식/기타

TIL 정리_45(ORM이란?)

ran4 2022. 4. 1. 20:34

 

 

ORM을 알기 전 알아둘 정보


영속성(Persistence)
데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
영속성을 갖지않는 데이터는 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다

Object Persistance : 영구적인 객체
메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여
영구적으로 저장 -> 영속성 부여

 


데이터를 데이터베이스에 저장하는 3가지 방법 
- JDBC
- Spring JDBC (jdbc templete)
- Persistence Framework(Hibernate, Mybatis 등)
 

Persistence Framework 

JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장한다
SQL Mapper와 ORM으로 나눌 수 있다

 

 

ORM이란?
Object Ralational Mapping : 객체 관계 매핑

 

ORM이 생기게 된 배경

"Back to basics(기본에 충실하자)" 


을 지키기 위해서라고 볼 수 있다.

->보다 OOP다운 프로그래밍을 위해 탄생하게 되었다.

ORM (객체 관계 매핑) :

데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다
->객체지향 프로그래밍에서 사용되는 객체를 구현한 클래스와 관계형 데이터베이스에 사용되는
데이터인 테이블이 자동으로 연결되는 것을 의미한다

 

클래스와 테이블은 기존부터 호환 가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생한다
-> ORM을 통해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성 -> 불일치 해결
!! ORM을 사용하면 SQL문을 짤 필요 없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있다 !!

 


장점

  • 객체지향적인 코드를 만들 수 있다
    SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작하기 때문에 객체 모델만 이용해서
    프로그래밍 하는데 집중 할 수 있게한다 
    SQL문은 절차적/순차적 접근이기 때문에 객체지향적 접근만을 신경 쓸 수 있는 ORM을 이용한 환경에서의 
    생산성이 증가한다 
    SQL문을 사용하기위해 필요한 코드가 사라지거나 줄어들며 각종 객체에 대한 코드를 별도로 작성하여 코드의
    가독성을 높일 수 있다

 

  • 재사용, 유지보수, 리팩토링 용이
    ORM은 기존 객체와 독립적으로 작성되어 있고, 객체로 작성되었기 때문에 재활용할 수 있다
    연결되는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다

 

  • DBMS 종속성 하락
    객체와의 관계를 바탕으로 SQL문을 자동으로 생성하고 객체의 자료형 타입까지 사용할 수 있기 때문에
    RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다
    객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간도 줄어든다
    ex) 자바에서 가공하는 경우 equals, hashCode의 오버라이드 등의 자바기능을 이용가능

 



단점

 

ORM이 모든 것을 해결할 수 없다

  • 사용은 편리하지만 그만큼 신중하게 설계해야한다!!(설계가 중요해짐)
  • 프로젝트의 복잡성이 커질수록 난이도 증가, 설계 부실로 잘못 구현될 경우 속도 저하를 비롯한 다양한 문제가 발생
  • 일부 자주 사용되는 규모가 큰 SQL문은 속도를 위해 별도의 튜닝이 필요 -> 결국 복잡한 상황에서는 
    SQL문을 사용해야 할 때가 온다

 

객체-관계간의 불일치

  • 세분성 : 경우에 따라 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다
  • 상속성 : 관계형 데이터베이스(RDBMS)는 상속 개념이 없다
  • 일치 : 관계형 데이터베이스는 기본키(primary key)를 이용하여 동일성을 정의하지만, 자바는 객체 식별(a==b)과 객체 동일성(a.equals(b))을 모두 정의한다
  • 연관성 : 객체지향 언어는 방향성이 있는 객체의 참조를 사용하여 연관성을 나타내지만 관계형 데이터베이스는 방향성이 없는 외래키(Foreign Key)를 이용해서 나타낸다
  • 탐색 : 자바와 관계형 데이터베이스에서는 객체를 접근하는 방법이 근본적으로 다르다 자바 - 그래프형태 -하나의 연결에서 다른 연결로 이동하여 탐색 RDBMS Join을 통해 여러 엔티티 로드&대상 엔티티 선택

 


ORM 프레임워크

 

JPA/Hibernate

Spring에서 사용하는 ORM이다 

 

Sequaelize
promise에 기반한 비동기로 조작하는 Node.js ORM이다

 

Django ORM
파이썬 기반 프레임워크인 Django에서 자체적으로 지원하는 ORM이다

 

 

 

 

 

참고자료 

https://geonlee.tistory.com/207

'CS지식 > 기타' 카테고리의 다른 글

TIL 정리_115(다이어그램)  (0) 2022.07.03
운영체제 명령어 정리(Window&Linux)  (0) 2022.06.20