이번에는 트랜잭션 관심 분리와 애플리케이션 이벤트 활용에 대해 설계문서를 작성해볼 것입니다.시나리오는, 좌석 예약 시나리오로 플로우는 다음과 같다.1 예약정보 저장 2 계좌 정보에 고객정보 있는지 확인2.1 계좌 정보에 고객 정보가 없다면 계좌 정보에 고객 정보 생성3 결제 내역 생성4 결제 히스토리에 결제 5 해당 고객 계좌 정보에 차감금액 입력위 플로우는 하나의 트랜잭션으로 묶인다.코드는 다음과 같다. @DistributedLock(key="#userId") public boolean payForPreReservedSeat(int amount, Long userId) throws Exception { Reservation reservation = jpaReservationCor..
사용자가 임의로 서비스에 접근할 때 서버의 처리비용 그리고 DB의 처리비용을 완화하려고 대기열 구현을 하는 것은 흔할 수 있다. 선착순 문제라고 생각하면 쉽다.대기열 순번을 구현할 때, 순번은 어딘가에 영속적으로 저장되어야하는데 DB와 Redis 두 개를 선택사항을 두고 고민했고, 나는 대기열을 이용할 때 Redis를 활용했다. 왜냐하면 다음과 같은 이유가 있다.1. 대기표 순번은 아주 단기간에 몰리는 트래픽을 처리하는데 사용할 필요가 있다. Read, Write 비용이 높다.2. 피크 타임에 단기간에 몰린 뒤 서비스가 완료된 뒤 그 이후에는 필요가 없다. 즉, DB에 쌓는다면 필요없는 레코드가 수백만건이 쌓일 것이다. 무언가가 배치로 DB Table로 부터 레코드를 지워야한다. 그러나 Redis를 활용..
항해 99 과정서 콘서트 좌석 관련 테이블 형태는 다음과 같다.제약조건: 좌석수: 1~50콘서트수: 1~200좌석상태: EMPTY, RESERVEDseat_number: 좌석 정보 show_id: 콘서트 아이디occupied_status: EMPTY, RESERVED 이다.1번 콘서트에서 잔여좌석 확인때 다음과 같이 수행한다.select * from seat_info where occupied_status = "EMPTY" and show_id = 1;Explain view로 보면 Full Table Scan을 수행한다. 여기서 풀테이블 스캔을 피해가려면 Index를 걸 수 있다.Index는 Cardinality가 큰 녀석을 걸면된다. 직감적으로 show_id에 걸면 될 것이다.(1~50)이므로.Ind..
- Total
- Today
- Yesterday
- 로젠
- rosen
- Arena
- Discrete Mathematics
- 시뮬레이션
- Grafana
- 백준
- Simulation
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- beginning javascript
- 이산수학
- 아레나
- 아레나시뮬레이션
- 자바스크립트 예제
- arena simulation
- javascript
- 최단경로 알고리즘
- grafana cloud
- 데이터 중심 애플리케이션 설계
- flutter
- Propositional and Predicate Logic
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- paul wilton
- 명제논리
- 항해99
- 이산 수학
- 자바스크립트
- 아레나 시뮬레이션
- 대규모 시스템 설계 기초
- 그라파나
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |