본문 바로가기
spring/jpa

자바 ORM 표준 JPA 프로그래밍 - 1장 JPA 소개

by 쭈꾸마뇽 2021. 7. 5.

1장 JPA 소개


  • JDBC API를 직접 사용해서 코딩하면 비즈니스 로직보다 SQL, JDBC API를 작성하는데 더 오랜 시간이 걸림 → JPA를 사용하여 문제 해결

1.1 SQL을 직접 다룰 때 발생하는 문제점


  • 관계형 데이터베이스는 가장 대중적이고 신뢰할 만한 안전한 데이터 저장소
  • → 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 저장소로 사용

1.1.1 반복, 반복 그리고 반복


  • JPA를 사용하지 않고 SQL을 직접 다루게 되는 경우, 다수의 코드 작성 필요
  • DAO(데이터 접근 계층)을 개발하는 일은 반복의 연속

1.1.2 SQL에 의존적인 개발


  • 데이터 접근 계층을 사용해서 SQL을 숨겨도 어쩔 수 없이 DAO를 열어서 어떤 SQL이 실행되는지 확인해야 한다는 문제점 발생
  • SQL에 의존하는 상황에서는 개발자들이 엔티티를 신뢰하고 사용할 수 없음
  • 물리적으로는 SQL과 JDBC API를 데이터 접근 계층에 숨기는 데 성공했을지라도 논리적으로는 엔티티와 아주 강한 의존관계를 갖게 됨

1.1.3 JPA와 문제 해결


  • JPA를 사용하면 개발자가 직접 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면 됨
  • 저장 : persist()
  • 조회 : find()
  • 수정 : 별도의 수정 메소드 없지만 객체를 변경하면 데이터베이스에 적절한 Update SQL이 전달됨
  • 연관된 객체 조회 : 연관된 객체를 사용하는 시점에 적절한 Select SQL 실행

1.2 패러다임의 불일치


  • 객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 기능과 표현 방법도 다름
  • → 패러다임 불일치 문제 때문에 객체 구조를 테이블 구조에 저장하는 데는 한계가 있음

1.2.1 상속


  • 객체는 상속이라는 기능이 있지만 테이블은 상속이 없음
  • 슈퍼타입 서브타입 관계를 사용하면 객체 상속과 가장 유사한 형태로 테이블을 설계할 수 있음
  • 하지만 JPA를 사용하면? 마치 자바 컬렉션에 객체를 저장하듯 JPA에게 객체 저장

1.2.2 연관관계


  • 객체는 참조를 사용해서 다른 객체와 연관관계를 가지고 참조에 접근해서 연관된 객체를 조회
  • 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회→ 이런 패러다임 불일치는 객체지향 모델링을 포기하게 만들 정도로 극복하기 어려움
  • → 객체를 테이블에 맞춰 모델링, 객체지향 모델링을 해도 무척 번거롭고 어려움
  • 반면 JPA는 이런 문제를 손쉽게 해결해줌

1.2.3 객체 그래프 탐색


  • 객체 그래프 탐색 : 참조를 사용해서 연관된 객체를 탐색하는 것
  • SQL을 직접 다룰 경우 객체 그래프를 어디까지 탐색할 수 있는지 정해지지만 JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행하기 때문에 탐색이 자유로움
  • 지연 로딩 : 실제 객체를 사용하는 시점까지 데이터베이스 조회를 미루는 것
  • JPA는 연관된 객체를 즉시 함께 조회할지, 실제 사용되는 시점에 지연해서 조회할지 간단한 설정으로 정의 가능

1.2.4 비교


  • 데이터베이스의 같은 로우를 조회할 때마다 같은 인스턴스를 반환하도록 구현하는 것은 쉽지 않음
  • 하지만 JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장

1.2.5 정리


  • 객체 모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 다르기 때문에 이 불일치의 극복을 위해 개발자가 너무 많은 시간과 코드를 소모해야 함
  • JPA는 패러다임 불일치 문제를 해결해주고 정교한 객체 모델링을 유지하게 도와줌

1.3 JPA란 무엇인가?


  • ORM (Object Relationship Mapping): 추상화된 계층을 이용하여 데이터에 액세스하고 처리하기 때문에 DB에 종속화된 구문을 작성하지 않는 방법을 사용 → 애플리케이션의 독립성이 보장됨
  • : CRUD를 추상화된 계층에서 제공하여 개발 편의성이 있음
  • : 프로그램의 객체와 데이터 베이스의 테이블 또는 컬렉션 등을 맵핑하는 개념 (프로그램의 객체를 테이블과 맵핑)
  • 애플리케이션을 객체 중심으로 개발하니 생산성과 유지보수가 좋아지고 테스트 작성도 편리해짐 → 버그 감소
  • Hibernate 가장 많이 사용

1.3.1 JPA 소개


  • JPA : 자바 ORM 기술에 대한 API 표준 명세

1.3.2 왜 JPA를 사용해야 하는가?


  • 생산성, 유지보수, 패러다임의 불일치 해결, 성능, 데이터 접근 추상화와 벤더 독립성, 표준

출처 : 자바 ORM 표준 JPA 프로그래밍 스터디

 

klyhyeon/JPAStudy

Contribute to klyhyeon/JPAStudy development by creating an account on GitHub.

github.com

 

댓글