본문 바로가기

분류 전체보기51

[Redis] Redis 캐싱 전략 패턴 정리 레디스는 인메모리 데이터 스토어로, 디스크 기반의 데이터베이스보다 빠르게 데이터를 응답할 수 있어 고객에게 빠르게 서비스를 제공할 수 있다. 하지만 메모리 용량은 16GB ~ 32GB 정도로 제한적이기 때문에 모든 데이터를 저장하기에는 용량 부족 현상이 일어날 수 있다.따라서 어떤 데이터를 저장할 것인지, 얼마나 데이터를 캐싱할 것인지, 어떤 데이터를 제거할 것인지에 대한 전략이 필요하다. 읽기 전략Look-Aside : 서버가 캐시를 먼저 조회하고, 캐시에 없을 경우 데이터베이스를 조회한다.Read-Through : 캐시를 통해서만 데이터를 읽어오는 전략이다. 쓰기 전략Write-Back : 모든 데이터를 캐시에 저장하고, 일정 시간 뒤에 데이터베이스에 저장한다.Write-Through : 데이터를 캐.. 2024. 10. 20.
[친절한 SQL 튜닝] NL 조인, 소트 머지 조인, 해시 조인 01. NL 조인조인의 기본은 NL 조인이다.중첩 루프문의 수행 구조를 사용한다.양쪽 테이블의 인덱스를 이용하는 조인이다. '인덱스를 이용한 조인 방식' NL 조인 메커니즘인덱스 사용 : NL 조인은 양쪽 테이블 모두 인덱스를 사용한다.Outer 테이블(Driving)을 순차적으로 읽어 조건을 만족하는 행을 Inner 테이블에 탐색한다.SELECT e.사원명, c.고객명, c.전화번호FROM 사원 e, 고객 cWHERE e.입사일자 >= '19960101'AND c.관리사원번호 = e.사원번호 (1) 사원 인덱스에서 조건에 맞는 첫 번째 레코드를 찾는다.(2) 인덱스에서 읽은 ROWID로 사원 테이블 레코드를 찾는다.(3) 사원 테이블에서 읽은 사원번호로 고객 인덱스를 탐색한다.(4) 고객 인덱스에서 읽.. 2024. 6. 16.
[친절한 SQL 튜닝] 인덱스 튜닝 (2) : 인덱스 스캔 효율화, 인덱스 설계 작년에 면접 준비를 하면서 DB 인덱스에 대해서 정리한 내용이 있다. https://minnseong.tistory.com/19 [DB] Index 정리Index 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스의 검색 속도를 향상하기 위한 자료구조 Index를 통해 검색 속도 향상과 조회 성능을 높일 수 있다. Index를 사용하지 않는 칼럼을 조minnseong.tistory.com 제 3장. 인덱스 튜닝은 내용이 많아 두 파트로 나눠 정리를 했다.인덱스 튜닝 (1) : 테이블 액세스 최소화, 부분범위 처리 활용인덱스 튜닝 (2) : 인덱스 스캔 효율화, 인덱스 설계 01. 액세스 조건과 필터 조건액세스 조건인덱스 스캔 범위를 결정하는 조건절인덱스 수적적 탐색을 통해 스캔 시작점을 결정하는 데 .. 2024. 6. 13.
[Spring] 선착순 쿠폰 발급 요구사항 개발 (Redis, Kafka) 이번 포스팅에서는[Inflearn] 실습으로 배우는 선착순 이벤트 시스템 에서 실습한 내용을 기록하고자 하며, 아래 2가지 요구 사항을 만족하고 있다. 1. 쿠폰의 한정된 수량을 초과해서는 안된다.2. 쿠폰은 중복 지급이 불가하여, 1인당 1장만 지급되어야 한다. 위의 요구사항을 만족시키고, 아래 문제를 해결하기 위해 아래 기술을 사용하였다. 선착순이라는 특성으로, 동시성 문제가 반드시 발생할 것이라 예상하고 이를 해결하기 위해 Redis를 활용한다.INCR 커맨드 사용 : 쿠폰의 한정된 수량을 초과하지 못하도록 한다.SET 자료구조 사용 : 쿠폰을 1인당 1장만 지급되어야 하기 때문에 SET 자료구조를 사용하여 중복 지급을 막는다.Redis를 활용하여 동시성 문제를 해결할 수 있었으나, 동시에 많은 요.. 2024. 5. 16.
[Spring] AOP 기반 Redis 분산락 적용 분산 시스템은 인터넷을 통해 연결된 컴퓨터가 하나의 시스템처럼 동작하는 환경을 말한다.따라서, 높은 처리량과 확장성, 고가용성을 보장해 준다. 하지만 분산 시스템은 데이터의 일관성 유지와 트랜잭션 관리 등 여러 복잡한 문제를 해결해야 하는 경우가 존재한다. 특히, 여러 노드가 동시에 공유 데이터를 변경하려고 할 때, 동시성 문제가 발생하여 데이터의 일관성이 무너지게 된다. 이를 방지하기 위해서는 분산락을 사용할 수 있고, 분산 락은 여러 노드가 동시에 접근 가능한 자원에 대한 접근을 하나의 노드만 접근할 수 있도록 제한한다. 이번 포스팅에서는[Inflearn] 재고시스템으로 알아보는 동시성이슈 해결방법 에서 배운 Redis를 활용하여 분산락을 구현하는 2가지 방법과유익한 블로그 글이었던 Kurly Tec.. 2024. 5. 11.
[Spring] JPA 낙관적 락 & 비관적 락 인프런에서 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 들으면서 배운 내용과 추가로 공부한 내용을 기록하려고 한다. 강의를 들으면서, 코드는 아래 링크에 기록해 두었다.https://github.com/minnseong/study-labs/tree/main/stock-system-concurrency-issue  Lock에 대해서 정리하기 전에 강의를 다 듣고 나서, 락을 사용하지 않고 트랜잭션 격리 수준을 통해 동시성 문제를 해결할 수 있지 않을까 라는 고민을 하게 되었다. 격리 수준을 SERIALIZABLE로 설정한 후 강의에서 제공한 테스트 코드를 돌려본 결과, 무수히 데드락이 발생하는 것을 확인할 수 있었다. 당연히 동시성은 잡지 못했다.@Service@RequiredArgsConstruct.. 2024. 5. 8.