goblin
리니팅
goblin

공지사항

전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • 개발 (31)
      • Spring (12)
      • JPA (4)
      • JAVA (4)
      • Python (6)
      • Docker (1)
      • Error (3)
      • Spring Cloud로 개발하는 MSA (1)
    • 알고리즘 (32)
    • 자료구조 (3)
    • 컴퓨터 개론 (3)
    • 개인 프로젝트 (4)
      • 쇼핑몰 만들기 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 다이나믹 프로그래밍
  • 스프링
  • 백준
  • Spring
  • 동적계획법
  • 구현
  • JPA
  • 스프링부트
  • gradle
  • springboot
  • 객체
  • 프로그래머스
  • inflearn
  • 코딩테스트
  • BOJ
  • sorting
  • 조합
  • Intellij
  • 클래스
  • 알고리즘
  • 정렬
  • tdd
  • 자료구조
  • 문자열
  • 파워자바
  • 파이썬
  • dp
  • python
  • 다이나믹프로그래밍
  • 코딩테스트연습

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
goblin

리니팅

[JPA] Hibernate 그리고 Spring Data JPA
개발/JPA

[JPA] Hibernate 그리고 Spring Data JPA

2024. 8. 15. 19:55
728x90

1. JPA는 인터페이스이다.

JPA란 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미합니다.

JPA는 특정 기능을 하는 라이브러리가 아니고, ORM을 사용하기 위한 인터페이스를 모아둔 것입니다.

JPA는 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 방법중 한 가지 입니다.

 

JPA는 단순히 명세이기 때문에 구현이 없습니다.

따라서 JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus와 같은 ORM 프레임워크를 사용해야 합니다.(보통은 JPA의 시초인 Hibernate를 구현체로 많이 사용한다.)

 

2. Hibernate

Hibernate는 자바 언어를 위한 ORM 프레임워크입니다. JPA의 구현체로, JPA 인터페이스를 구현하며 내부적으로 JDBC API를 사용합니다.

SQL을 사용하지 않고 직관적인 코드(메소드)를 사용해 데이터를 조작할 수 있습니다.

Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는 것은 아니고, Hibernate가 지원하는 메소드 내부에서는 JDBC API가 동작하고 있습니다.

 

3. Hibernate의 장단점

장점

  • 생산성
    • Hibernate는 SQL을 직접 사용하지 않고, 메소드 호출만으로 query가 수행된다.
    • 즉, 반복적인 SQL 작업과 CRUD 작업을 직접 하지 않으므로 생산성이 매우 높아진다.
  • 유지보수
    • 테이블 컬럼이 변경되었을 경우, Mybatis에서는 관련 DAO의 파라미터, 결과, SQL 등을 모두 확인하여 수정해야 하지만,
    • JPA는 JPA가 이런 일들을 대신 해주기 때문에 유지보수 측면에서 좋다.
  • 객체지향적 개발
    • 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중할 수 있다.
    • 로직을 쿼리에 집중하기 보다 객체 자체에 집중할 수 있다.
  • 특정 벤더에 종속적이지 않다
    • 여러 DB 벤더(MySQL, ORACLE 등)마다 SQL 사용이 조금씩 다르기 때문에 어플리케이션 개발 시 처음 선택한 DB를 나중에 바꾸는 것은 매우 어렵다.
    • 하지만 JPA는 추상화 된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않다. (설정 파일에서 어떤 DB를 사용하고 있는지만 설정한다면 편하게 DB를 변경할 수 있다.)

단점

  • 성능
    • 메소드 호출로 쿼리를 실행하는 것은 내부적으로 많은 동작이 있다는 것을 의미하므로, 직접 SQL을 호출하는 것보다 성능이 떨어질 수 있다.
    • 실제로 초기의 ORM은 쿼리가 제대로 수행되지 않았고, 성능도 좋지 못했다고 한다.(지금은 많이 발전하고 있고, 좋은 성능을 보여주고 있다.)
  • 세밀함이 낮다.
    • 메소드 호출로 SQL을 실행하기 때문에 세밀함이 부족하다.
    • 객체간의 매핑(Entity Mapping)이 잘못되거나 JPA를 잘못 사용하여 의도하지 않은 동작을 할 수도 있다.
    • 복잡한 통계 분석 쿼리를 메소드 호출로 처리하는 것이 힘들다.
      • 이것을 보완하기 위해 JPA에서는 SQL과 유사한 기술인 JPQL을 지원한다.
      • SQL 자체 쿼리를 작성할 수 있도록 지원도 하고 있다.

 

 

참고

https://dev-coco.tistory.com/74

 

[JPA] JPA와 Hibernate 그리고 Spring Data JPA

1. JPA(Java Persistent API)란? JPA란 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미합니다. JPA는 특정 기능을 하는 라이브러리가 아니고, ORM을 사용하기 위한 인터페이스를 모아둔 것입

dev-coco.tistory.com

https://jiwondev.tistory.com/140

 

JPA #2 본격적으로 알아보자.

해당 글은 https://www.inflearn.com/course/ORM-JPA-Basic 을 공부하고 정리한 글입니다. 📌 Java Persistenec API 줄여서 JPA, 현대의 자바 진영의 ORM 기술 표준. 참고로 이전에는 EJB(엔티디 빈)을 표준으로 제공했

jiwondev.tistory.com

 

728x90
반응형

'개발 > JPA' 카테고리의 다른 글

[JPA] 영속성 관리  (0) 2022.04.05
JPA 시작  (0) 2022.04.02
JPA란  (0) 2022.03.24
    '개발/JPA' 카테고리의 다른 글
    • [JPA] 영속성 관리
    • JPA 시작
    • JPA란
    goblin
    goblin

    티스토리툴바