본문 바로가기

분류 전체보기19

핀테크 서비스 - 동시성 문제 핀테크 서비스에도 동시성 문제를 해결해야 했다 데드락 우선 먼저 동시성 테스트를 해보니 락을 사용하지도 않았는데 데드락 에러가 발생했다 그래서 찾아보니 레코드를 수정할때 x-lock을 걸어버리고 다른 레코드를 참조하는 새 레코드를 생성할때 s-lock을 건다고 한다 따라서 x-lock을 획득하기 위해 다른 트랜잭션의 s-lock을 기다리게 되버리므로 데드락에 빠진다 https://0soo.tistory.com/214 MySQL 낙관적 락과 데드락(dead lock) With JPA Hibernate 프로젝트에서 모임 가입 기능을 구현하면서, 동시성 문제와 데드락까지 경험한 내용 그리고 어떻게 해결하였는지 고민과정과 해결방법을 정리하려고 합니다. 프로젝트 버전 SpringBoot 2.7.8 MySQL 8... 2024. 4. 10.
핀테크 서비스 - 인덱스 사용 개인 프로젝트인 핀테크 서비스를 개발하고 피드백 받은 내용 중 인덱스를 사용해보는것이 있어 적용해보았다 인덱스 인덱스는 책뒤의 색인과 비슷하다 즉 어느 페이지에 어떤 단어가 있는지 대략적으로 파악할수 있게 하는것이다 아래가 그 예 이다 위 그림에서 "Gad"라는 인덱스 키를 갖는 레코드를 찾는다고 가정해보자. 부모 노드에서 "Gad"라는 인덱스 키가 있는지 찾아본다. Aamer는 자식 노드 2번이고, Jaana는 자식노드 3번인 것을 확인할 수 있다. 즉, "Gad"는 없는 것 처럼 보인다. 그러나 기본적으로 정렬되어 있으므로 "Aamer"와 "Jaana" 사이에 "Gad"가 있을 수 있다는 것을 알 수 있다. "Aamer"가 가리키는 자식 노드 2번 페이지로 가서 다시 탐색하는게 적절하다. ("Jaan.. 2024. 4. 10.
매장 예약 - Redis 캐시 적용 매장 예약 서비스에도 성능 개선을 해보기 위해 Redis 캐시를 적용해 보기로 했다 그래서 생각해보니 특정 매장의 예약 조회 이부분이 사용자의 요청이 많을 것 같아 캐시를 적용 하기로 했다 캐시 적용위와 같이 @Cacheable 어노테이션을 붙여주어 캐시를 저장하도록 했다 캐시 적용 결과캐시를 적용해봤더니 응답속도를 939ms -> 26ms 로 개선하였다 이렇게 보니까 확실히 체감되는것 같다   하지만 아래와 같이 동작했을때 문제가 발생한다 1. 특정 매장의 예약 정보를 조회한다 (이때 캐시가 저장됨)2. 그 매장에 예약 요청을 한다 (저장)3. 다시 그 매장의 예약 정보를 조회한다 이렇게 되면 3번에서는 2번에서 요청한 예약 정보는 조회되지 않는다 왜냐하면 캐시에 이미 해당 키로 저장되어 있기 때문에 .. 2024. 2. 22.
매장 예약 서비스 - 동시성 문제 매장 예약 서비스를 개발하면서 중요하다고 생각한 제약사항 중 하나는 예약 가능 여부가 중요하다고 생각했었다 그래서 해당 매장에서 예약 하려는 시간대의 남아있는 테이블 수를 계산해 예약 가능 여부를 체크했었다 하지만 문제는 동시에 예약 요청이 들어오는 경우는 전혀 생각하지 않았었다.. 동시성 문제두개의 요청 중 하나의 요청만 예약 가능하다고 할때 매장에다 동시에 예약 요청을 보내게 되면 둘다 예약에 성공한다 예시로 총 테이블 6개를 보유한 매장이 있다 예약 하려는 시간대에 이미 5개의 테이블이 예약되어 있는 상황 즉 테이블 1개만 예약 가능한 상황이다 1개의 테이블 예약 요청을 동시에(같은 시간대에) 보내게 되면 첫번째 요청은 성공해야하고 두번째 요청을 실패해야 하지만 둘다 예약에 성공한다이런일은 발생하면.. 2024. 2. 19.