JPA

JPA 란?

솔솔 2021. 6. 22. 09:41
반응형

안녕하세용 :>

무니님이 인프런 계정 공유해줘서 JPA 공부하라고했는데 무려 두 달이 지난 이제야 듣기 시작했습니다..!

무니님 감사합니다 ~~~

 

JPA (Java Persistence API) 란?

JPA는 인터페이스의 모음으로 JAVA 애플리케이션과 JDBC 사이에서 동작한다.

기존에 JDBC를 사용하던 것들을 JDBCTemplate ( mybatis / ibatis ) 의 도움을 받아 사용했지만 JPA는 SQL을 작성할 필요가 없다.

즉, JPA가 개발자 대신 적절한 SQL을 실행하게 된다.

강의에서 비유해 준 말로는 기존에 호미와 삽(JDBCTemplate)을 이용해 농사를 지었다면 기술이 발달하여 트랙터(JPA)를 이용해 편하게 농사를 짓는 것!

 

* ORM : Object Relational Mapping 객체와 관계형 데이터베이스 매핑

 

JPA 특징

1. 단순 SQL 작성으로 시간 낭비하지 않아도 됨

2. 남는 시간에 더 많은 설계 고민, 테스트 코드 작성

3. 개발이 즐거워짐

4. SQL 자동화, 수십줄의 코드가 한 두줄로 짧아짐

5. 유지보수 용이

  -> 기존 컬럼 수정될 경우 모든 소스 찾아서 수정해줘야했다면, JPA는 필드만 수정해주면 SQL은 JPA가 알알아서 처리

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

 

JPA CRUD

  • 저장 : jpa.persist(memberId)
  • 조회 : Member member = jpa.find(memberId)
  • 수정 : member.setName("변경할 이름")
  • 삭제 : jpa.remove(member)

JPA 성능 최적화 기능

1. 1차 캐시와 동일성( identity ) 보장

 1) 같은 트랜잭션 안에서는 같은 엔티티를 반환

    -> 같은 SQL을 두 번 조회할 경우, 1번 조회해오고 2번째는 1번 값을 반환해주며 조회 성능을 향상시킨다.

 2) DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장

 

2. 트랜잭션을 지원하는 쓰기 지연 ( transactional write-behind )

  1) 트랜잭션을 커밋할 때까지 INSERT SQL을 모음

  2) JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송

transaction.begin();	//트랜잭션 시작

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// 여기까지 INSERT SQL을 데이터베이스에 보내지않음

transaction.commit();	//트랜잭션 커밋

Batch를 통해 한번에 SQL을 전송한다.

 

3. 지연 로딩 ( Lazy Loading )

  1) 지연 로딩 : 객체가 실제 사용될 때 로딩

     -> 값을 조회할 때 필요한 값을 바로 조회해오는 것

  2) 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

     -> 근데 조회를 해올 때 매번 같은 값을 가져오면 즉시 로딩 사용하는게 낫기 때문에 옵션으로 변경 가능

지연 로딩과 즉시 로딩은 옵션으로 변경 가능하며, 주로 지연 로딩으로 구현해두고 최적화가 필요할 때만 변경

 

 

인강으로 공부하면서 작성하는 글로 잘못된 정보가 있을 수도 있습니다! 잘못된 정보가 있을 시 댓글달아주세요 : 0

반응형