JPA (3) 썸네일형 리스트형 낙관적 락과 비관적 락을 사용해 동시성 제어하기 - 1 프로젝트를 진행하다보면 빈번하게 동시성 문제를 만나게 된다. 이에 동시성 문제를 해결하는 여러 방법들을 기록하려한다.동시성 문제란?동시성 문제는 2개 이상의 스레드 혹은 세션이 공유 자원에 동시에 접근하여 데이터를 읽고 쓰는 과정에서 충돌이 발생하는 문제로, 하나의 트랜잭션에서 데이터를 수정 중일 때, 다른 트랜잭션에서 수정 전의 데이터를 조회하고 로직을 처리함으로서 데이터의 정합성이 깨지는 문제를 말한다. 주변에서 쉽게 접할 수 있는 문제 발생 사례로는 재고 관리시 재고 이력과 수량이 일치하지 않는 문제가 있다. 동시성 문제를 해결하기 위해 대표적으로 사용되는 방법으로는 낙관적 락과 비관적 락을 사용해 어플리케이션 및 데이터베이스에서 동시성을 제어하는 방법이 있다.낙관적 락이란?낙관적 락은 트랜잭션간 .. JPA에서 soft delete 처리하기 (@Where, @Filter) JPA에서 soft delete 처리하는 방법에 대해 알아보겠습니다. hard delete와 soft delete 데이터를 삭제할 때 크게 hard delete(물리 삭제)와 soft delete(논리 삭제) 두 가지 방법이 있습니다. hard delete hard delete는 SQL의 delete 명령어를 사용하여 직접 데이터를 삭제하는 방법입니다. hard delete의 경우 delete 쿼리가 발생하기 때문에 삭제 후 DB에서 조회할 수 없습니다. 장점으로 select시 성능이 soft delete보다 상대적으로 좋습니다. 단점으로 삭제된 데이터를 복구하기 어렵고, 비즈니스에 데이터를 활용할 수 없습니다. soft delete soft delete는 SQL의 update 명령어를 사용하여 특정 컬.. @Column(nullable = false) 와 @NotNull 중 무엇을 사용해야 할까? 개인 프로젝트 도중 Entity에 DB 제약조건을 적용하다가 궁금점이 생겼다. @Column(nullable = false) // User.java @Entity @Table(name = "user_table") @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @EntityListeners(AuditingEntityListener.class) public class User extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true, nullable = false) @Email private Strin.. 이전 1 다음