본문 바로가기
반응형

트랜잭션4

[데이터베이스] 트랜잭션 개념과 스케쥴 종류, Serializability의 종류(Transaction, Serializability, Schedule) Transaction 개념Transaction은 다양한 데이터 항목에 접근하고 업데이트할 수 있는 프로그램 실행 단위이다.Transaction은 데이터베이스의 일관성을 유지하면서 안전하게 데이터를 처리하기 위한 메커니즘으로, 주로 두 가지 주요 문제를 다룬다: 하드웨어 고장이나 시스템 충돌과 같은 다양한 종류의 failure와 여러 transaction들의 concurrent execution이다.Transaction의 기본 예시: 계좌 이체Transaction의 개념을 이해하기 위해 계좌 이체 예시를 살펴보자. 계좌 A에서 계좌 B로 $50을 이체하는 transaction은 다음과 같은 단계로 구성된다:read(A) - 계좌 A의 잔액을 읽는다A := A - 50 - 계좌 A에서 $50을 차감한다wri.. 2025. 5. 18.
[데이터베이스] 무결성 제약 조건(Integrity Constraints), 도메인 설정 SQL 구문 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.