Spring | JPA & ORM

Wonhee 📘·2022년 6월 6일
0

Spring

목록 보기
5/6
post-thumbnail

🤔 JAP(Java Persistence API)란?

JPA란 Java Persistence API의 약자로 자바의 ORM 기술의 표준명세이고, 인터페이스의 모음이라고 한다. 즉 실제로 동작하는 친구는 아니라는것이다.
또한 JPA 내부에는 JDBC API라는 것이 존재한다. 그냥 이런게 존재하는구나 까지만 이해하고 넘어가자.

그렇다면 ORM은 또 무엇인가 ?

🤔 ORM(Object-Relational Mapping)이란?

ORM은 Object-Relational Mapping의 약자로
객체와 관계형 데이터베이스를 매핑한다는 뜻을 가지고 있다.
ORM은 프레임워크로 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해주는 친구이다.
객체는 객체로, 데이터베이스는 데이터베이스에 맞도록 설계를 가능하게 해준다.

📝 JPA의 동작과정

Ex) Member 객체를 조회하고 싶을 때

  • 개발자는 member의 pk 값을 JPA에 넘긴다.
  • JPA는
    • 1) 엔티티의 매핑 정보를 바탕으로 적절한 SELECT SQL을 생성한다.
    • 2) JDBC API를 사용하여 SQL을 DB에 날린다.
    • 3) DB로부터 결과를 받아온다.
    • 4) 결과(ResultSet)를 객체에 모두 매핑한다.
  • 쿼리를 JPA가 만들어 주기 때문에 Object와 RDB 간의 패러다임 불일치를 해결할 수 있다.

⭕ JPA를 사용했을때의 장점

1. 생산성

JPA를 사용하면 자바 컬렉션에 저장하듯이 JPA에게 저장할 객체를 전달하면 된다.

지루하고 반복적인 코드를 개발자가 직접 작성하지 않아도 되며, DDL문도 자동으로 생성해주기 때문에 데이터베이스 설계 중심을 객체 설계 중심으로 변경할 수 있다.

2. 유지보수

필드를 하나만 추가해도 관련된 SQL과 JDBC 코드를 전부 수행해야 했지만 JPA는 이를 대신 처리해주기 때문에 개발자가 유지보수해야하는 코드가 줄어든다.

3. 패러다임의 불일치 해결

JPA는 연관된 객체를 사용하는 시점에 SQL을 전달할 수 있고, 같은 트랜잭션 내에서 조회할 때 동일성도 보장하기 때문에 다양한 패러다임의 불일치를 해결한다.

❌ JPA를 사용했을때의 단점

1. 반복적인 코드의 작성

테이블이 100개 존재한다면 100개의 CRUD를 작성해야 한다.

SQL 작성 -> JDBC API로 SQL 실행 -> 결과를 객체로 매핑 등

2. SQL 의존적 개발

만약 테이블에 하나의 Column을 추가해야 한다면?

  • 모든 SQL의 변경이 필요하다.
  • INSERT, UPDATE, SELECT 등 관련된 모든 쿼리와 메소드가 변경되어야 한다.
  • 만약 제대로 동작하지 않다면 직접 DAO를 열어 SQL을 확인해야 한다.
  • 논리적인 계층 분할이 어렵게 된다.
profile
오늘 걷지 않으면 내일은 뛰어야한다 🚶‍♂️ 🏃‍♀️

0개의 댓글