ORM & JPA

김건우·2023년 6월 28일
0
post-thumbnail

책을 읽고 정리한 필기! (스프링 부트 핵심 가이드 - 장정우)

💡ORM

ORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미한다.

자바와 같은 객체지향 언어에서 의미하는 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법!

객체 지향 언어에서의 객체는 클래스를 의미한다.
클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재한다.

ORM은 이 둘의 불일치와 제약사항을 해결하는 역할을 한다.

이렇듯 ORM을 이용하면 쿼리문 대신 코드(메서드)로 데이터를 조작할 수 있다.

ORM의 장점

  • ORM을 사용하면서 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.
    • 쿼리문을 작성하는 양이 줄어들어 개발 비용 감소
    • 객체지향적으로 코드의 가독성 높임
  • 재사용 및 유지보수가 편리
  • 데이터베이스에 대한 종속성이 줄어든다.

ORM의 단점

  • ORM만으로 온전한 서비스를 구현하기에 한계가 있다.
    • 코드만으로 구현하기 어려운 경우가 있다.
    • 정확한 설계 없이 ORM만으로 구성하면 성능 문제가 발생할 수 있다.
  • 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생

💡JPA

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음이다.

ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함한다.
즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세

JPA의 메커니즘을 보면 내부적으로 JDBC를 사용한다. 개발자가 직접 JDBC를 구현하는 SQL에 의존하게 되는 문제 등이 있어서 효율성이 떨어지는데, JPA는 이 같은 문제점을 보완해서 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행한다.

JPA 기반의 구현체는 대표적으로 세가지가 있다.

Hibernate

자바의 ORM 프레임워크로, JPA 구현체 중 하나이다.
하이버네이트의 기능을 더욱 편하게 사용하도록 모듈화한 Spring Data JPA에 대해 설명하겠다.

Spring Data JPA

JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나.
CRUD 처리에 필요한 인텊이스 제공, 하이버네이트의 EntityManager를 직접 다루지 않고, 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조작함.

EntityManager

이름 그대로 엔티티를 관리하는 객체.
데이터베이스에 접근해서 CRUD 작업을 수행한다.
Spring Data JPA를 사용하면 리포지토리를 사용해서 데이터베이스에 접근한다.

profile
공부 정리용

0개의 댓글