본문 바로가기
개발/JAVA

ORM

by 욤냠냠냠 2023. 3. 8.

ORM(Object Relation Mapping)이란?

객체(Object)와 DB의 테이블을 Mapping 시켜 RDB(관계형 데이터베이스)을 객체지향적으로 사용하게 해주는 기술.

RDB와 객체는 호환을 염두에 두고 만들어진게 아니기때문에 자연스럽게 불일치가 발생한다.이럴때 ORM을 사용하여 객체의 관계를 바탕으로 SQL문을 자동적으로 생성 불일치를 해결한다.

따라서 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.


✨데이터베이스 데이터 <—매핑—> Object 필드
✨ ORM은 Java 진영에 국한된 기술은 아니다 .

 

그렇다면 불일치가 일어나는 이유가 무엇일까?

위에서 설명했듯이, 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것은 아니기 때문에 아래와 같은 불일치가 발생한다

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

 

✨ RDB와 RDBMS는 다른 개념이다 . RDB는 데이터베이스의 구조와 데이터의 형태를 나타내는 개념이고, RDBMS는 RDB를 생성, 수정, 관리, 제어하는 소프트웨어의 종류를 나타내는 개념이다.

 

Java에서 사용하는 대표적인 ORM

  • JPA와 그의 구현체 Hibernate가 있다.
  • JPA 등장 전엔 Mybatis 라는 Object Mapping 기술을 이용하였지만,
  • Java 클래스 코드와 직접 작성한 SQL 코드를 Mapping 시켜주어야 하기 때문에 직접 SQL 코드를 입력 하지않아도 되는 JPA를 많이 쓰고, 쓰려고 하는 추세이다.

ORM의 장점

 

- 객체 지향적인 코드로 인해 더 직관적이고, 비즈니스 로직에 더 집중할 수 있게 도와줍니다.
      ORM을 이용하면 SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있어 개발자가 객체 지향 프로그래밍하는 데 집중할 수 있도록 도와줍니다.
      선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어듭니다.
      각종 객체에 대한 코드를 별도록 작성하기 때문에 코드의 가독성을 올려줍니다.
      SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가합니다.

 

재사용성 및 유지보수의 편리성이 증가합니다.
      ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용할 수 있습니다.
      이로 인해 모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리합니다.
      매핑정보가 명확하여 ERD를 보는 것에 대한 의존도를 낮출 수 있습니다.

 

- DBMS에 대한 종속성이 줄어듭니다.
      대부분 ORM 솔루션은 DB에 종속적이지 않습니다.
      개발자는 Object에 집중함으로써 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요됩니다.
      또한 자바에서 가공할 경우 equals, hashCode의 오버라이드 같은 자바의 기능을 이용할 수 있고, 간결하고 빠른 가공이 가능해집니다.

 

ORM의 단점

- 완벽한 ORM으로만 서비스를 구현하기가 어렵습니다.
      사용하기는 편하지만 설계는 매우 신중하게 해야합니다.
      프로젝트의 복잡성이 커질 경우 ORM 구현 난이도가 증가 할 수 있습니다.
      잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길수 있습니다.


프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵습니다.
      이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔야함, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있습니다.

 

✨ 프로시저(Stroed Procedure)란? DB 내부에 저장된 일련의 SQL 명령문들을 하나의 함수처럼 실행하기 위한 쿼리의 집합. 즉, DB에 대한 작업을 정리한 절차를 RDBMS(관계형 데이터 베이스 관리 시스템)에 저장한 쿼리의 집합이다. 영구저장모듈이라고도 불린다. 여러 쿼리를 하나의 함수로 묶은 것

 

📌 참고

 

더보기

https://dev-coco.tistory.com/73

 

[DataBase] ORM(Object Relational Mapping)의 개념

ORM이란? Object-Relational Mapping 즉, 객체와 관계형 데이터베이스 매핑의 줄임말입니다. 우리가 OOP(Object Oriented Programming)에서 쓰는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는

dev-coco.tistory.com

https://gmlwjd9405.github.io/2019/02/01/orm.html

 

[DB] ORM이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://geonlee.tistory.com/207

 

ORM(Object Relational Mapping)이 뭘까? 🤔

ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relatio

geonlee.tistory.com

https://hahahoho5915.tistory.com/47

 

[간단정리] ORM(Object-Relational Mapping) 이란?

개요 ORM(Object-Relational Mapping) 이란 무엇인가 알아보기 내용 Persistence(영속성) - 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말합니다. - 영속성을 갖지 않는 데이터

hahahoho5915.tistory.com

https://velog.io/@sweet_sumin/%EC%A0%80%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80-Stored-Procedure

 

저장 프로시저 (Stored Procedure)

DB 내부에 저장된 일련의 SQL 명령문들을 하나의 함수처럼 실행하기 위한 쿼리의 집합. 즉, DB에 대한 작업을 정리한 절차를 RDBMS(관계형 데이터 베이스 관리 시스템)에 저장한 쿼리의 집합이다. 영

velog.io

 

'개발 > JAVA' 카테고리의 다른 글

다형성  (0) 2023.04.18
오버로딩 과 오버라이딩  (0) 2023.04.11
JVM(Java Virtual Machine)?  (4) 2023.03.08