DB 락데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성(일관성)을 보장하기 위해 사용되는 메커니즘 필요성 Dirty Read 트랜잭션 A가 데이터를 수정 중일 때 트랜잭션 B가 그 데이터를 읽는다. 하지만 트랜잭션 A가 롤백된다면 트랜잭션 B는 잘못된 데이터를 읽은 것이 된다. 초기 값: balance = 100트랜잭션 A 시작수정: balance = 100 → 80 (아직 커밋되지 않음)트랜잭션 B 시작읽기: balance = 80 ← Dirty Read 발생작업 진행...트랜잭션 A 롤백 → balance = 100으로 복원트랜잭션 B는 잘못된 balance(80)를 바탕으로 로직을 수행하게 됨 Non-repeatable Read 트랜잭션 A가 데이터를 읽은 후..
1. 캐싱(Caching)이란?캐싱은 데이터를 빠르게 제공하기 위해 자주 사용하는 데이터를 메모리에 저장하는 기술이다. 하지만 캐시를 잘못 사용하면 성능 개선이 아니라 오히려 성능 저하를 초래할 수도 있다. 데이터베이스에 접근하기 전, 캐시를 확인하는 것 또한 결국 응답 시간 지연으로 이어지기 때문에, 적절한 캐싱 전략을 세우는 것이 중요하다. 2. Caching 용어 정리Cache Hit캐시에 접근했을 때 원하는 데이터가 있는 경우Cache Miss캐시에 원하는 데이터가 없는 경우Eviction Policy캐시 공간이 부족할 때 어떤 데이터를 제거할지 결정하는 정책Caching Strategy데이터를 언제 캐시에 저장하고, 언제 캐시를 확인할지에 대한 전략 캐싱은 Cache Hit 비율을 높이고, Ca..
1. Redis의 개념Redis는 오픈소스 인메모리(In-memory) 데이터 구조 저장소이다. Redis의 주요 목표는 높은 성능과 확장성을 제공하는 것으로, 데이터를 주 메모리에 저장하여 빠른 응답 시간을 보장한다. 단일 서버 뿐만 아니라 여러 서버 간 데이터 분산도 지원한다. 2. Redis의 특징높은 성능Redis는 모든 데이터를 메모리에 저장하므로, 디스크 I/O 작업으로 인한 오버헤드가 없는 것이 장점이다. 디스크 기반 DB에 비해 매우 빠른 읽기 및 쓰기 속도를 지원하며, 단일 스레드 모델 기반으로 동작하여 DB 작업을 순차적으로 처리함으로써 동시성 문제를 해결할 수 있다. 다양한 데이터 구조Redis는 String뿐만 아니라 Hash, List, Set, Sorted Set 등 다양한 데이..
ERD Cloud를 이용하다보면, 테이블 간 관계를 설정할 때마다 식별관계와 비식별관계 둘 중 하나를 선택해야 한다. 다수의 프로젝트에서 DB를 설계할 때마다, 나는 마치 정해진 시나리오처럼 비식별관계를 선택해왔다. 그 이유를 명확하게 설명할 수 있도록 짚고 가고자, 식별관계와 비식별관계를 오늘의 포스팅 주제로 선택하게 되었다. 우선, 우리는 식별관계와 비식별관계의 정의부터 알아야 한다. 1. 식별관계식별관계는 부모 테이블의 기본 키 또는 유니크 키를 자식 테이블이 자신의 기본 키로 사용하는 관계이다. 즉 부모 테이블의 키가 자식테이블 데이터를 식별하는 데 사용되므로, 부모 데이터가 없다면 자식 데이터가 입력될 수 없는 구조이다. 따라서 데이터의 정합성을 DB 레벨에서 검증할 수 있다. 예를 들어, 주..