국비학원 커리큘럼을 따라 공부하며 계속 드는 생각이 있었다.
💡 이거 너무 불편한데?
💡 더 편한 방법은 없을까?
JDBC api를 사용해서 query문을 정확하게 한땀한땀 입력하여 처리했다
sql Mapper(MyBatis)를 사용하여 개발 코드는 줄었지만 query문에 집중되어있고, 생산성이 떨어진다는 점은 같았다.
우연히 JPA소개 강좌를 듣게되었고 이렇게 편하게? 이렇게 빨리? 개발을 할 수 있다는 설레임에 바로 강의를 수강하게되었다.
수강강좌
💻 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한님)
JPA는 표준 명세
- 인터페이스의 모음
- 표준 명세를 구현한 3가지 구현체 - 하이버네이트, EclipseLink, DataNucleus
1차 캐시와 동일성(identity)보장
같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상
String memberId = "100";
Member m1 = jpa.find(Memeber.class, memberId); //SQL
Member m2 = jpa.find(Memeber.class, memberId); //캐시
m1 == m2 // true
트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
트랜잭션을 커밋할 때까지 INSERT SQL을 모음
JDBC BATCH SQL기능을 사용해서 한번에 SQL 전송
transaction.begin(); // 트랜잭션 시작
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.
//커밋하는 수간 데이터베이스에 INSERT SQL을 모아서 보낸다.
transaction.commit(); // 커밋
한번에 모았다가 네트워크로 보내기 때문에 네트워크 통신 비용을 줄일 수 있다.
지연 로딩과 즉시 로딩
지연 로딩 : 객체가 실제 사용될 때 로딩
즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회
📌 개발시 지연로딩으로 세팅 후 성능 고려하여 즉시로딩으로 부분 세팅
java application 과 jdbc API 사이에서 동작
기존에는 개발자가 jdbc api를 직접 사용했다면 JPA가 사용
JPA를 사용함으로써 기존의 SQL에 의존적인 개발 방식에서 좀 더 비지니스 로직에 집중하고 JPA표준이 제공하는 다양한 이점들과 성능최적화 기능들을 사용함으로써 개발 생산성과 유지보수성을 증대시킬 수 있기 때문에 JPA를 배우고 사용 해야한다.
📚 참고 및 자료 출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)