ORM

inthyes·2023년 6월 28일
0

DB

목록 보기
4/4

ORM(Object Relational Mapping)

: 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것

  • 객체 지향 프로그래밍 : 클래스 사용
  • 관계형 데이터베이스 : 테이블 사용 → 객체 모델과 관계형 모델 간의 불일치 존재

ORM 장단점

  • 장점
    1. 객체지향적인 코드로 인해 더 직관적이고 로직에 집중할 수 있도록 함
    2. 재사용 및 유지보수의 편리성이 증가
    3. DBMS에 대한 종속성 감소
  • 단점

ORM 프레임워크

  • JAVA : JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등
  • C++ : ODB, QxOrm
  • Python : Django, SQLAlchemy, Storm 등
  • iOS : DatabaseObjects, Core Data 등
  • .NET : NHibernate, DatabaseObject, Dapper 등
  • PHP : Doctrine, Propel, RedBean 등

JPA : 자바 ORM기술에 대한 API 표준 명세를 의미

  • JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM프레임워크를 사용해야함

JPA 동작방법

: JAVA가 JDBC API에 명령을 내리는 것이 아니라 JPA가 JDBC API를 사용해서 DB와 통신하고 SQL을 호출 및 반환

INSERT

  1. entity분석
  2. insert sql 생성
  3. JDBC API를 사용하여 SQL을 DB에 보내서 INSERT동작 실행

SELECT

  1. entity의 매핑 정보를 바탕으로 적절한 select sql 생성

  2. JDBC API를 사용하여 sql을 DB에 보내서 select동작 실행

  3. DB로부터 결과 반환

  4. 결과를 객체에 모두 매핑

    → 쿼리가 JPA를 만들어 주기 때문에 object와 RDB간의 패러다임 불일치를 해결할 수 있음

Hibernate : JPA를 구현한 ORM 프레임워크

  • JPA 인터페이스의 실제 구현부 담당

HQL(Hibernate Query Language)

  • SQL과 매우 비슷하며 추가적인 컨벤션을 정의
  • 완전히 객체 지향적이며 상속, 다형성, 관계 등의 객체지향의 강점 보유
  • 자바 클래스와 property 이름을 제외하고는 대소문자 구분
  • 쿼리 결과로 객체 반환, 프로그래머에 의해 생성되며 직접적으로 접근
  • SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능 제공
  • 여러 테이블을 작업할 때 명시적인 join 요구하지 않음

Hibernate 장단점

  • 장점

    1. 객체지향적으로 데이터를 관리 가능

      → 비즈니스 로직에 집중할 수 있으며 객체지향 개발이 가능

    2. 테이블 생성, 변경, 관리가 쉬움

    3. 로직을 쿼리에 집중하기 보다는 객체 자체에 집중할 수 있음

  • 단점

    1. SQL보다 다루기 어려움
    2. 의도치 않은 동작으로 인해 데이터 손실 발생 가능성 존재
    3. 성능상 문제가 있어 과부하 가능성 존재

Hibernate 동작방법

  1. Java Application내 Hibernate의 Configuration파일과 Hibernate XML Mapping파일을 사용하여 데이터베이스에 대한 특정 작업을 수행하는 지속성 논리를 작성하여 특정 클래스의 객체 생성
  2. Hibernate 프레임워크 내부의 Session Factory, Session, Transaction 등과 같은 많은 객체를 사용하여 Java Application과 상호작용
  3. JDBC, JTA, JNDI와 같은 기존 Java API를 통해서 데이터베이스로 이동하여 지속성 논리를 수행하는 상호작용
  4. DB와 상호작용

Hibernate 워크플로우

Untitled

DBMS VS Hibernate

JDBCHibernate
코드에서 SQL 문 사용코드에서 SQL 문 사용하지 않음
사용된 SQL이 특정 데이터베이스인 경우 다른 데이터베이스를 사용하면 코드 문제 발생SQL을 사용하지 않기 때문에 다른 데이터베이스로 쉽게 마이그레이션 가능
데이터베이스 테이블을 개체에 매핑하기 어려움데이터베이스 테이블을 개체에 쉽게 매핑
connection, statement, resultset에 대한 보일러플레이트 코드 반복 필요보일러플레이트 코드가 제거되어있음
데이터베이스 테이블이 수정되면, 즉 열이 추가되거나 삭제되면 테이블과 일치하도록 코드를 수정해야 합니다.코드는 데이터베이스 테이블이 수정되더라도 많은 수정이 필요하지 않습니다.
코드가 객체지향적이지 않음코드는 객체지향적임
테이블을 직접 쿼리를 수행하므로 성능이 우수JDBC 위에 있기 때문에 JDBC에 비해 속도가 느림

🏹Boilerplate code : 모든 코드를 작성하기 위해 항상 필요한 부분

Boilerplate code 구성 요소

  • mport : 필요한 코드를 불러들이는 부분
  • Component : 현 페이지를 구현하는 코드
  • StyleSheet : 페이지의 객체를 꾸미기 위한 style
  • Export : 현 Javascript 코드를 타 Javascript에서 접근하기 위한 부분

ODB(C++ ORM 프레임워크)

0개의 댓글