JPA
-
격리 전략Java/JPA 2020. 10. 25. 21:09
격리 전략 JPA는 데이터 베이스 트랜잭션 격리 수준을 Read Committed을 기본으로 사용하며, 더 높은 격리 수준이 필요한 경우 낙관적 락이나 비관적 락을 사용해야 한다. 낙관적 락(Optimistic Lock) 낙관적 락은 엔티티의 Version 필드를 검사해서 버전정보를 체크하여 업데이트를 처리하는 방법이다. (애플리케이션에서 제공하는 락) 엔티티에서 버전정보로 사용할 필드에 @Version 어노테이션을 부여하고 테이블에 버전 정보로 사용할 컬럼을 생성해야 한다. UPDATE table SET col = ? Version = Version + 1 (트랜잭션이 UPDATE 할 때 마다 버전 값 증가) WHERE ID = ? AND Version = ? (버전 비교) 위의 쿼리를 실행했을 때, ..
-
영속성 컨텍스트Java/JPA 2020. 10. 23. 01:31
영속성 컨텍스트(Persistence Context)란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 뜻한다. 애플리케이션과 데이터 베이스 사이에서 레이어(영속성 컨텍스트)를 두어 엔티티 객체를 관리하기 위한 공간으로 사용된다. 영속성 컨텍스트를 조금 더 알기 위해서는 몇가지를 알고 넘어가야 한다. 엔티티 매니저란? 엔티티 매니저는 엔티티의 CRUD와 같이 엔티티와 관련된 모든 작업들을 처리하는 관리자다. JPA는 매 요청마다 EntityManagerFactory에서 EntityManager를 생성해주고, DB 커넥션 풀을 사용하여 데이터 베이스에 연결한다. * 엔티티 매니저는 여러 쓰레드가 하나의 엔티티 매니저에 접근하면 동시성 문제가 발생한다!!! 는데 무슨 이야기일까..?🤔 외부로부터 요청이 발..
-
JPA(Java Persistence API)Java/JPA 2020. 8. 7. 02:45
JPA란? JPA는 자바의 ORM 표준 명세다. 과거에 엔터프라이즈 자바 빈즈(EJB) 기술 표준이 있었는데, EJB에는 엔티티 빈(Entity Bean)이라는 ORM 기술이 있었다. 이 엔티티 빈은 자바 엔터프라이즈 (J2EE)환경에서만 동작하는 한계가 있었고 사용하기에 복잡하고 어려운 문제들이 있었다. 이러한 단점들을 해결하기 위해 하이버네이트 ORM 프레임워크가 등장하게 되었고 EJB 3.0에서 하이버네이트를 기반으로 '새로운 ORM 기술들을 정의하여 표준으로 지정해 JPA가 탄생'하게 되었다. JPA는 ORM에 관련된 기능 인터페이스들의 집합체이다. 이러한 기능들을 구현한 ORM 프레임워크를 선택하여 조합해야 사용할 수 있다. ORM 프레임워크 종류 Hibernate (링크) EclipseLink..
-
[JPA] @Scheduled 어노테이션과 트랜잭션 처리이슈 해결 2019. 7. 23. 11:53
회사에서 특정 주기에 따라 사용자들의 상태를 변경하는 서비스가 필요해서 배치 프로그램을 만들려고 했다가 우연히 Okky 사이트를 통해 @Scheduled 어노테이션이 스케쥴링 기능을 제공한다는 것을 알게되서 처음으로 이 기능을 사용해 DB 조작을 해보기로 했다. 대략 코드는 다음과 같았다. UserStateService @Service public class UserStateService { @Autowired private UserRepository userRepo; @Scheduled(cron = "10 * * * * *") @transactional public void clearState() { LocalDateTime endDate = LocalDateTime.now(); List findUse..