ORM

일상 회고록·2024년 1월 8일
0
post-custom-banner

JPA를 사용하며 서칭서칭 중에 계속해서 밟히는 한 단어…ORM

OMR은 들어 봤어도 ORM?은 뭘까요?

바로 알아보도록 하겠습니다.

ORM (Object-Relational Mapping)

  • ORM이란 객체와 관계형 데이터베이스간의 매핑을 의미합니다.
  • 즉, 객체지향 프로그래밍의 객체라는 개념을 구현한 클래스와 RDB에서 사용되는 데이터인 테이블매핑하는 것입니다.

ORM이 무엇인지는 대충 알겠는데..그럼 왜 ORM을 사용하고, JPA와는 무슨 관계일까요?

1. ORM을 사용하는 이유

  • ORM을 사용하면 RDB를 조작할 때 사용하는 SQL Query가 아닌 프로그래밍 언어로 데이터 조작이 가능합니다.
  • ORM을 사용해서 SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현 할 수 있습니다.
  • ORM을 사용해서 객체를 통해 간접적으로 데이터베이스를 다룹니다.
  • 예를 들어, JAVA를 사용하는 경우 Member 테이블의 모든 데이터를 조회한다고 가정해봅시다
    1. ORM을 사용하지 않는 경우

      SELECT * FROM Member;

      SQL Query를 작성 후 실행하면 된다.

    2. ORM을 사용한 경우

    • RDB상의 Member 테이블과 매핑된 객체를 member라고 하자

      member.findAll();

      즉, ORM를 사용함으로서 개발 언어인 Java로 RDB상의 데이터(테이블)를 조회할 수 있습니다.

오😮😮😮

SQL Query가 어렵거나 그런 것은 아니지만, ORM를 사용하면 개발 언어를 통해 직관적인 코드로 데이터를 조작할 수 있는 것 같습니다.

2. 객체-관계 간의 불일치

Java뿐 아니라 대부분의 언어의 클래스(객체)와 RDB의 테이블은 기존부터 서로의 호환 가능성을 두고 만들어진 것은 아니기 때문에 불일치가 발생한다.

불일치설명
세분성 (Granularity)경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다
상속성 (Inheritance)RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다
일치 (Identity)RDBMS는 기본키(primary key)를 이용하여 동일성을 정의한다.그러나 자바는 객체 식별(a==b) 과 객체 동일성(a.equals(b)) 을 모두 정의한다
연관성 (Associations)객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해서 나타낸다
탐색 (Navigation)자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다.자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색하지만RDBMS는 일반적으로 SQL문을 최소화하고 JOIN 을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다

위와 같은 불일치들을 ORM을 통해 객체간의 관계를 파악한 후 SQL문을 자동 생성하여 불일치를 해결합니다.

따라서 ORM을 사용하면 SQL문 작성 없이 객체와의 매핑을 통해 데이터베이스를 조작할 수 있습니다.

3. ORM의 장단점

장점

  • 객체지향적인 직관적인 코드(가독성)와 비즈니스 로직 집중 가능(생산성)
    • SQL문이 아닌 메소드를 통해 데이터베이스를 조작할 수 있으므로 개발자는 객체 모델만 이용하여 개발을 하는데 집중
    • 객체마다 코드를 별도로 작성하기 때문에 코드 가독성 향상
    • SQL의 절차적이고 순차적인 접근이 아닌 객체지향적인 접근으로 인해 생산성 증가
  • 재사용 및 유지보수 편리성 증가
    • ORM은 독립적으로 작성되고, 해당 객체의 재활용이 가능
    • ORM은 디자인 패턴을 견고하게 만드는데 유리
  • DBMS에 대한 종속성 감소
    • 객체 간 관계를 바탕으로 SQL을 자동 생성 → RDBMS의 데이터 구조와 프로그래밍 언어의 객체 모델 사이 간격 감소
    • 개발자는 Object에 집중함으로 극단적으로 DBMS를 교체하는 큰 작업에도 적은 리스크와 시간이 소요

단점

  • 완벽한 ORM으로만 서비스를 구현하기 어려움
    - 사용이 편리한 만큼 설계를 꼼꼼하고 신중하게 해야한다
    - 프로젝트의 복잡성이 커지면 난이도 또한 증가

4. ORM 프레임워크

  • JPA / Hibernate
    • JPA(Java Persistence API)는 Java의 ORM 기술 표준으로, 인터페이스의 모음이다
    • 이러한 JPA 표준 명세를 구현한 구현체가 Hibernate
  • Sequelize
    • Sequelize는 Postgres, MySQL, MariaDB, SQLite 등을 지원하는 Node.js의 모듈
    • Node.js의 ORM 라이브러리
  • Django ORM
    • 파이썬 기반 프레임워크인 Django에서 자체적으로 지원하는 ORM
profile
하고 싶은 것들이 많은 개발자입니다
post-custom-banner

0개의 댓글