본문 바로가기

데이터베이스3

ANSI SQL-92에 대한 비평 (원문 : A Critique of ANSI SQL Isolation Levels) - 다양한 이상현상들 지난번에는 제가 조사한 내용을 바탕으로 간략한 역사와 논문이 나오게 된 이유를 알아봤습니다. 해당 분야에 전문가가 아니기 때문에 반드시 참고자료를 확인하시길 바랍니다. 또한 피드백은 적극 환영합니다! 그렇다면 논문에서 제시하는 고립 수준과 이상현상은 무엇일까요? 또한 굳이 알 필요가 있을까요? 제 생각은 '모든 내용을 알 필요는 없지만, 대략적인 내용은 알고 있어야 한다.'입니다. 왜냐하면 DBMS마다 고립 수준을 나타내는 용어도 다르고 그들이 구현한 방법도 다릅니다. 또한 논문이 제시된 이유가 '모호함을 개선'이기 때문에, 이러한 '모호함에서 발생할 수 있는 문제'가 있을 것입니다. 즉, 데이터베이스의 선택 혹은 발생한 문제를 빠르게 이해하는데 도움이 된다고 생각합니다. 1. 개요 저번 글에서도 확인하.. 2023. 1. 13.
Spring Batch 페이징 쿼리 성능 개선하기 진행한 프로젝트에서는 인증 메일 전송을 Spring Batch를 활용해서 구현했습니다. Spring Batch에서는 2개의 Reader를 제공하는데, Cursor와 Paging입니다. Cursor는 데이터베이스와 커넥션을 맺은 후 Cursor를 옮겨가며 데이터를 조회합니다. 반면에 Paging은 페이지 단위로 데이터를 한 번에 조회해오는 방식입니다. limit과 offset을 pageSize에 맞게 자동으로 생성해서 전달해 줍니다. 사용자가 갑자기 몰릴 경우에 Cursor 방식보다 Paging 방식이 더 효율적인 구현이라 판단하고 Paging 방식을 선택하였습니다. Paging방식으로 ItemReader 인터페이스를 구현한 다양한 구현체들이 있는데, 현 프로젝트에서 사용하는 것은 Mybatis이기 때문에.. 2023. 1. 4.
왜 트랜잭션 격리 수준을 나눴을까? 트랜잭션 격리 수준(Transaction Isolation Level)을 학습하던 도중 의문점이 생겼다. 왜 트랜잭션 격리 수준을 나눴을까? java.sql 패키지에 있는 Connection 인터페이스 안에서 아래와 같은 코드를 확인할 수 있었다. public interface Connection extends Wrapper, AutoCloseable { ... int TRANSACTION_NONE = 0; int TRANSACTION_READ_UNCOMMITTED = 1; int TRANSACTION_READ_COMMITTED = 2; int TRANSACTION_REPEATABLE_READ = 4; int TRANSACTION_SERIALIZABLE = 8; void setTransactionIsol.. 2022. 7. 24.