본문 바로가기
728x90

동시성2

결제 동시성 이슈 해결 - 분산락과 Redisson 개요회사 차세대 프로젝트에서 발송 요청 시 가결제 동시성 이슈로 인한 사용자 가결제 금액 - 잔액간 불일치 이슈가 발생했다. 발생한 가결제 이슈 프로세스를 정리하면 아래와 같다. 사용자가 2건의 60원짜리 가결제 요청P1: 가결제 금액 조회 ⇒ 0원P2: 가결제 금액 조회 ⇒ 0원P1: 가결제 처리 후 commit ⇒ 사용자 가결제 금액 60원P2: 가결제 처리 후 commit ⇒ 사용자 가결제 금액 120원보유 금액 100원 이 되어 유저 잔액(-20원) 조회 시 오류 발생위 이슈는 공유 자원인 DB에 동시에 여러 프로세스가 접근하여 값을 수정하다보니 발생한 동시성 이슈인데, 해당 이슈 담당자는 이 이슈를 Redis를 활용한 분산락을 통하여 해결하였다. 이번 글에서는 DB 접근 동시성 이슈를 해결하기 .. 2024. 10. 3.
자바에서 불변 객체(Immutable Object) 만들기 개요최근 프로젝트에서 멀티스레드 환경에서 동시성 문제를 해결하는 방법을 고민하던 중, 불변 객체(Immutable Object)를 사용하는 것이 코드 안정성에 큰 도움이 된다는 점을 깨달았다. 여러 스레드가 동일한 객체를 참조할 때, 객체의 상태가 변하지 않으면 추가적인 동기화 처리가 필요 없기 때문이다. 그래서 이번 글에서는 자바에서 불변 객체를 만드는 방법과 그 장점을 소개하려 한다.  불변 객체란 무엇인가? 불변 객체란, 한 번 생성된 후 내부 상태가 절대 변경되지 않는 객체를 말한다. 즉, 객체가 생성된 이후에 그 속성들은 수정할 수 없다. 대표적으로 자바의 String 클래스가 불변 객체로 설계되어 있다. 불변 객체는 주로 멀티스레드 환경에서 동시성 문제를 해결하는 데 매우 유용하다.  불변 객.. 2024. 9. 25.