반응형 트랜잭션3 [데이터베이스] 트랜잭션과 무결성 제약 조건, 도메인 Transactions트랜잭션: 하나의 작업 단위로 간주되는 질의 및/또는 갱신 명령문의 순서시작과 종료SQL에서는 명시적인 시작 없이 SQL 문이 실행되면 트랜잭션이 자동으로 시작됨트랜잭션은 아래 중 하나로 종료해야 함:COMMIT WORK: 변경 사항을 영구 반영ROLLBACK WORK: 수행된 변경 사항을 모두 취소트랜잭션 특성Atomic(원자성): 전부 수행되거나, 전혀 수행되지 않아야 함Isolation(격리성): 동시에 실행되는 다른 트랜잭션으로부터 독립적으로 수행(concurrent)Integrity Constraints(무결성 제약 조건)무결성 제약 조건은 데이터베이스 손상 방지를 위해 사용됨데이터 변경 시 일관성(consistency) 을 유지하도록 강제함예시 제약 조건당좌예금 계좌는 $.. 2025. 4. 1. [Spring boot jpa] 연관된 엔티티 불러올때 LazyInitializationException 발생하는 문제 해결 지연 로딩하려 할 때 세션/entityManager이 닫혀 LazyInitializationException이 발생하는 문제 @OneToMany 관계에서 fetch의 기본값은 LAZY이다.@OneToMany(mappedBy = "house", cascade = CascadeType.ALL)private List rooms = new ArrayList();원인지연 로딩(Lazy Loading) 관련 오류FetchType.LAZY는 엔티티 관계에서 연관된 다른 엔티티를 지연 로딩 방식으로 로딩하겠다는 의미이다.그러나 지연 로딩을 사용하는 엔티티가 프록시 객체로 반환되기 때문에, 실제로 해당 엔티티가 사용될 때까지 로딩되지 않는다.이 때문에, 관계된 엔티티가 사용될 때 LazyInitializationExce.. 2025. 1. 25. [Spring boot jpa] 찜하기/좋아요 api에서 나온 race condition 문제 해결 찜하기 기능을 구현하기 위해 하나의 PATCH API를 사용하였고, 이를 통해 찜하기와 해제 기능을 동시에 처리하도록 설계했습니다. 그러나 다량의 찜하기/해제 요청이 동시에 들어오면서, user_id와 house_id가 같은 pin 엔티티가 중복 생성되는 문제가 발생하였고, 이에 따라 서버 오류가 발생했습니다. 아래와 같이 다대다 관계로 찜/좋아요 기능을 위해 엔티티를 설계했습니다.@Entity@Table(name="pin")@Datapublic class Pin { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY, cascade = Casc.. 2025. 1. 24. 이전 1 다음