✅ JPA란?
JPA는 "Java Persistence API"의 약자로, Java 언어를 사용하여 객체 지향 프로그래밍과 관계형 데이터베이스 간 상호 작용을 지원하는 자바 표준 스펙이나 API이다. JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. 애플리케이션과 JDBC 사이에서 동작한다.
#Spring Data JPA와는 다르다. Spring Data JPA를 JPA를 조금 더 편리하게 사용하기 위해 확장한 기술이다.
🔹ORM 기술이란?
ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. ORM은 SQL문의 수행 결과를 매핑하는 것이 아닌 DB 테이블의 데이터 그 자체와 객체를 매핑한다. 개발자가 직접 SQL을 작성하지 않아도 자동으로 SQL문을 만들어내기 때문에 DBMS에 종속적이지 않다.
JPA는 라이브러리가 아닌 ORM을 사용하기 위한 인터페이스의 모음이다. JPA는 ORM 기술을 사용하기 위한 추상화된 인터페이스의 모음이다. 따라서 이를 사용하기 위해선 특정 구현체가 있어야 하며 가장 대중적인 구현체는 Hibernate이다.
✅ 객체 연관관계와 테이블 연관관계
객체는 참조를 사용해서 다른 객체와 연관관게를 가진다. 반면에 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가진다. 아래 코드와 SQL문을 살펴보자.
class Member {
String memberName;
Team team;
public Team getTeam() {
return team;
}
}
class Team {
String teamName;
}
SELECT M.*, T.*
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID;
Member 객체는 Member.team 필드에 Team 객체의 참조(메모리의 주소값)을 보관해서 Team 객체와 관계를 맺는다. 따라서 참조 필드의 접근을 통해서 Member와 연관된 Team을 조회할 수 있다. 하지만 반대 반향인 Team에서 Member에 대한 접근은 불가능한데 이는 참조가 없기 때문이다(참조할 필드가 없다).
반면에 MEMBER 테이블은 MEMBER.TEAM_ID 외래 키 컬럼을 사용해서 TEAM 테이블과 관계를 맺는다. 외래 키 하나로 반대 방향인 TEAM JOIN MEMBER도 가능하다.
객체는 참조를 통해, 테이블은 외래키를 통해 서로 참조하는 관계가 다르다. 따라서 개발자가 중간에서 변환해주는 과정을 거쳐야하는 번거로움이 있다. 이러한 문제를 해결해주는 것이 JPA이다.
- 저장
- MemberDAO 클래스를 통해 persist()를 실행하면, JPA가 Entity 객체를 분석하여 SQL문을 생성한다.
- JDBC API를 사용하여 DB에 생성된 INSERT SQL을 보내게 된다.
- 이 과정에서 JPA는 객체와 데이터베이스 테이블의 패러다임 불일치를 해결한다.
- 조회
- MemberDAO 클래스를 통해 find(id)를 실행하면, JPA는 SELECT SQL을 생성한다.
- JDBC API를 사용하여 생성된 SELECT SQL을 보낸다.
- DB에서 반환된 정보를 ResultSet 매핑을 통해 객체로 변환해 준다.
- 이 과정에서도 패러다임 불일치 문제를 해결해 준다.
Uploaded by N2T