일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링
- 가비지 컬렉터
- MySQL
- 동시성
- MVCC
- text
- Varchar
- 데이터 타입
- java
- 자바
- db
- reflection
- 동시성 문제
- CAS
- 백엔드
- Di
- foreach
- Locking Read
- 가비지 컬렉션
- gc
- iterator
- Atomic Type
- iterable
- Synchronized
- Lock
- jpa
Archives
- Today
- Total
과정을 즐기자
JPA를 사용하는 이유 본문
SQL 중심적인 개발의 문제점
자바와 같은 객체지향언어를 사용한다면 추상화, 캡슐화, 정보은닉, 상속, 다형성을 활용하여 역할과 책임을 구분하여 개발을 한다.
관계형 데이터베이스를 사용한다면 SQL을 이용해서 DB에 저장, 수정, 삭제를 하게된다.
그렇다면 객체를 관계형 데이터베이스에 저장하려면 객체정보를 SQL로 변환하여 저장하면 된다.
하지만 객체와 관계형 데이터베이스에는 다음과 같이 크게 4가지 차이가 있다.
- 상속 : 관계형 데이터베이스에서 상속을 사용하려면 각각의 테이블에 JOIN SQL을 작성해야 한다.
- 연관관계 : 객체는 참조를 사용하여 연관관계를 가져왔는데 테이블은 외래키를 사용하여 가져와야한다.
- 데이터 타입
- 데이터 식별방법
객체 모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다.
객체지향언어의 장점을 살려서 모델링을 하려면 관계형 데이터베이스와의 매핑작업이 늘어나고 패러다임 불일치 문제가 더 커진다.
둘 사이의 매핑과정을 대신해 줄 무언가가 필요하다..
ORM (Object-Relational Mapping)
ORM은 객체와 관계형 데이터베이스를 매핑하는 기술이다. 예를들어 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라
객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 되는 것이다.
하지만 단순히 SQL을 대신 생성해서 데이터베이스에 전달해주는 것을 넘어서서 패러다임의 불일치 문제도 해결해준다.
JPA (JAVA Persistence API)
다양한 ORM 기술이 있지만 JPA는 자바 ORM 기술에 대한 API 표준 명세이다.
구현체로는 Hibernate, EclipseLink, DataNucleus가 있고 대부분 Hibernate를 사용한다.
JPA를 사용하면 다음과 같은 장점이 있다.
- 개발자 대신 SQL을 작성해주고 패러다임 불일치 문제도 해결해주기 때문에 개발자는 객체 모델을 구현하는데 더 집중할 수 있다.
- JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다.
예를 들어 같은 트랜잭션 안에서 두번의 조회 쿼리를 작성했다면 JPA는 쿼리를 한번만 전달하고 두번째는 조회한 객체를 재사용한다. - 특정 데이터베이스에 기술에 종속되지 않는다. 따라서 데이터 베이스를 변경하더라도 기존 코드를 그대로 사용할 수 있다.
'Spring Data' 카테고리의 다른 글
고급 매핑 (0) | 2022.12.04 |
---|---|
다양한 연관관계 매핑 (0) | 2022.12.02 |
연관관계 매핑 (0) | 2022.11.29 |
엔티티 매핑 (0) | 2022.11.29 |
영속성 관리 (0) | 2022.11.27 |