본문 바로가기

Spring/JPA

(JPA) JPA를 사용해야하는 이유

생산성 측면

저장 : jpa.persist(member)

 

조회 : Member member = jpa.find(memberId)

 

수정 : member.setName("변경할 이름")

 

삭제 : jpa.remove(member)

 

위와 같이 상당히 간편한 과정으로 CRUD를 처리할 수 있다.

 

유지보수 측면

class Member {
    private final Integer memberId;
    private final String name;
}
INSERT INTO MEMBER (MEMBER_ID, NAME) VALUES ... 
SELECT MEMBER_ID, NAME FROM MEMBER ...

 

기존의 코드에는 Member에 필드 값을 추가한다면 여러 가지 부가적인 과정들을 처리해야 하지만 JPA는 필드만 추가시켜주면 된다.

class Member {
    private final Integer memberId;
    private final String name;
    // 추가
    private final String tel;
}

 

패러다임의 불일치 해결

앞의 포스팅에서 언급한 객체와 관계형 데이터베이스 간의 패러다임의 불일치를 해결해준다.

jwdeveloper.tistory.com/284

 

(JPA) SQL 중심적인 개발의 문제점

현재는 객체를 관계형 데이터베이스에 관리해야 하는 시대이다. 관계형 데이터 베이스를 메인 디시이고 객체를 사이드디시로 생각하여 개발한다면 아래와 같은 문제점이 나타난다. 1. 무한 반

jwdeveloper.tistory.com

예를 들어 아래와 같은 코드를 작성하면 

jpa.persist(son);

 

기타 작업 (INSERT 쿼리를 두 개로 쪼개서 날린다.) 은 JPA가 처리해준다. (SELECT도 마찬가지로 JOIN으로 알아서 해결해 준다.)

INSERT INTO PARENT ...
INSERT INTO SON ...

 

연관관계 해결

앞의 포스팅에서 클래스에서 필드의 타입을 인스턴스로 하였을 때 연관관계의 불일치가 일어난다고 하였는데 JPA는 이러한 과정을 해결해준다. (지연 로딩)

 

Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();

 

엔티티의 신뢰성 문제 해결

class MemberService { 
    public void process() { 
        Member member = memberDAO.find(memberId); 
        // 호출할 수 있을까? 
        member.getTeam(); 
        member.getDelivery().getOrder(); 
    } 
}

앞의 포스팅에서 find시에 쿼리를 일일이 찾아서 호출 여부를 확인해야만 하였다고 언급하였지만 JPA는 이러한 과정을 해결해준다.

즉 JPA가 가져온 데이터는 신뢰할 수 있는 데이터라는 뜻이다.

 

동일한 트랜잭션에서 조회한 엔티티는 같음을 보장해준다.

Integer memberId = 100;
Member member1 = memberDAO.getMember(memberId); 
Member member2 = memberDAO.getMember(memberId); 
member1= member2;

위의 결과가 TRUE로 나온다.

 

성능 최적화 기능

  1. 1차 캐시와 동일성을 보장한다.
  2. 트랜잭션을 지원하는 쓰기 지연 (버퍼링)
  3. 즉시 로딩과 즉시 로딩 - 최적화가 필요할 때 즉시 로딩으로 바꿔서 성능 최적화를 이룰 수 있다.

지연로딩 즉시 로딩


References

www.inflearn.com/course/ORM-JPA-Basic/dashboard  

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com