[Spring] JPA (1)

young-gue Park·2024년 1월 22일
0

Spring

목록 보기
14/14
post-thumbnail

⚡ JPA (1)


📌 JPA란?

🔷 JPA(Java Persistence API)

  • 자바 진영의 ORM 기술에 대한 API 표준 명세
  • 애플리케이션과 JDBC 사이에서 동작한다.

💡 ORM(Object Relational Mapping)
'객체로 연결을 해준다'는 의미로, 어플리케이션과 데이터베이스 연결 시 SQL언어가 아닌 어플리케이션 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴을 뜻한다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.

💡 패러다임 불일치
데이터베이스는 데이터 중심으로 구조화되어있어서 객체의 상속, 다형성 같은 개념이없다. 그래서 객체와 데이터베이스가 지향하는 점이 어긋나게 되는데 이것을 객체와 데이터베이스의 패러다임 불일치라고 한다. 주로 상속, 연관관계 등에서 발생한다.

  • 기존의 자바 빈즈(EJB)라는 기술 표준안에 엔티티 빈이라는 ORM 기술이 있었지만 이는 복잡성과 기술 성숙도의 문제를 야기했다.
  • 오픈소스 ORM 프레임워크인 하이버네이트(hibernate)의 등장으로 엔티티 빈을 제치자, EJB 3.0에서 하이버네이트를 기반으로 JPA를 만들었다.

💡 그래서인지 JPA를 구현한 ORM 프레임워크 중 하이버네이트가 가장 대중적이다.


📌 JPA를 써야하는 이유

🔷 생산성

  • JPA를 사용하면 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성할 필요를 없앤다.
  • 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시키는 핵심적인 장점
INSERT INTO users (name, email, age)
VALUES ('박영규', 'dudrb5260@naver.com', 25);

SELECT *
FROM users
WHERE name='박영규';

이런 저장과 조회 쿼리문을

jpa.persist(user); // 저장
User user = jpa.find(name); // 조회

자바 코드로 간단하게 처리해준다.

🔷 유지보수

  • 개발자가 작성해야 했던 SQL과 JDBC API 코드를 JPA가 대신 처리해주기 때문에 유지보수해야 하는 코드 수가 줄어든다.
  • 패러다임의 불일치 문제를 해결해주므로 객체지향 언어의 장점들을 십분 활용할 수 있다.
public class User {
	// 필드에 gender 추가
	private String name;
    private String email;
    private Integer age;
    private String gender
    
    // 생성자에도 gender 추가
    
    // gender의 getter, setter 추가 등등
    
    ...
}

필드가 하나 늘어나버리면

# 성별 추가
INSERT INTO users (name, email, age, gender)
VALUES ('박영규', 'dudrb5260@naver.com', 25, 'male');

이런 쿼리문처럼 JDBC API 코드를 모두 수정해야하지만 JPA는 이를 신경쓸 필요가 없다.

🔷 성능

  • 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다.
String userId = "Bzeromo";
User user1 = jpa.find(userId);
User user2 = jpa.find(userId);

하나의 트랜잭션 안에 반복될만한 쿼리 작업들을 넣어두면 JPA를 사용하지 않았을 때 여러 번 통신했을 작업을 한 번으로 끝낼 수 있다. 여기선 같은 유저를 두 번 조회할 때 JPA는 데이터베이스에 한 번의 SELECT 전달 이후, 조회한 유저 객체를 재사용한다.

🔷 데이터 접근 추상화와 벤더 독립성

  • 관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다.
  • JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.

💡 벤더와 벤더의 독립성
데이터베이스를 만든 회사에 대한 내용. 흔히 산업용어로 벤더는 생산회사를 말한다. 예를 들어 JPA를 통해 페이징 기능을 구현했다면 A데이터베이스를 쓰다가 B데이터베이스로 바꿔도 정상적으로 동작하게 된다. 이를 벤더 독립성이라고 한다.

🤔 현재 진행 중인 프로젝트(아이디어 회의 툴 - good idea)에 적용하는 이유로는 이 안에서 대표적으로 생산성과 성능을 들 수 있겠다. 실시간 작업이 주를 이루는 프로젝트인 만큼 생산성과 성능 면에서 이점을 챙길 수 있는 부분은 최대한 가져가야 하기 때문.

profile
Hodie mihi, Cras tibi

0개의 댓글