본문 바로가기
반응형

전체 글257

낙관적 락과 비관적 락 JPA 영속성 컨텍스트 ( 1차 캐시 ) 를 적절히 활용하면 데이터베이스 트랜잭션이 Read Committed 격리 수준이어도 애플리케이션 레벨에서 반복 가능한 읽기 REPEATABLE READ가 가능합니다. 물론 엔티티가 아닌 스칼라 값을 직접 조회하면 영속성 컨텍스트의 관리를 받지 못하므로 반복 가능한 읽기를 할 수 없습니다. JPA는 데이터베이스 트랜잭션 격리 수준을 READ COMMITTED 정도로 가정한다. 만약 일부 로직에 더 높은 격리 수준이 필요하면 낙관적 락과 비관적 락 중에 하나를 사용하면 됩니다. 스칼라 타입숫자, 문자, 날짜와 같은 기본 데이터 타입     낙관적 락  낙관적 락트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법데이터베이스가 제공하는 락 기능을 사용하.. 2024. 11. 3.
빈 스트림에 allMatch를 할 경우 true 반환 Java 8(or 17) 로 이루어진 프로젝트를 진행 중 Stream API의 allMatch 메서드에서 이상한 점을 발견했습니다.Empty Collection에 allMatch를 수행했더니, Predicate가 적용될 요소가 없어서 False가 나올 줄 알았으나 True를 반환하는 것이었습니다. 어떻게 된 상황인지 Stream API 코드를 살펴보기로 했습니다. 테스트 코드입니다.@Testpublic void test(){ List list = Arrays.asList(); final boolean isResult = list.stream().allMatch(e -> e >= 2); assertFalse(isResult);} 스택트레이스입니다.tryAdvance:1003, Spliter.. 2024. 10. 27.
트랜잭션 격리 수준 트랜잭션은 ACID라는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability) 를 보장해야 합니다. 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든가 모두 실패해야 합니다.일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 합니다.격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리합니다.지속성: 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 합니다. 이번 포스팅에서는 격리성에 대해서 알아보겠습니다. 트랜잭션 간에 격리성을 완벽히 보장하려면 트랜잭션을 거의 차례대로 실행해야 하며, 이 경우 동시성 처리 성능이 매우 나빠집니다.격리 수준은 4단계가 있습니다. READ_.. 2024. 10. 26.
에러) Column in field list is ambiguous 원인SQL 쿼리에서 동일한 이름의 컬럼이 여러 테이블에 존재할 때 발생합니다.이 경우 MySQL이 어느 테이블의 컬럼을 사용할지 명확하지 않기 때문에 이 에러를 발생시킵니다.SELECT id, nameFROM users u INNER JOIN orders o ON u.id = o.user_id 해결 방법테이블 명시하기 (또는 별칭 사용하기)동일한 이름의 컬럼이 있을 경우, 어느 테이블의 컬럼을 사용할 것인지 명확하게 지정합니다.SELECT u.id, u.name, o.idFROM users u INNER JOIN orders o ON u.id = o.user_id 2024. 10. 23.
반응형