강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

우으어으님의 프로필 이미지
우으어으

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 레거시와 AI 활용편

상품 목록 - 요구사항 느끼기

예약 변경 시 '과거 정책 기준 재계산' 요구사항에 따른 스냅샷 데이터 구조 설계 고민

작성

·

31

0

안녕하세요 강사님. 지난번 '어드민 예약 변경 시 쿠폰 회수' 관련 질문을 드렸던 수강생입니다. 답변 주신 내용을 바탕으로 설계를 보완하던 중, 스냅샷 데이터의 범위와 확장성에 대해 추가적인 고민이 생겨 조언을 구합니다.

[현재 아키텍처 상황] 현재 예약 테이블에는 예약 시점의 가격 정보를 JSON 형태의 스냅샷으로 저장하고 있습니다.

  • 이유: 가격 결정 요소(할인, 이벤트, 기업 지원 등)가 빈번하게 변경/추가되어 RDB 컬럼으로 대응하기 어렵기 때문입니다.

  • 저장 데이터: 현재는 '결과값' 위주로 저장합니다. (예: 적용된 할인 명, 타입(정액/정률), 최종 할인 금액)

[직면한 문제: 변경 시점의 기준 모호성] 예약 시점(T1)과 변경 시점(T2) 사이에 정책이 변경되었을 때, 어드민에서 예약을 수정하면 어떤 정책을 따라야 하는가에 대한 딜레마입니다.

만약 기획 요구사항이 "변경 시점(T2)의 정책이 아니라, 최초 예약 시점(T1)의 정책 조건을 유지한 채 금액만 다시 계산해 주세요"라고 한다면 문제가 복잡해집니다.

  1. 현 구조의 한계: 현재 JSON에는 '결과(할인액)'만 있고 '조건(최소 결제 금액, 당시 허용된 옵션 목록 등)'은 없습니다.

  2. 예상되는 부작용: 이를 해결하려면 예약 시점의 모든 검증 조건(Condition)을 JSON에 다 때려 넣어야 합니다.

    • 이렇게 되면 도메인 로직이 바뀔 때마다 JSON 스키마도 계속 비대해지고,

    • 과거 JSON 데이터와 현재 로직 간의 정합성을 맞추기 매우 까다로워질 것 같습니다.

[질문] 이처럼 "빈번하게 변하는 가격 정책"과 "과거 기준 수정"을 동시에 만족해야 할 때, 실무에서는 보통 어떤 접근 방식을 취하나요?

  1. JSON 스냅샷 확장: 다소 복잡해지더라도 예약 시점의 검증 조건(Parameter)들까지 모두 JSON에 스냅샷으로 남기는 게 맞나요? (JSON 컬럼 사용이 잘못된 선택이었을까요?)

  2. Policy Versioning (정책 버전 관리): 아니면 가격/할인 정책 테이블 자체를 버전 관리(Effective Date 등)하여, 예약 시점의 policy_version_id를 매핑해두고 로직을 태우는 방식을 써야 할까요?

  3. 현실적인 타협: 아니면 보통 어드민 변경 건은 "재계산 불가(단순 금액 입력)"로 처리하거나, "무조건 현재(T2) 정책"을 따르게 하는 등 복잡도를 낮추는 타협점을 찾나요?

확장성 있는 가격 스냅샷 설계에 대한 강사님의 경험과 조언을 부탁드립니다..!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 우으어으님.

복잡한 스냅샷 데이터 구조와 그로 인한 예약 시스템의 변경 정책에 대한 고충을 공유해 주셔서 감사합니다. 가격 정책과 스냅샷 데이터의 복잡성이 증가함에 따라 고려해야 할 요소가 많습니다.

1. JSON 스냅샷 확장

스냅샷을 통해 과거 시점의 모든 검증 조건을 저장하는 것은 한계가 있을 수 있습니다. JSON에 모든 조건을 포함시킬 경우, 유지보수가 어려워지고 데이터의 일관성을 보장하기 어렵습니다. JSON을 사용한 저장 방식은 시스템이 복잡해질수록 리팩토링을 자주 요구하게 될 수 있습니다.

2. Policy Versioning

정책 자체를 버전 관리하는 것은 매우 유용한 접근 방식입니다. 다음과 같이 설계를 고려할 수 있습니다:
- 버전화된 정책 테이블: 정책의 유효기간, 수정 사항 등을 포함하여 정책을 관리하고, 예약 시점에 특정 버전을 지정합니다.
- 이력 관리: 각 예약에 대해 어떤 정책 버전이 적용되었는지를 기록합니다. 이렇게 하면 나중에 정책 변경이 있더라도 특정 버전을 기준으로 계산을 수행할 수 있습니다.

버전 관리 방식은 시스템이 복잡해진다 하더라도 변경 관리 측면에서 명확한 장점을 제공합니다.

3. 현실적인 타협

시스템 복잡도를 최소화하기 위해 어드민 기능에서의 정책 변경에 따른 복잡성을 줄이려면:
- 단순 금액 입력: 어드민 변경 시 금액만 수동으로 조정하고 정책을 변경하지 않거나,
- 현재 정책 따르기: 복잡성을 줄이기 위해 변경 시점의 현재 정책을 기준으로 재계산하는 것을 고려할 수 있습니다.

관련 유사 질문 및 참고

확장 가능한 스냅샷 시스템 설계의 과정에서 질문자님의 바램과 요구에 부합하는 방향으로 여러 가지 접근 방법을 테스트해보시길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

우으어으님의 프로필 이미지
우으어으

작성한 질문수

질문하기