1장 JPA 소개
∘ 객체 지향의 장점을 포기하고 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 개발하는지 의문
∘ 객체와 관례형 데이터베이스의 차이(패러다임의 차이. 둘은 다른 역할을 가지니까.)로 인해 객체 모델이 데이터 중심의 모델로 바뀌었음
∘ ORM(Object Relational Mapping) 프레임워크 : 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해줌
∘ JPA : 자바 진영의 ORM 기술 표준
- CRUD SQL을 알아서 처리해줌
- 객체 모델링과 관계형 데이터베이스 사이의 차이점 해결
- 실행 시점에 자동으로 SQL을 만들어서 실행
- 조회된 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리해줌
- 객체 중심으로 개발 ⇒ 생산성 향상, 유지보수 용이
- 데이터베이스 변경이 쉬움
1.1 SQL을 직접 다룰 때 발생하는 문제점
∘ 데이터베이스에 데이터를 관리하기 위해 SQL 사용
∘ 자바 애플리케이션은 JDBC API를 사용해서 SQL을 데이터베이스에 전달
1.1.1 반복, 반복, 그리고 반복
∘ 객체를 데이터베이스에 CRUD하려면 너무 많은 SQL과 JDBC API를 코드로 작성해야 됨
∘ 객체를 자바 컬렉션에 보관한다면 코드 한 줄로 가능
∘ 데이터베이스는 데이터 중심의 구조를 가지므로 객체 구조와는 다름 ⇒ 개발자가 객체지향 애플리케이션과 데이터베이스 중간에서 SQL과 JDBC API를 사용해서 변환 작업을 해야 됨
1.1.2 SQL에 의존적인 개발
∘ 객체를 자바 컬렉션이 아닌 데이터베이스에 보관하면 단순히 필드를 추가할 때도 많은 코드를 수정해야 됨
∘ SQL에 모든 것을 의존하면 엔티티를 신뢰하고 사용할 수 없고 DAO를 열어서 확인해봐야 됨
1.1.3 JPA와 문제 해결
∘ JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때 SQL이 아닌 JPA가 제공하는 API를 사용하면 됨
- JPA가 개발자 대신에 SQL을 생성해서 데이터베이스에 전달함
∘ JPA가 제공하는 CRUD API
- 저장 기능 : persist()
- 조회 기능 : find()
- 수정 기능 : UPDATE SQL
- 연관된 객체 조회 : SELECT SQL
1.2 패러다임의 불일치
∘ 참조하는 객체가 있는 경우에 객체 저장에 어려움이 있음
∘ 관계형 데이터베이스에 객체를 저장하는 것이 해결 방법인데 데이터베이스에는 추상화, 상속, 다형성 같은 객체지향의 기능들이 없음
∘ 객체와 관계형 데이터베이스의 패러다임 불일치 : 객체와 관계형 데이터베이스는 지향하는 목적이 달라 기능과 표현 방법도 다름 ⇒ 객체 구조를 테이블 구조에 저장하는 데는 한계가 있음
∘ JPA를 사용하지 않고는 패러다임 불일치 해결을 위해 너무 많은 자원 소비
1.2.1 상속
∘ 테이블에는 객체 지향에서의 상속 기능 없음
∘ JPA를 이용하면 자바 컬렉션에 객체를 저장하듯이 JPA에 객체 저장하면 됨
1.2.2 연관관계
∘ 객체는 참조를 이용해서 연관관계를 가지고 참조에 접근해서 연관된 객체를 조회함
∘ 테이블은 외래 키를 사용해서 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회함
∘ 객체는 참조가 있는 방향으로만 조회 가능, 테이블은 외래 키 하나로 양방향 가능
객체를 테이블에 맞추어 모델링
∘ 객체를 테이블에 맞추어 모델링하면 연관된 객체를 찾으려면 연관된 객체의 참조를 보관해둬야 함
∘ 외래 키까지 관계형 데이터베이스가 사용하는 방식에 맞추면 객체 지향의 특징을 잃음
객체 지향 모델링
∘ 객체 모델은 외래 키카 필요 없고 참조만 있으면 됨 & 테이블은 참조가 필요 없고 외래 키만 있으면 됨
⇒ 개발자가 중간에서 변환 역할을 해야 함
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
∘
'Back-End > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
[JPA] 자바 ORM 표준 JPA 프로그래밍_7장 (0) | 2023.06.24 |
---|---|
[JPA] 자바 ORM 표준 JPA 프로그래밍_6장 (0) | 2023.06.20 |
[JPA] 자바 ORM 표준 JPA 프로그래밍_5장 (0) | 2023.06.05 |
[JPA] 자바 ORM 표준 JPA 프로그래밍_4장 (0) | 2023.05.29 |
[JPA] 자바 ORM 표준 JPA 프로그래밍_3장 (0) | 2023.05.29 |