트랜잭션 2

3천만 원 손실을 낳은 트랜잭션 이슈, 그 해결 과정

서비스를 개발하다 보면 예상하지 못한 문제가 종종 발생하곤 합니다. 저도 그런 경험을 한 적이 있습니다. 물론 직접적으로 문제가 된 코드를 작성한 건 아니었지만 문제가 발생한 뒤 로직을 함께 분석하고 이야기하는 과정에 참여하면서 많은 걸 배웠습니다.당시에는 선물권을 지급하고 사용하는 기능이 있었는데 어느 날 이 기능에서 동시성 문제로 인해 선물권이 중복으로 사용되는 현상이 발생했고 결과적으로 3천만 원의 손해로 이어진 일이 있었습니다. 이번 글에서는 그때 어떤 상황이 있었고 문제를 어떻게 파악하고 해결했는지를 정리해보려고 합니다.문제 상황은 이러했습니다. 선물권은 보통 아래와 같은 상태값을 가지고 있었습니다.S0: 아직 사용되지 않은 상태S1: 처리 중S2: 사용 완료S3: 만료 또는 실패이 상태값을 기..

IT 2025.04.15

node.js express에서 MySQL 트랜잭션 적용

트랜잭션(Transaction)이란?트랜잭션은 데이터베이스의 일관성과 무결성을 유지하기 위해 여러 SQL 작업을 하나의 단위로 묶어 처리하는 기능입니다.트랜잭션은 아래 4가지 특징을 보장하며 데이터의 신뢰성을 높입니다.특징설명원자성트랜잭션 내의 모든 작업이 완전히 수행되거나 전혀 수행되지 않음일관성트랜잭션 완료 후 데이터베이스가 항상 일관된 상태를 유지격리성동시에 실행되는 트랜잭션이 서로 영향을 미치지 않음지속성트랜잭션이 완료되면 변경 사항이 영구적으로 저장됨트랜잭션 명령어트랜잭션은 START TRANSACTION, COMMIT, ROLLBACK 명령어로 제어합니다.명령어설명START TRANSACTION트랜잭션 시작COMMIT모든 작업을 영구적으로 저장ROLLBACK작업 취소 및 이전 상태로 되돌림My..