ORM과 패러다임의 불일치에 대해 알아보자(+JPA)

JINNI·2024년 5월 18일
0

[TIL] Java+Spring

목록 보기
8/15
post-thumbnail

ORM(Object Relation Mapping)

ORM이란 OOP(Object-Oriented Programming)가 갖고 있는 객체와 RDB(Relational Database)가 갖고 있는 패러다임의 불일치(Object-relational impedance mismatch)를 해소하기 위해 나온 기술이다.

  • node.js의 ORM : typeorm, sequalize, prisma
  • python의 ORM : SQLAlchemy, Django ORM
  • Java의 ORM : JPA

패러다임의 불일치

함께 작동해야 하는 두 시스템이나 구성 요소가 통신을 어렵게 하거나 비효율적으로 만드는 서로 다른 데이터 모델, 구조 또는 인터페이스를 가질 때 발생하는 문제를 설명하기 위해 사용되는 용어

  • 데이터베이스의 맥락에서 Impedance mismatch는 애플리케이션 코드에 사용되는 OOP 모델과 DBMS에 사용되는 관계형 모델 간의 불일치를 의미한다. OOP 모델은 데이터를 속성과 메서드가 있는 객체로 표현하도록 설계되었지만, 관계형 모델은 데이터를 열과 행이 있는 테이블로 표현했기 때문이다.
  • 객체를 DB의 테이블에 매핑하거나 그 반대의 변환을 할 때 복잡하거나 성능 저하, 데이터 불일치, 개발 시간 및 비용 증가 등의 문제로 이어진다. 이러한 매핑 프로세스의 자동화를 위해 기타 미들웨어 솔루션이나 ORM을 사용한다.

🤔Impedance mismatch로 발생할 수 있는 문제

  • Data type 불일치
    • 프로그래밍 언어 속성의 data type이 데이터 모델의 속성 data type과 다를 수 있음.
    • 따라서 각 속성 type별로 호환 가능한 프로그래밍 언어 유형을 지정하는 host programming lanuage별 binding이 필요.
  • 테이블인 쿼리 결과 데이터 구조를 프로그래밍 언어의 적절한 데이터 구조에 매핑하기 위한 binidng 필요
    • 대부분의 Query 결과가 튜플의 집합or다중 집합이며, 각 튜플이 일련의 속성 값으로 구성되기 때문에 프로그램에서 인쇄 또는 처리를 위해 개별 튜플 내의 개별 데이터 값에 액세스 해야 함

ORM의 특징

  • 개발 편의
    복잡한 SQL 쿼리문을 작성할 필요가 없어짐. 친숙한 데이터 구조와 API 사용해 작업 가능
  • 유연성 향상
    애플리케이션은 DB schema보다 특정 요구 사항에 더 적합할 수 있는 자체 데이터 구조 사용이 가능해짐
  • 복잡성 증가
    개발자가 애플리케이션 데이터 구조 ↔ 데이터베이스 스키마 간의 매핑을 관리해야 함
  • Database 의존도가 낮아짐
    DB 시스템의 변경이 생기더라도 최대한 변경없이 개발할 수 있도록 추상화된 형태로 제공됨. 변경해도 대부분의 CRUD 기능은 그대로 동작하도록 DB 사용 가능
  • SQL Injection 보호
    취약점은 있으나, SQL Injection(사이버 공격의 일종)으로부터 보호할 수 있음


JPA(Jakarta Persistence API)

Java에서 사용하는 ORM이라는 기술의 이름이다. JPA는 인터페이스이기 때문에, JPA에 명세된 기능을 사용하기 위해서는 이를 구현한 ORM 프레임워크를 사용해야 한다.대표적인 구현체가 Hibernate이다.(EclipseLine, OpenJPA 등이 존재함)
(2019년 Java Persistence API에서 Jakarta Persistence API로 변경됐다고 한다.)

JPA 사용법

  1. build.gradle에 dependency 추가
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'	
}
  1. JPA를 사용하기 위해 Database 설정도 필수(지난 번 설정해둔 H2 Database)
dependencies {
	runtimeOnly 'com.h2database:h2'
}


참고자료

33기 DO SOPT 서버 파트 2차 세미나 자료(배포 불가)
Impedance Mismatch in DBMS
JPA vs Mybatis, 현직 개발자는 이럴 때 사용합니다.

profile
천재 개발자 되기

0개의 댓글