여기서 주문정보전달은 결제의 부가적인 로직이기 때문에 분리 되어야 한다. 주문정보전송은 sendOrderInfo는 대충 목으로 만들어줬다. 1) 주문정보 전송이 늦어지면 결제처리에 대한 프로세스도 함께 지연된다. 2) 데이터 수집 플랫폼으로 주문데이터가 전달 api가 실패했을 떄, 결제가 취소된다. 3) 데이터 수집 플랫폼으로 주문데이터 전달 api가 timeout이 발생했을 떄도 결제가 취소된다.- 반대로 데이터 수집플랫폼은 실패한 결제임에도 저장이되고, 우리 시스템에서는 결제 실패가 되어 데이터가 맞지 않게된다. 위의 코드는 예이다. 제대로 작동하진 않을 것이다 (aop로 돌아가는 트랜잭션이기에?) 1) 이렇게 트랜잭션을 나눈다면?- 데이터는 정상적으로 결제에 대한 트랜잭션이 있어 결제만 관리가된..
🙂개요 - 나의 시나리오에서 수행하는 쿼리들을 수집해보고, 필요하다고 판단되는 인덱스를 추가하고 쿼리의 성능개선 정도를 작성하여 제출자주 조회하는 쿼리, 복잡한 쿼리 파악Index 추가 전후 Explain, 실행시간 등 비교 🚩 콘서트 예약시스템 사용자 플로우사용자 첫 접근 시 토큰을 발급, -> 대기열에서 기다림 ->차례가 오면 활성화 토큰콘서트 예약 가능 날짜를 조회한다.콘서트 예약 가능 좌석을 조회한다.콘서트 좌석을 예약한다.좌석을 결제한다. 사용자는 크게 5개의 플로우를 타게된다. 그 중에 1번에 해당하는 토큰은 Redis에서 관리되며, 쿼리를 사용하지 않게 끔 진행하려한다.2,3,4,5번의 플로우에서는 쿼리가 사용 된다. ▶️ 예약 가능 날짜 조회 select cs1_0.c..
앞서 우리가 학습한 Transaction, Lock, Index, Cache 등은 모두 비즈니스 로직을 처리하는 데에 있어 중요한 Database의 부하를 줄이고, 속도 및 성능을 향상시키기 위함이었습니다. 그런데 Lock의 범위 뿐 아니라 무분별한 비즈니스 로직과 트랜잭션의 규모 또한 우리가 예측하지 못한 문제를 발생시킬 수 있습니다. 어떤 문제로 이어질 수 있을까? - 다수의 SlowRead 작업으로 인해 요청 처리에 영향을 줄 수 있음- Transaction 범위 내에서 Lock을 사용하고 있을 경우, 해당 자원에 접근하는 다른 요청의 대기 혹은 데드락 상황을 유발할 수 있음- 긴 생명 주기의 Transaction의 경우, 오랜 시간은 소요되나 후속 작업에 의해 전체 트랜잭션이 실패할 수 있음 ..
- 쿼리에 대한 부하를 줄일 수 있는 훈련- 비즈니스 로직 별 트랙잰션 범위를 파악하고 사이드 이펙트에 대해 고려해 본다. > 사이드이펙트란? 의도치 않은 결과로 예로 고혈압약을 먹었는데 머리가 풍성하게 자라나는 것같은 의도하지 않았지만 나타나는 결과들이다.- 비즈니스를 적절하게 핸들링 할 수 있도록 선후관계를 파악하고, 애플리케이션 이벤트를 활용해 관심사를 분리하도록 개선해 본다. ---- 인덱스란? 서비스 개발자의 중요한 역량 중 가장 중요한 것은 데이터베이스를 핸들할 수 있는 역량이다. 그 중 중요한 것이 index이다. - 인덱스는 조회 성능을 높일 수 있지만 아래 사항들을 고려하여 설계해야 함 - 한번에 찾을 수 있는 값 - 인덱스 재정렬 최소화 - 데이터 삽입, 수정이 적은 컬럼 - 인..
- Total
- Today
- Yesterday
- 스프링부트
- 예외처리
- 컨트
- 향해99
- 항해플러스
- jpa api
- rejectValue
- 로그인
- 백엔드 개발자 공부
- SpringBoot
- HTTP
- JPA
- filter
- 인터셉터
- hypertexttransferprotocol
- Intercepter
- Java
- react실행
- 항해99
- 리터럴
- reject
- React
- thymleaf
- BindingResult
- 스프링공부
- exception
- 향해플러스백엔드
- 백엔드 개발자 역량
- ArgumentResolver
- 향해플러스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |