백엔드(Back End)/DataBase13 [TIL]20230825 - Redis Pub/Sub 주식 매매 프로젝트를 진행하던 중 매매를 구현하다보니 매수와 매도를 매칭시켜주어야하는 상황이 생겼다. 우리의 매매 흐름은 어떤 사용자A가 S주식에 대해 500원의 가격으로 구매하고자 한다면 Order테이블에 buyer가 A이고 price는 500인 데이터를 저장한다. 그리고 사용자 B가 S주식을 판매 하려한다면 Order테이블에 S주식에 해당하는 데이터를 확인할 수 있고 가격이 성립한다면 매매가 체결되어 기존 Order테이블에 존재하던 데이터를 삭제하고 거래 내역을 저장하는 Trade테이블에 거래 가격, 거래 주식 수, 판매자, 구매자, 시간 등의 거래 내력을 저장한다. 이 부분은 내가 담당한 부분이 아니었지만 우리 프로젝트에서 가장 중요한 기능 중 하나였고 담당하기로 한분이 해당 기능을 Redis의 P.. 2023. 8. 30. [TIL]20230809 - Redis 클러스터 클러스터란 여러대의 서버를 하나로 묶어 1개의 시스템처럼 동작하게 하는것이다. 클러스터를 구성함으로써 여러 노드에 자동적으로 데이터를 분산하여 높은 성능을 보장하고 특정 서버의 장애가 발생하면 다른 서버로 연결하여 높은 가용성을 보장할 수 있다. 샤딩(Sharding) 샤딩이란 여러 노드 간에 데이터 세트를 자동으로 분할하는 기능이다. 보통 분산 시스템에서 해싱이 사용되는데 Redis는 16384개의 hash slot으로 key공간을 나누어 관리한다. 각 키는 CRC16 해싱 후 16384로 modulo 연산을 해 각 hash slot에 매핑한다. 클러스터 노드는 요청이 온 kwy에 해당하는 노드로 자동 redirect해주지 않고 MOVED에러를 보낸다. 클라이언트는 MOVED 에러를 받으면 해당 노드로.. 2023. 8. 10. [TIL]20230805 - Redis활용하여 캐시레이어 만들기 캐시(Cache)란 성능향상을 위해 값을 복사해놓는 임시 기억 장치이다. 캐시에 복사본을 저장해놓고 읽음으로써 속도가 느린 장치로의 접근 횟수를 줄이는 방식으로 구현되며 캐시의 데이터는 원본이 아니며 언제든 사라질 수 있다. 캐시 적중(Cache Hit) : 캐시에 접근해서 데이터를 발견함 캐시 미스(Cache Miss) : 캐시에 접근했으나 데이터를 발견하지 못함 캐시 삭제 정책(Eviction Policy) : 캐시의 데이터 공간 확보를 위해 저장된 데이터를 삭제 캐시 전략 : 환경에 따라 적합한 캐시 운영방식을 선택할 수 있음(Cache-Aside, Write-Through...등) 캐시 전략 Cache_Aside(Lazy Loading) 항상 캐시를 먼저 체크하고, 없으면 원본(ex: DB)에서 .. 2023. 8. 6. [TIL]20230804 - Redis의 Data Type 1. String 가장 기본적인 데이터 타입으로 제일 많이 사용된다. 바이트 배열을 저장한다. 이때 Binary-safe 방식으로 저장하게 되는데 Binary-safe란 데이터 손실 없이 null바이트를 포함한 모든 바이트 시퀀스를 저장, 처리, 조작할 수 있는 문자열 처리 방식이다.인코딩에 특화된 문자열을 읽는 것이 아니라 원시 바이트 그대로를 다루기 때문에 텍스트 데이터 뿐만 아니라 이미지, 오디오, 직렬화된 객체 등의 처리도 가능하다.(.JPG ...) 최대 크기는 512MB이다. 2. Lists Linked-list 형태의 자료구조로써 인덱스 접근은 느리지만 데이터 추가/ 삭제가 빠른 자료구조이다. 조작 방법에 따라 Queue와 Stack으로 사용할 수 있다. 3. Sets 순서가 없는 유니크한 .. 2023. 8. 4. [TIL]20230803 - Redis의 특징 개요 Redis는 가장 손쉽게 사용할 수 있고 많이 사용되는 In-memory저장소 이다. Redis는 높은 성능, 다양한 활용성을 보여주며 현대적인 서버 구조에서 세션관리나 캐시는 빠질수 없는 구성요소이다. Redis(Remote Dictionary Server) 는 다음과 같은 성질을 가진다. Storage : 데이터 저장소 (데이터 관점) DataBase : 전통적인 DBMS의 역할을 수행 (영속성 관점) Middleware : 어플리케이션이 이용할 수 있는 유용한 기능을 제공하는 소프트웨어 Redis를 활용하면 아주 빠른 데이터 저장소로 활용가능하고 분산된 서버들간의 커뮤니케이션이 가능하며 내장된 다양한 자료구조를 활용한 기능구현이 가능하다. Redis는 In-memory저장소라 하였는데 In-m.. 2023. 8. 4. [TIL]20230802 - 트랜잭션 격리 수준 트랙잭션은 ACID의 Isolcation에 따라 서로 간섭하지 않고 독립적으로 동작한다. 때문에 동시에 여러 트랜잭션이 진행될 때 트랜잭션의 작업 결과를 여타 트랜잭션에게 어떻게 노출한것인지를 격리 수준을 통해 결정해야한다. 다음과 같은 격리수준이 있다. READ_UNCOMMITTED READ_COMMITTED REPEATABLE_READ SERIALIZABLE READ_UNCOMMITTED 커밋하지 않은 데이터조차 접근할 수 있는 격리수준으로 다른 트랜잭션의 작업이 커밋 또는 롤백 되지 않아도 변경되는 즉시 접근할 수 있다. 때문에 다음과 같은 현상이 발생한다. 사용자 A의 트랜잭션에서 테이블에 id가 51인 멤버데이터를 삽입한상태이고 아직 커밋하지 않은 상태이지만 사용자 B는 해당 데이터에 접근이 가.. 2023. 8. 3. 이전 1 2 3 다음