메시지 큐와 카프카
·
Kafka
메시지 큐란?메시지 큐는 분산된 환경에서 프로세스나 프로그램의 시스템 간 데이터를 교환하기 위해 사용되는 통신 기법이다. 그리고 메시지를 일시적으로 저장하는 큐(queue)로 송신자(producer)와 수신자(receiver/consumer) 간비동기 통신을 가능하게 한다. 메시지 큐 사용 이유이러한 메시지 큐를 사용하는 이유가 뭘까?비동기 처리 : 메시지 큐를 사용하면 producer와 consumer가 독립적으로 작동할 수 있다.이는 producer는 메시지를 큐에 넣고 바로 다음 작업을 처리할 수 있고, consumer도 메시지를 수신하며 자신의 속도에 맞게 메시지를 처리할 수 있다.느슨한 결합 (decoupling) : 시스템 간 서로 직접 통신하지 않고 메시지 큐를 이용하기 때문에 시스템의 각..
2024년 5월 2주차 주간회고
·
성장이야기/주간회고
애플리케이션 성능 향상이번 주차는 인덱스와 캐시를 이용해 기존 애플리케이션의 성능을 높이는 것이 주요 목표였다. 애플리케이션의 성능을 높이기 위해서는 여러 가지 방법이 존재하겠지만 그 중 이번에는 DB의 성능 튜닝과 캐시를 이용하여 애플리케이션의 성능을 향상해보았다. 저번주와 마찬가지로 이번주도 인덱스의 대한 이해를 위해 Real MySQL8.0의 인덱스 챕터 부분을 읽고 시작한 게 매우 도움이 되었다.그 중 DB 성능 튜닝의 핵심은 "어떻게 디스크 I/O를 줄이느냐가 관건"이라는 것을 배웠다. 디스크의 I/O를 줄이는 방법으로는 인덱스를 이용해 DB를 최적화하는 방법과 캐싱 방법이 존재한다. 인덱스인덱스를 통한 효율적인 쿼리로 불필요하게 데이터에 접근하는 것을 줄일 수 있기 때문에, 인덱스에 대해 공..
[E-commerce] 캐시를 통한 애플리케이션 성능 개선
·
Database
Redis 캐시 읽기 전략Look Aside (Cache Aside)데이터를 조회할 때, 캐시에 저장된 데이터가 읽는지 확인하고 없으면 DB에서 조회하는 전략캐시에 장애가 생겨도 DB에서 조회하면 되기 때문에 캐시 장애가 애플리케이션에 영향을 미치지 않는다.동일 조회 쿼리가 반복적으로 발생하는 상황에서 적합한 전략Read ThroughLook Aside 전략과 다르게 데이터를 캐시에서만 조회하는 전략조회하려는 데이터가 캐시에 없으면 캐시에서 DB에 접근하여 조회 후 캐시에 저장DB에 접근하는 횟수를 줄여 성능을 높일 수 있지만 캐시에 장애가 발생할 경우 애플리케이션에 영향을 미친다.Redis 캐시 쓰기 전략Write Back비동기로 캐시와 DB를 동기화 한다.DB에 저장할 데이터를 캐시에 저장해두었다가..
[E-commerce] 쿼리 분석 및 인덱스 설계를 통한 성능 개선
·
Database
인덱스(Index)인덱스는 책의 목차와 비슷하다고 생각하면 편하다.책의 목차를 보고 어디에 무엇이 있는지 바로 확인할 수 있는 것 처럼 인덱스도 바로 찾고자 하는 데이터를 찾을 수 있다. 목차도 "ㄱ", "ㄴ" 순으로 정렬되어 있는 것 처럼 인덱스도 정렬되어 보관이 된다.그래서 미리 정렬된 상태에서 새로운 인덱스를 추가,삭제, 변경하는 작업은 느리지만 조회(SELECT)하는 작업은 빠르게 처리 가능하다. 즉, 인덱스는 데이터 저장 성능을 희생하고 데이터의 읽기 속도를 높이는 기능이다.B-TreeB-Tree는 칼럼의 원래 값을 변형시키지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지한다.B-Tree는 트리 구조이며, 최상상위에 "루트 노드(Root node)"하나가 존재하며, 하위에 자식 노드가 붙..
2024년 5월 1주차 주간회고
·
성장이야기/주간회고
대용량 트래픽 & 데이터 처리 챕터 시작본격적으로 대용량 트래픽과 데이터를 처리하기 위한 과정이 시작되었다. 이번주는 현재 이커머스 서비스에서 발생할 수 있는 동시성 상황들을 분석해 보고 여라가지 방법들의 각각의 장단점을 파악하여 직접 동시성 문제를 해결해 보았다. 우선 나는 이전까지 개인적으로 진행하는 프로젝트나 실무에서 조차 동시성 문제를 직접 고려해 본 적이 없다. 그래서 어떤 상황에서 동시성이 발생하는지 1도 모르고 더군다나 DB에 대한 공부를 거의 하지 않아서 어떻게 해결해야 하는지 1도 모르는 상황이었다.  그래서 DB를 먼저 공부해야겠다고 생각을 하여 현재 주로 사용하는 DB인 MySQL을 공부하기 위해 Real MySQL8.0을 사서 먼저 트랜잭션과 잠금 파트를 읽어보았다.덕분에 MySQL..
[E-commerce] 동시성 문제 해결하기 (비관적 락, 네임드 락, 분산 락)
·
트러블슈팅
이커머스 서비스에서 발생할 수 있는 동시성 문제들을 정리하고, 다양한 방법으로 동시성 문제를 해결해 보며 겪은 경험들을 공유해 보자 합니다. 동시성 문제가 발생할 수 있는 유즈케이스Case 1 (조회한 상품 재고 수량이 맞지 않는 경우)1. 사용자 A가 재고가 5개인 상품을 조회하고 재고 1개 차감 요청, 트랜잭션 시작2. 사용자 B가 동시에 동일 상품의 상품을 조회, A의 트랜잭션이 아직 커밋되지 않았기 때문에 재고가 5개인 것으로 확인3. 사용자 A의 트랜잭션이 커밋되어 실제 재고는 4개로 업데이트4. 실제 상품의 재고는 4개이지만 사용자 B가 조회한 상품의 재고는 5개로 재고 정합성 불일치 문제 발생 Case 2 (동시에 상품을 주문할 때, 상품의 재고가 부족한 경우)1. 사용자 A가 재고 3개 차..