보험사 점검 여부를 확인하지 못하면, 보험 가입 영역을 보여 줄까 숨길까?

2 분 소요

요약

  • 보험사 점검 때마다 결제 화면의 보험 가입 영역을 숨기려고 코드를 고쳐 배포했는데, 점검 일정을 관리자 서비스로 옮겨 운영자가 등록하게 하자 이 배포가 없어졌음(8개월간 5번 → 0번)
  • 대신 결제 서버가 관리자 서비스에서 점검 여부를 확인하지 못하는 경우가 생겼고, 이때는 고객이 가입에 실패하는 것보다 매출을 잠깐 놓치는 편이 낫다고 보고 숨기기로 함
  • 설정을 다른 서비스에서 읽어 오면 그 조회가 실패할 때 어떻게 할지 정해야 하는데, 이때는 판단이 틀렸을 때 되돌릴 수 있는 쪽을 고르면 됨

상황: 점검 일정이 코드에 하드코딩되어 있었음

  • 우리 사이트는 항공권 결제 화면에서 취소위약금 보상보험 가입도 함께 받음
  • 보험 가입은 외부 보험사 API를 거쳐야 됨
  • 보험사가 점검하는 동안에는 가입이 실패하므로, 그 시간엔 가입 영역을 숨겨야 함
  • 원래는 점검 일정이 서버 코드에 하드코딩되어 있어서 보험사가 점검을 공지하면 개발자가 날짜를 고쳐 배포했음
  • 점검 종료가 1시간 늦어진다는 연락에도 개발자가 코드를 고쳐 다시 배포했음

선택지: 조회가 실패하면?

  • 점검 일정을 관리자 서비스로 옮겨, 운영자가 점검 기간을 등록하게 함
  • 결제 화면은 “지금 가입 영역을 보여도 되는지”를 결제 서버에 물어보고, 결제 서버는 관리자 서비스에 점검 일정을 물어보는 구조가 됨
  • 점검 일정이 코드에 있을 때는 결제 서버가 언제나 바로 읽을 수 있었음
  • 하지만 이제는 관리자 서비스가 응답을 못 주는 “조회 실패” 경우가 생김
  • 조회가 실패하면, 결제 서버는 점검 중인지 모르는 채로 보여 줄지 숨길지 정해야 함
  • 점검이 아닐 수도 있으니 평소처럼 보여 줄 수 있고, 점검 중일 수도 있으니 숨길 수도 있음

결정: 모르면 숨긴다

  • 어느 쪽을 골라도 틀릴 수 있으니, 틀렸을 때 잃는 것을 비교함
  • 점검이 아닌데 숨기면 그동안의 보험 매출을 잃지만 다시 보이면 회복됨
  • 점검인데 보여 주면 고객은 보험 가입에 실패하게 되고, 실패로 인해 떨어진 신뢰는 쉽게 돌아오지 않음
  • 따라서 조회가 실패하면, 손해를 되돌릴 수 있는 숨기는 쪽을 고름
  • 이런 방식을 fail-closed(판단이 안 서면 닫는 쪽을 고르는 방식)라고 함
  • 이 규칙은 점검 일정을 관리자 서비스로 옮길 때 정했고, 이후 새로 붙인 여행자보험에도 그대로 적용함

결과

  • 점검 일정 때문에 하던 배포가 8개월간 5번 → 0번으로 줄었음
  • 이제 점검 공지가 오면 운영자가 관리자 서비스에 등록만 함