ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORM이란?
    프로그래밍 기초 공부 2022. 12. 25. 00:40

    ORM

    • Object Relational Mapping -> 객체 - 관계 매핑의 줄임말
    • 프로그래밍 언어의 객체와 관계형 DB의 데이터를 자동으로 매칭해주는 도구
    • 객체지향 프로그래밍은 클래스를 사용, 관계형 DB는 테이블을 사용
      • -> 객체 모델과 관계형 모델간에 불일치가 존재
      • -> ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치 해결
    • 중계자 역할
    • MVC 패턴에서 모델을 기술하는 도구

     

     

     

    ORM 등장배경

    • 자바 -> 객체 지향 패러다임으로 만들어짐
    • 데이터 베이스 -> 관계형 DB 패러다임으로 만들어짐
    • 탄생 배경부터가 다른 패러다임을 두고 만들어졌기 때문에 이 두 소프트웨어는 어쩔 수 없는 간극이 생김
    • 이러한 간극은 매우 큰 문제
      1. 프로그래머의 업무는 객체를 CRUD 하는 SQL을 만드는 단순 노동이 됨
      2. SQL에 의존적인 개발을 할 수 밖에 없음
      3. 프로그램을 객체 지향적으로 설계하는데 데이터베이스가 방해됨

     

    -> 이러한 패러다임의 불일치를 해결하고자 나온 기술이 ORM 프레임워크

     

     

    ORM 사용이유

    • DB 접근을 프로그래밍 언어의 관점에서 맞출 수 있음
    • 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치 해결
    • SQL문을 직접 작성하지 않고 Entity를 객체로 표현할 수 있음
    • 객체를 통해 간접적으로 DB를 다룸
    • DB와 프로그래밍 언어 사이의 개념의 간극을 줄여줌

     

    ORM 장점

    완벽한 객체지향적인 코드

    • ORM을 이용하면 SQL Query 가 아닌 메서드로 데이터를 조작할 수 있음
    • 이로써 프로그래머가 객체 모델로 프로그래밍하는 것에 더 집중할 수 있게 도와줌
    • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높임
    • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가

     

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

    • 독립적으로 작성되었고 해당 객체들을 재활용 할 수 있음
      • 디자인 패턴을 견고하게 만드는 데 유리
    •  매핑정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있음

     

    DBMS에 대한 종속성 저하

    • 객체 간 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 프로그래밍 언어의 객체 모델 사이의 간격을 좁힘
    • 대부분의 ORM 솔루션은 DB에 종속적이지 않음
      • 종속적이지 않음 -> 구현 방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효
    • 프로그래머는 Object에 집중하므로 DBMS를 다루는 큰 작업에도 비교적 적은 리스크와 시간만 소요할 수 있음
      • 또한, JAVA에서 가공할경우 equals, hasdCode의 오버라이드 같은 자바의 기능을 이용할 수 있음
      • 간결하고 빠른 가공 가능

     

     

    ORM 단점

    완벽한 ORM으로만 서비스를 구현하기 어려움

    • 사용하기는 편리하지만 설계는 신중하게 해야함
    • 프로젝트의 복잡성이 커질 경우 난이도 또한 올라갈 수 있음
    • 잘못 구현된 경우 일관성이 무너지는 문제점이 생길 수 있음
    • 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있음
    • DBMS의 고유 기능을 사용하기 어려움

     

    프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어려움

    • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 발생 할 수 있음

     

     

    ORM 사용 시 객체 - 관계 간의 불일치

    세분성(Granularity)

    • 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있음
    • ex) 어떤 사용자의 세부 사항에 대해 데이터를 저장
    • 객체지향 프로그래밍에서는 코드 재사용과 유지보수를 위해 Person과 Address라는 두 개의 클래스로 나눠서 관리가  능 그러나, 데이터베이스에는 person이라는 하나의 테이블에 사용자의 세부사항을 모두 저장할 수 있음
      • -> 이 상황에서 Object는 2개, Table는 1개가 되어 개수가 달라지는 것

     

    상속성(Inheritance)

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

     

    일치(Identity)

    • RDBMS는 'sameness'라는 하나의 개념을 정확히 정의하는데, 바로 기본키를 이용하여 동일성을 정의
    • 그러나 자바는 객체 식별(a == b)과 객체 동일성(a.equals(b))을 모두 정의
    • 즉, RDBMS에서는 PK가 같으면 서로 동일한 record로 정의하지만, Java에서는 주소값이 같거나 내용이 같은 경우를 구분해서 정의

     

    연관성(Associations)

    • 객체지향 언어는 객체 참조를 사용하는 연관성을 나타내는 반면, RDBMS는 연관성을 ‘외래키’로 나타냄
    • ex) 자바에서의 객체 참조는 방향성이 있기 때문에, 양방향 관계가 필요한 경우 연관을 두 번 정의해야 함
      • -> 서로 Reference를 가지고 있어야 함
        • 그러나, RDBMS에서는 FK와 Join으로 자연스럽게 방향성이 없는 연결이 이루어짐

     

     

    탐색(Navigation)

    • 자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다름
    • 자바는 그래프 형태로 하나의 연결에서 다른 연결로 이동하며 탐색
    • ex) user.getBillingDetails().getAccountNumber()의 형식
      • 그러나 RDBMS에서는 일반적으로 쿼리 수를 최소화하고 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색

    '프로그래밍 기초 공부' 카테고리의 다른 글

    JWT란?  (0) 2022.12.26
    온프레미스 vs 클라우드  (0) 2022.12.26
    해시란  (0) 2022.12.04
    인증과 인가란?  (0) 2022.12.02
    대칭키, 비대칭키란?  (0) 2022.12.02
Designed by Tistory.