pile·
백엔드·뱅크샐러드banksalad·

뱅크샐러드가 게임을 만들 때 데이터 정합성을 유지하는 법 (feat. 낙관적 락)

문제게임형 앱테크 서비스의 character_state(잔액·레벨)는 유저 액션·운영 백오피스·배치 등 여러 경로로 동시에 갱신된다. 동시성 제어가 없으면 Lost Update 가 발생해 현금성 자산 정합성이 깨진다.

접근재시도 로직 없는 낙관적 락을 채택. version 컬럼을 두고 UPDATE 시 WHERE version = ? 조건으로 CAS 한다. 충돌 시 즉시 실패시켜 호출자가 처리하도록 위임한다.

결과잠금 대기 없이 정합성을 보장하고 코드 복잡도를 낮췄다. 현금성 재화가 오가는 도메인에서도 트랜잭션 단순화와 동시성 안전성을 동시에 확보했다.

뱅크샐러드
뱅크샐러드 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·네이버페이네이버페이·

    Composite PK에서 시작된 Spring Boot 4 / Spring Batch 6 업그레이드 기록

    문제Spring Data JDBC 의 Composite ID 적용을 위해 Spring Boot 3.5 → 4.0.1 업그레이드 시 Spring Batch, Kotlin, Jackson 등 전체 스택 메이저 전환 필요.

    접근Spring Boot 4 / Spring Batch 6 / Spring Framework 7 / Kotlin 2.3 / Jackson 3 / Kotest 6 / Gradle 9 / ojdbc11 순차 업그레이드. Composite ID 는 Persistable 인터페이스로 구현, JdbcDefaultBatchConfiguration 상속으로 메타데이터 저장.

    결과기술 부채 해결 + 장기 유지보수성 개선. 운영 DB 접근 정책 충돌을 사전 식별해 안정적 배포 달성.

    #kotlin#spring#spring-boot+3