[Spring_Boot] JPA

최현석·2022년 12월 1일
0

Spring_Boot

목록 보기
16/31
post-thumbnail

🧩 ORM이란

  • Object-relational mapping(객체 관계 매핑)
  • 객체는 객체대로 설계
  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 매핑
  • 우리가 일반적으로 알고 있는 애플리케이션 classRDB의 테이블을
    매핑(연결)한다는 뜻이며, 기술적으로 어플리케이션의 객체를 RDB테이블에
    자동으로 영속화 해주는 것이라고 보면 된다.

장점

  • SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을
    이용하여 비지니스 로직을 구성하는 데만 집중 할 수 있음
    (내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경쓰지
    않아도 됨)
  • Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어,
    각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임
  • 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면
    되기 때문에 생산성 증가
  • 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를
    낮출 수 있고 유지보수 및 리팩토링에 유리
  • 예를 들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL
    변환한다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에
    ORM을 사용한다면 쿼리를 수정할 필요가 없음

단점

  • 학습비용이 비쌈
  • 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저항 및
    일관성을 무너뜨리는 문제점이 생길 수 있음.
  • 복잡하고 비지니스 로직에 종속적인 쿼리는 속도를 위해 별도의 튜닝이
    필요하기 떄문에 결국 SQL문을 써야할 수도 있다.

🧩 JPA?

  • Java Persistence API
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한
    인터페이스
  • 자바 진영의 ORM 기술 표준
  • JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때,
    개발자가 직접 SQL을 작성하지 않아도 된다.
  • JPA가 개발자가 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로
    Mapping 해준다.

🧩 데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속 X
  • 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 다름
  • 가변 문자 : MySQL -> varchar / Oracle -> varchar2
  • 문자열을 자르는 함수 : SQL표준 -> SUBSTRING() / Oracle -> SUBSTR()
  • 페이징 : MySQL은 LIMIT, oracle rownum
  • 방언 : SQL표준을 지키지 않는 특정 데이터베이스만의 고유한 기능
  • oracle 이라고 하는 사투리를 써서 쿼리를 작성해 라는 뜻

0개의 댓글