목록 보기
우당탕탕 주문서 개발기
백엔드

우당탕탕 주문서 개발기

spoqa
spoqa
2022년 7월 8일

두줄요약

주문서 다중 수정에서 변경 덮어쓰기를 막기 위해 revision 검증과 비관적 잠금을 함께 적용했습니다. 품목 스냅숏과 JSONB 이력으로 과거 주문 내용과 변경 기록을 보존했습니다.

문제 상황

  • 매장·거래처·관리자가 동일 주문서를 수정하는 다중 사용자 환경
  • 거래처 품목 변경에도 과거 주문 이력을 보존해야 하는 요구
  • 주문서 변경 전체의 추적과 상태별 이력 관리 필요

해결 방법

  • 조회 시점의 revision을 수정 요청에 포함하고 서버 현재 값과 비교하는 애플리케이션 수준 낙관적 잠금
  • 동시 수정 요청의 revision 비교 경쟁 방지를 위한 조회 단계 비관적 잠금 병행
  • 주문 시점 품목 정보를 주문서에 복사하고 거래처 품목은 추가·삭제만 허용

선택 이유

  • 단순 DB 비관적·낙관적 잠금만으로는 사용자가 인지하지 못한 변경 덮어쓰기 방지 한계
  • 품목 수정 기능 제거로 주문 이력 해석의 모호성과 도메인 복잡도 축소
  • 주문서 상태 변경마다 JSONB 스냅숏과 작업 주체·액션을 이력 엔터티로 저장

트레이드오프

  • 최신 데이터와 화면 데이터가 다르면 수정 실패 후 재조회 필요
  • JSONB의 쓰기 부하를 감수하고 조회 성능·인덱싱·JSON 연산 활용

다음 읽기

같은 회사의 연관 글

기능 테스트 전환 이야기

기능 테스트로 전환한 배경과 통합 테스트의 한계를 설명한 글입니다. Hibernate와 Spring 이벤트 처리로 인한 실제 버그 사례를 통해 전환 이유를 정리했습니다.

spoqa
spoqa
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...