본문 바로가기
책벌레와 벌레 그 사이 어딘가/개념쌓기

[개념쌓기]ORM?

by veganwithbacon 2022. 8. 7.
반응형

💡ORM이란?

            ORM : Object - Realational Mapping

                     -객체와 모델 사이의 관계를 기술하는 도구

                     -MVC 패턴에서 모델(Model)을 기술하는 도구
                     -객체와 데이터베이스의 관계를 매핑해주는 도구

 

          Object : "객체"지향 언어(자바,파이썬)
          Relational : "관계형" 데이터베이스 (H2,MySQL)

  • 백엔드 개발자(Backend Developer) : 웹 서버를 개발하는 개발자
  • DBA (Database Administration) : 데이터베이스 관리자,데이터베이스를 설계하는 일을 맡은 사람

  ORM 사용 이유

 

- OOP(Object-Oriented Programming),객체 지향 프로그래밍  vs Relational Database,관계형 데이터베이스

 - 객체 지향 프로그래밍은 클래스를 이용하고 관계형 DB는테이블을 이용하는데 객체 모델과 관계형 모델 간의 불일치가 존재

 - 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다

 - 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다

 - SQL 문을 직접 작성하지 않고 Entity를 객체로 표현할 수 있다

 - ORM을 이용해 객체를 통해 간접적으로 데이터베이스를 다룬다

 - 이를 통해 DB 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여준다

 - 느슨하게 연결된,테스트에 용이한 애플리케이션을 만들 수 있다.

 

  ORM 장점

💡직관적인 코드 (가독성) + 비즈니스 로직 집중 가능(생산성)

  • SQL QUERY가 아닌 메서드로 데이터를 조작가능
  • 프로그래머가 객체 모델로 프로그래밍 하는 것에 더 집중할 수 있게 도와준다
  • 각 객체에 대한 코드를 별도로 작성해 코드 가독성을 높인다
  • SQL의 절차적,순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다

 

💡재사용 및 유지보수 편리성 증가

  • ORM은 디자인 패턴을 견고하게 하는데 유리
  • ORM은 독립적으로 작성되었고 해당 객체들을 재활용 할수 있다
  • ERD를 보는 의존도를 낮출 수 있다

💡DBMS에 대한 종속성 저하

  • 객체 간 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 프로그래밍 언어의 객체 모델 사이의 간격을 좁힌다
  • 대부분 ORM 솔루션은 DB에 종속적이지 않다
  • 프로그래머는 Object에 집중하여 DBMS를 다루는 큰 작업에도 비교적 적은 리스크와 시간만 소용한다

  ORM 단점

 

💡ORM이 모든 걸 해결해줄 수 없다

ORM이 편리하나 그만큼 신중하게 설계해야한다. 부족한 설계로 잘못 구현할 경우 속도 저하 및 일관성을 무너뜨리는 문제가 발생할 수 있다. 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하여 결국 SQL문을 써야할 수도 있다.

 

💡객체-관계 간의 불일치

다음과 같은 특성에서 객체-관계 간의 불일치가 생긴다

 

💡세분성(Granularity)

경우에 따라 DB에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다

 

💡상속성 (Inheritance)

RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다

 

💡일치(Identity)

RDBMS는 기본키(primary key)를 이용하여 동일성을 정의한다. 그러나 자바는 객체 식별(a==b)과 객체 동일성(a.equals(b))를 모두 정의한다

 

💡연관성(Associations)

객체 지향 언어는 방향성 있는 객체의 참조를 사용해 연관성을 나타내나,RDBMS는 방향성 없는 외래키만을 사용한다

 

💡탐색(Navigation)

자바와 RDBMS에서 객체 접근 방법이 근본적으로 다르다

자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다.

그러나 RDBMS는 일반적으로 SQL문을 최소화하고 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다.

 

 

언어별  ORM 프레임워크 종류

  • JAVA - JPA/Hibernate
  • Node.js - Sequalize
  • Django - 내장 ORM
  • Flask - SQLAlchemy

 


반응형

'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글

[개념쌓기] 쿠키? 세션?  (0) 2022.08.09
[개념쌓기] @DTO @VO  (0) 2022.08.09
[개념쌓기] DI?IOC?  (0) 2022.08.07
[개념쌓기] REST API? RESTFUL API?  (0) 2022.08.03
[개념쌓기] URL?URI?  (0) 2022.08.02

댓글