[DB] ORM(Oject-Relational-Mapping) Framework 이란?Web_Backend/DB2023. 5. 26. 14:34
Table of Contents
ORM(Oject-Relational-Mapping) Framework
💬 ORM(Oject-Relational-Mapping) Framework란 무엇인가요?
더보기
✅ 추상화와 상속 다형성의 특징을 지닌 객체지향과, 데이터 중심구조인 RDB사이에서 발생하는 패러다임의 불일치 문제를 해결하기 위해 개발된 프레임워크로, SQL문이 아닌 메서드로 데이터를 조작합니다. SQL Mapper가 코드상으로는 JDBC API와 SQL을 구분 지었다 하더라도, 논리적으로 강한 의존성이 지속되고 있었습니다. 각각의 DB마다 쿼리문이 다를 경우, 개발자가 각 DB의 쿼리문을 사용할 줄 알아야만 DB를 사용할 수 있는 점을 예로 들 수 있습니다..
ORM Framework란?
📌 객체-관계 매핑.
사물을 추상화시켜 이해하려는 OOP(Object_Oriented Programming)적 사고방식과 DataModel을 정형화하여 관리하려는 RDB 사이를 연결할 계층의 역할로 제시된 패러다임. 단순하게 표현하면, 객체와 관계의 설정이라고 할 수 있음. RDB의 모델을 OOP에 Entity 형태로 투영시키는 방식을 사용.
데이터베이스와 객체지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
- ORM을 이용하면 객체지향적인 코드로 인해 더 직관적이며, 비즈니스 로직에 더 집중할 수 있게 도와준다.
- 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다
- 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드의 가독성을 알려준다
- SQL의 절차적이고 순차적인 접근이 아닌 객체지향적인 접근으로 인해 생산성이 증가한다.
- 재사용 및 유지보수의 편리성이 증가한다.
- ORM은 독립적으로 작성되어 있고, 해당 객체들을 재활용 할 수 있다. 때문에 모델에서 가공된 데이터를 컨트롤러에 의해 뷰에 합쳐지는 형태로 패턴을 견고하게 다지는데 유리하다.
- 매핑정보가 명확해 ERD를 보는 것에 대한 의존도를 낮출 수 있다.
- 종속적이지 않다는 것은 구현 방법 뿐 아니라 많은 설루션에서 데이터 자료형 타입까지 유효하다
- 프로그래머는 Object에 집중함으로써 극단적으로 DBMS를 교체하는 거대한 작업에도 적은 리스크와 시간이 소요된다. 또한 자바에서 가공할 경우 equals, hashCode의 오버라이드 같은 자바의 기능을 이용할 수 있고, 간결하고 빠른 가공이 가능하다.
- DBMS에 대한 종속성이 줄어든다.
- 대표적인 프레임 워크로 Hibernate, sequelize, 이를 JAVA 표준방식으로 정의한 JPA가 있음
ORM Framework의 단점
- 완벽한 ORM만으로 서버를 구현하기는 어렵다
- 사용하기는 편하지만, 설계는 매우 신중하게 해야한다.
- 프로젝트의 복잡성이 커질 경우 난이도 또한 올라갈 수 있다.
- 잘못 구현한 경우 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
- 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는 등 별도의 튜닝이 필요한 경우가 있다.
- DBMS의 고유기능을 이용하기 어렵다.
- 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.
- 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야 하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.
- 세밀함의 불일치
- 하위 타입 문제(RDB에는 상속의 개념이 없기 때문)
- 동일성 문제(JAVA의 경우 Equals로 평가 가능하지만, DB는 PK기준)
- 연관 관계 -FK는 연관의 방향성을 가지지 못함. 따라서 N : N 관계의 경우 Link 테이블을 도입해야 함
- 데이터 검색 - RDB는 한 번에 많이 가져올지(메모리 문제) 빈번하게 데이터를 가져올지(성능 문제) 고민해야 함.
ORM은 개발자를 RBD에서 분리시키는 기술이 아닌, 오히려 개발자에게 높은 RDB지식을 요한다. 이는 객체구조의 설계 시 DB의 스키마를 고려해야 하는 숙제도 주는 것이기 때문이다.
정리
ORM이 없을 때에는 개발자가 DB에 접근하기 위해서 SQL Query를 직접 만들었다. 여기서 문제점은 SQL문법을 숙지해야 하며, 코드와 DB가 서로 종속관계를 맺게 되었다. 이를 해결하기 위해 ORM이 등장하였다.
JPA_Jakarta(Java) Persistence API
- 자바에서 ORM 기술을 사용해 RDBMS를 다루기 위한 인터페이스 표준 명세
- API + JPQL + metadata(+Criteria API)
JPQL_Jakarta(java) Persistence Query Language
- 플랫폼으보부터 독립적인 객체 지향 쿼리 언어
- JPA 표준의 일부로 정의됨
- RDBMS의 엔티티를 다루는 쿼리를 만드는데 사용
- SQL의 영향을 받아 형식이 유사
'Web_Backend > DB' 카테고리의 다른 글
[DB, SQL] 데이터베이스, PostgreSQL설치, SQL구문(SELECT, WHERE, BETWEEN, IN, LIKE, ILIKE, ORDER BY, DISTINCT, COUNT, DATE) (2) | 2024.01.02 |
---|---|
[mysqlDump] DB 합치기.. 그거 어떻게 하는건데.....? feat.. mysqldump (0) | 2023.09.06 |
[DB] RDB 와 NoSQL (0) | 2023.05.26 |
[DB] Primary Key란? (0) | 2023.05.26 |
db 연결용 컨트롤러 패키지 생성 (0) | 2022.03.08 |
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!