JPA - 등장 배경

2024. 11. 6. 17:52etc

SQL 중심적 개발의 문제점

1. 무한 반복

동일한 crud 작업 계속해서 반복해야 함.

자바 객체를 sql로 변환해야 함.

sql을 자바 객체로 변환해야 함.

 

2. 변화에 대응하기 어려움

컬럼 추가, 제거 등의 설계 변경 시, 기존 작성 코드를 전부 수정해야 함.

 

나는 자바를 기반으로 한 개발자가 되고자 함.

 

Q1. 객체를 중심적으로 설계하고, 사고하고, 개발하기 위해서는?

 

Q2. 정보는 어떻게 저장하지?

- memory

- db

- file

- 등 등

 

개발자가 해야하는 작업

객체&SQL 매핑

객체 - sql 변환 - sql = rdb

 

객체와 관계형 데이터 베이스의 차이

1. 상속

2.

 

상속

객체의 상속과 다르게, DB에는 상속관계라는 것이 없음.

비슷하게 Super, Sub 타입의 테이블을 만들어 관계를 형성하고 필요에 따라 조인 시키는 방법이 있음.

 

그런데,

Super, Sub 관계를 사용하게 될 경우, 아래와 같은 문제가 발생함.

 

1. 너무 많은 Join이 발생함.

예를 들어보자.

super = item (이름, 가격)

sub = 바지 (사이즈, 색상)

조회할 때 바지에 대한 모든 정보가 필요하다. 현재 정보는 item과 바지로 나뉘어져 있다.

모두 조회하기 위해서는, db에서 join 이 필수불가결하다.

 

등록할 때에도, 하나의 상품을 등록하는데 item, 바지 테이블에 로우가 각 1개씩 추가되는 등 낭비가 발생하게 된다.

 

join문.. insert문 여러개.. .. .. 작성작성작성작성...

끔찍...

 

결론

DB에 저장할 객체에는 상속 관계 안 쓴다.

 


연관관계

- 객체는 참조를 사용한다.

- 테이블은 외래키를 사용한다. (외래키를 통한 join - ex) JOIN ON M.TEAM_ID = T.TEAM_ID)

 

데이터를 저장하기 위해 db를 사용하므로, 사용하게 된 db에 맞춰 모델링을 하게 됨.

class Food {
	Long id;
    Long recipeId;
    String name;
}

class Recipe{
	Long id;
    String name;
}

 

문제점

객체답지 않은 개발을 하게 됨.

객체는 참조를 통해 관계를 맺는다.

하지만 db 중심 모델링 시, 갖고 있는 정보가 id 뿐인 상태가 되므로, CRUD 등의 작업이 굉장히 번거로워진다.

 

그럼 객체답게 개발하면 되지 않나?

 

객체다운 개발의 한계점

여기서도 문제가 발생한다.

참조하는 객체는 어떻게 가져오지??

참조하는 객체가 있긴한데.. 매번 필요하지는 않은데... 성능문제 있음 어떡하지??

참조 객체 수정은 어떻게 처리하지?? 

sql sql sql sql sql sql sql

 

객체답게 개발하려고 하면 할수록, 작업량이 많아짐.

 

이런 고민을 타파하기 위해

JPA 라는 기술이 등장하게 됨.

 

참조

JPA - 인프런, 김영한

'etc' 카테고리의 다른 글

휴먼에러_지역변수, 인스턴스 변수 착각  (0) 2024.06.28
h2_문법 오류_큰 따옴표, 작은 따옴표  (0) 2024.02.27
순차 탐색 ? 이진 탐색?  (0) 2024.02.17
SOLID - OCP  (0) 2024.02.12