1. JPA
1) JPA란?(Java Persistence API)
- JPA는 자바에서 사용하는 ORM(Object-Relation Mapping) 기술 표준
- JPA는 자바 애플리케이션과 JDBC 사이에서 동작하며, 자바 인터페이스로 정의되어 있다.
- JPA는 단순한 명세, 구현이 없음
ORM : Object-Relation Mapping(객체 관계 맵핑)
- 객체와 관계형 데이터베이스의 데이터를 매핑하는 기술
- ORM 프레임워크가 객체와 데이터베이스 중간에서 매핑
- 객체와 테이블을 매핑하여 패러다임 불일치 문제를 해결
- ex) Hibernate, EclipseLink, OpenJPA
* 패러다임 불일치
- '객체지향 프로그래밍'은 추상화, 캡슐화, 정보은닉, 상속, 다형성등 시스템의 복잡성을 제어할 수 있는 다양한 정치들을 제공
- '관계형 데이터베이스'는 데이터 중심으로 구조화, 집합적인 사고 필요
=> 객체 지향 프로그래밍 언어 패러다임 != 관계형 데이터베이스 패러다임
2) JPA 동작
- JPA는 애플리케이션과 JDBC사이에서 동작
- 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신
=> 즉, 개발자가 직접 JDBC API를 쓰는 것이 아님
3) JPA 저장
- MemberDAO 클래스를 통해 persist()를 실행하면, JPA가 Entity 객체를 분석하여 SQL문 생성
- JDBC API를 사용하여 DB에 생성된 INSERT SQL을 보냄
- 이 과정에서 JPA는 객체와 데이터베이스 테이블의 패러다임 불일치 해결
4) JPA 조회
- MemberDAO 클래스를 통해 find(id)를 실행하면, JPA는 SELECT SQL을 생성
- JDBC API를 사용하여 생성된 SELECT SQL을 보냄
- DB에서 반환된 정보를 ResultSet 매핑을 통해 객체로 변환
=> 패러다임 불일치 해결
2. JPA를 사용하는 이유
기존의 개발방식은 SQL 중심 개발
JPA를 사용하면 객체중심으로 애플리케이션 개발이 가능
1) 생산성(CRUD)
- JPA를 사용하면 기본적으로 생산성이 높아짐.
- JDBC 방식의 경우 SQL 쿼리문을 직접 작성해야 데이터베이스에 접근할 수 있다.
=> BUT, JPA는 쿼리문을 별도로 작성할 필요가 없다.
2) 유지보수
- 기존에는 필드 변경시 모든 SQL을 수정
- JPA는 필드만 추가, SQL은 JPA가 처리하기 때문에 손댈 것이 없다.
3) 패러다임 불일치 문제 해결
- 상속, 연관관계, 객체 그래프 탐색, 비교 등의 설계 차이로 인해 발생하는 패러다임 불일치 문제 해결
3. Hibernate
- JPA의 구현체중 하나
- Hibernate는 SQL을 사용하지 않고 직관적인 코드를 사용해 데이터를 조작
- JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계
4. Spring Data JPA
- Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 JPA를 쉽고 편하게 사용할 수 있도록 도와줌
- 기존에 JPA를 사용하려면 EntityManager를 주입받아 사용해야 하지만, Spring Data JPA는 JPA를 한단계 더 추상화시킨 Repository 인터페이스를 제공.
- Spring Data JPA가 JPA를 추상화 -> Spring Data JPA의 Repository의 구현에서 JPA를 사용하고 있음
5. Hibernate와 Spring Data JPA의 차이점
- Hibernate는 JPA 구현체, Spring Data JPA는 JPA에 대한 데이터 접근의 추상화
'스프링부트와 AWS로 혼자 구현하는 웹서비스' 카테고리의 다른 글
Part 6. 등록/수정/조회 API 만들기 (0) | 2023.12.17 |
---|---|
Part5. 프로젝트에 Spring Data JPA 적용 (0) | 2023.12.14 |
Part 3. 롬복 (0) | 2023.12.07 |
Part 2. 테스트 코드 작성 (0) | 2023.12.06 |
Part 1. 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기 (0) | 2023.12.06 |