전공 · 모든 회사 / 모든 직무

Q. 전공 데이터베이스 과제에서 주문 취소 이력은 어떻게 저장해요?

알알에서나온혁거세

쇼핑몰 주문 테이블을 설계하는 과제예요. 현재 주문 상태는 바로 보고 싶고, 언제 취소됐다가 복구됐는지도 남겨야 해요. 주문 테이블에 현재 상태를 두고 변경 내역은 별도 테이블에 쌓으면 될까요? 두 값이 어긋나지 않게 하려면 어떤 점을 챙겨야 할까요?


2026.11.06

답변 1

  • 취뽀도우미입니다삼성SDS
    코상무 ∙ 채택률 97%

    주문 상태 관리와 이력 기록을 분리하여 설계하는 것은 매우 효율적이고 실무적인 접근 방식입니다. 주문 테이블에는 현재 주문의 상태만을 유지하고, 변경 내역은 별도의 이력 테이블에 쌓는 방식이 데이터의 일관성과 조회 성능 측면에서 권장됩니다. 주문 테이블에는 현재 상태 값인 '결제 완료', '취소됨' 등과 같은 필드를 두고, 주문 상태가 변경될 때마다 이력 테이블에 변경 일시, 변경 전 상태, 변경 후 상태, 변경 사유 등을 함께 저장하는 구조를 구축하십시오. 두 테이블 사이의 데이터 불일치를 방지하기 위해서는 데이터베이스의 트랜잭션을 활용하는 것이 필수적입니다. 상태가 변경되는 시점에 주문 테이블의 상태 값을 업데이트하는 로직과 이력 테이블에 로그를 추가하는 로직을 하나의 트랜잭션으로 묶어 처리해야 합니다. 만약 어느 한쪽 작업이 실패할 경우 전체를 롤백하도록 구성하면 데이터의 정합성을 보장할 수 있습니다. 또한, 시스템 규모가 커질 것을 대비한다면 상태 변경 로그를 비즈니스 로직에서 직접 삽입하기보다는 데이터베이스 트리거를 활용하거나, 이벤트 기반 아키텍처를 고민해 보는 것도 좋은 방법입니다. 무엇보다 중요한 것은 애플리케이션 코드 레벨에서 상태 변경 함수가 원자적으로 동작하도록 설계하여 예외 상황에서도 데이터가 유실되지 않도록 관리하는 것입니다.

    2026.11.06


함께 읽은 질문

궁금증이 남았나요?
빠르게 질문하세요.