-
JPA은무엇인가?김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 9. 28. 12:11반응형
SQL중심의 개발의 문제점
1. CRUD같은 지루한 방식의 연속과 SQL에 의존적인 개발
1) 아래의 코드를 보게 된다면 데이터를 저장한 코드를 가지고 CRUD중심적인 개발
2) 조회 parameter와 결과값을 객체에 저장
public class Member { private String memberId; private String name; ... }
INSERT INTO MEMBER(MEMBER_ID, NAME, TEL) VALUES SELECT MEMBER_ID, NAME, TEL FROM MEMBER M UPDATE MEMBER SET … TEL = ?
2. SQL위주의 개발을 하게 된다면 객체지향프로그래밍 개발을 하기 어렵다.
객체지향프로그래밍은?
추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복합성을 제어할 수 있는 개발
3. 객체지향 프로그래밍적으로 개발을 하게 된다면 매핑 작업이 증가
1) 객체는 자유롭게 객체 그래프를 탐색이 가능해야 한다.
class Member { String id; //MEMBER_ID 컬럼 사용 Team team; //참조로 연관관계를 맺는다. //** String username;//USERNAME 컬럼 사용 Team getTeam() { return team; } }
class Team { Long id; //TEAM_ID PK 사용 String name; //NAME 컬럼 사용 }
위의 객체에 데이터를 담게 된다면 아래과같은 컬렉션에 담게 된다.
list.add(member);
Member member = list.get(memberId);
Team team = member.getTeam();그러면 객체는 아래와같은 관계를 가지게 되는데 원하는 데이터를 뽑아내기가 힘들다.
public Member find(String memberId) { //SQL 실행 ... Member member = new Member(); //데이터베이스에서 조회한 회원 관련 정보를 모두 입력 Team team = new Team(); //데이터베이스에서 조회한 팀 관련 정보를 모두 입력 //회원과 팀 관계 설정 member.setTeam(team); //** return member; }
3. 객체를 미리 로딩할 수가 없다.
1) Member의 데이터를 가져오고 이에따른 Team정보를 가져오기위해서는 Member의 데이터를 미리 조회하고, Team의 대한 정보를 조회를 해야 한다.
4.진정한 의미의 계층 분할이 어렵다.
위와같은 SQL 중심의 개발의 한계가 있기 때문에 JPA가 등장
JPA란?
1. Java Persistence API
2. 자바 진영의 ORM 기술 표준
ORM?
1. Object-relational mapping(객체 관계 매핑)
2. 객체는 객체대로 설계
3. 관계형 데이터베이스는 관계형 데이터베이스대로 설계
4. ORM 프레임워크가 중간에서 매핑대중적인 언어에는 대부분 ORM 기술이 존재
JPA 동작 설명
1. JPA는 애플리케이션과 JDBC 사이에서 동작
2. 조회
3. 저장
JPA 설명
1. JPA는 인터페이스의 모임
2. JPA 2.1 표준 명세를 구현한 3가지 구현체
3. 하이버네이트, EclipseLink, DataNucleus
4. JPA 버전
1) JPA 1.0(JSR 220) 2006년 : 초기 버전. 복합 키와 연관관계 기능이 부족
2) JPA 2.0(JSR 317) 2009년 : 대부분의 ORM 기능을 포함, JPA Criteria 추가
3) JPA 2.1(JSR 338) 2013년 : 스토어드 프로시저 접근, 컨버터(Converter), 엔티 티 그래프 기능이 추가
JPA는 왜 사용해야 하는가?
1. SQL 중심적인 개발에서 객체 중심으로 개발
2. 생산성(SQL매퍼 사용 줄어듬)
1) 저장: jpa.persist(member)
2) 조회: Member member
3) jpa.find(memberId)
4) 수정: member.setName(“변경할 이름”)
5) 삭제: jpa.remove(member)
3. 유지보수
4. 패러다임의 불일치 해결
1) JPA와 상속
2) JPA와 연관관계
3) JPA와 객체 그래프 탐색
4) JPA와 비교하기
5. 성능
1) 1차 캐시와 동일성(identity) 보장
2) 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
3) 지연 로딩(Lazy Loading)
6. 데이터 접근 추상화와 벤더 독립성 - 표준
반응형'김영한(인프런 강의) > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
엔티티 매핑 - 필드와 컬럼 매핑 (0) 2020.10.02 엔티티 매핑 - 데이터베이스 스키마 자동 생성 (0) 2020.09.29 엔티티 매핑 - 객체와 테이블 매핑 (0) 2020.09.29 영속성 관리 - 내부 동작 방식 (0) 2020.09.29 JPA 세팅 및 기본 실습 (0) 2020.09.28