개발/JPA

개발/JPA

낙관적 락, 비관적 락, 네임드 락

JPA는 데이터베이스 트랜잭션 격리 수준을 READ COMMITTED 정도로 가정한다. 만약 일부 로직에 더 높은 격리 수준이 필요하면 낙관적 락과 비관적 락 중 하나를 사용하면 된다. 추가적으로 네임드 락에 대해서도 다시 정리해보겠다. 낙관적 락 (OptimisticLock) 낙관적 락은 이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 말이다. DB가 제공하는 락 기능을 사용하는 것이 아니라 JPA가 제공하는 버전 관리 기능을 사용한다. 즉 애플리케이션이 제공하는 락이다. 낙관적 락은 트랜잭션을 커밋하기 전까지는 트랜잭션의 충돌을 알 수 없다는 특징이 있다. 충돌이 빈번하지 않을 때 사용하는 것이 좋다. 충돌이 빈번하다면 비관적 락을 사용하는 것이 성능상 이점이 있다. 실패했..

개발/JPA

Spring Bean으로 등록된 EntityManager

자바 동적 프록시 기술을 알고 읽으시는 게 좋습니다!!! JPA를 처음에 배우면 엔티티 매니저는 여러 스레드가 동시에 접근하므로 스레드 간 공유하면 절대 안된다고 학습한다. 그러나 스프링 부트 애플리케이션을 돌려보면 처음에 엔티티 매니저가 스프링 빈으로 등록되는 것을 확인할 수 있다. '스프링 부트 자동 구성을 통해 엔티티 매니저가 스프링 빈으로 등록, 즉 싱글톤으로 사용이 되는 거 같아' 위와 같은 의문점이 들었고, 이에 관련해서 구글에 찾아보기 시작했다. 결론을 말하면 스프링 빈으로 등록되는 것은 엔티티 매니저 가짜 객체고 실제 애플리케이션에서 로직이 수행될 때 진짜 엔티티 매니저가 사용된다는 것이다. 이러면 쓰레드 세이프하다고 말할 수 있다. 단순히 그렇구나 하고 넘어간 것을 오늘은 눈으로 확인해보..

개발/JPA

Spring Data JPA 정리

강의를 수강한지 1년이 되가는 Spring Data JPA에 대해 정리해보도록 하겠습니다. Spring Data JPA 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. CRUD 처리를 위한 공통 인터페이스를 제공하며, 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 인터페이스를 구현한 객체를 동적으로 생성해서 주입한다. 이 밖에도 많은 JPA의 기능을 편리하게 사용할 수 있도록 지원한다. 본격적으로 살펴보자. 공통 인터페이스 스프링 데이터 JPA에서 제공하는 공통 인터페이스 JpaRepository에 대해 살펴보자. //JpaRepository 공통 기능 인터페이스 public interface JpaRepository..

개발/JPA

스프링 부트와 JPA 활용 정리

스프링 부트와 JPA 강의 1편, 2편을 본지 거의 1년이 되어가는 상황이다. 남은 방학을 불태우자는 생각으로 복습을 진행했는데, 이번 기회에 한 번 글로 잘 정리해두려고 한다. 스프링 부트와 JPA 1편과 2편에서 느낀점과 중요한 부분을 남겨보겠다. 스프링 부트와 JPA 활용1 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의 실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게..

Debin
'개발/JPA' 카테고리의 글 목록