ORM

Yennie·2024년 4월 3일

JPA

목록 보기
1/19

ORM (Object-Relational Mapping)

자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법으로, SQL을 전혀 몰라도 자바 언어로만 데이터베이스에 접근해서 원하는 데이터를 받아올 수 있다. 즉, 객체와 데이터베이스를 연결해 자바 언어로만 데이터베이스를 다룰 수 있게 하는 도구를 의미한다.

장점

  • SQL을 직접 작성하지 않고 사용하는 언어로 DB에 접근이 가능
  • 객체지향적으로 작성할 수 있기 때문에 비즈닌스 로직에만 집중할 수 있음
  • 데이터베이스 시스템이 추상화되어 있어 MySQL -> PostgreSQL로 전환하더라도 추가 작업이 없음 (시스템에 대한 종속성이 줄어듦)
  • 매핑하는 정보가 명확하기 때문에 ERD에 대한 의존도를 낮출 수 있고 유지보수 시 유용함

단점

  • 프로젝트이 복잡성이 커질수록 사용 난이도가 올라감
  • 복잡하고 무거운 쿼리는 ORM으로 해결이 불가능한 경우가 있음

Persistence

데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터 특성을 의미
영속성을 갖지 않는 데이터는 단지 메모리만 존재하여 프로그램 종료 시 모두 잃어버리게 됨

Object Persistence

메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스를 활용하여 영구적으로 저장하여 영속성을 부여한다.
1) JDBC - java에서 사용
2) SpringJDBC
3) Persistence Framework - Hibernate, Mybatis

Persistence Layer

프로그램의 아키텍처에서 데이터에 영속성을 부여해주는 계층을 의미한다.
JDBC를 이용하여 직접 구현할 수 있으나 Persistence framework을 이용한 개발이 많이 이루어짐

Persistence Framework

JDBC 프로그래밍의 복잡함과 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장한다.
SQL Mapper vs. ORM으로 구분할 수 있다.

SQL Mapper vs. ORM

SQLMapper

SQL <- 매핑 -> Object 필드
SQL 문장으로 직접 데이터베이스 데이터를 다룬다.
예) Mybatis JdbcTemplates

ORM

데이터베이스 데이터 <- 매핑 -> Object 필드
객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑/연결해주는 것을 의미한다.
직관적인 코드로 데이터 조작이 가능하며, 객체 간의 관계를 바탕으로 SQL을 자동으로 생성한다.
Persistant API라고도 함 (JPA, Hibernate)

JDBC

JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

  • JDBC vs. Spring JDBC
    • JDBC API의 문제점
      • 쿼리를 실행하기 전과 후에 많은 코드 작성 필요 (연결 생성, 명령문, ResultSet 닫기, 연결 등)
      • 데이터베이스 로직에서 예외 처리 코드 수행이 필요
      • 트랜잭션을 처리해야한다 ‘
    • JDBC Template은 Spring JDBC 접근 방법 중 하나로 핵심적으로 해야할 작업을 제외하고는 프레임워크가 알아서 처리해준다.

JPA

ORM을 사용하기 위한 표준 인터페이스를 모아둔 것을 의미한다.
자바 객체와 데이터베이스를 연결하여 데이터를 관리
JPA의 구성
1. Javax.persistence 패키지로 정의된 API
2. JPQL
3. 객체/관계 메타데이터

JPA는 인터페이스이기 때문에 원하는 구현체를 선택해서 사용해야한다. (예. Hibernate)

Hibernate

JPA의 구현체 중 하나이다.
HQL이라 불리는 쿼리 언어를 포함하고 있으며, HQL는 객체지향적이며, 상속 다형성 관계 등의 강점을 누릴 수 있다. 쿼리 결과로 객체를 반환하며 개발자에 의해 생성되고 직접적 접근이 가능하다.

출처
https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html

profile
PM | Aspiring SWE | linkedin.com/in/emilyyeeun

0개의 댓글