[고객 상황]
K Software는 전 세계 판매를 목적으로 Cloud 환경에 게임 판매 사이트를 구축하려 한다. 사용자 성향 및 SNS 분석을 통해 게임을 추천하고, 이를 통해 구매를 유도할 계획이다. 사용자는 사이트를 통해 게임을 다운로드하여 구입, 관리할 수 있으며, 채팅, 방송 및 다양한 커뮤니티 기능을 통해서 다른 사용자와 소통할 수 있다. 사이트의 다양한 기능은 POC 진행 후 고객 Feedback에 따라 확대를 진행하는 방식으로 사업 영역을 넓혀가려고 한다.
[업무 요건]
* 전 세계 대상 게임 판매를 목적으로 시스템을 구축하려 한다.
* 사용자 증감에 따라서 시스템 확장이 유연해야 한다.
* 업무 특성에 맞는 최적의 개발 언어와 DB를 선택하여 구축한다. (커뮤니티나 채팅은 빠른 응답, 결제와 분석은 안정성
* 자연재해나 시스템의 물리적인 결함 상황에서도 시스템은 운영이 되어야 한다.
* 프로모션은 수시로 진행되며, 운영 중에도 적용이 쉽게 되면서, 다른 서비스에 영향이 없어야 한다.
* 프로모션이 진행되면 사용자 수가 평소보다 급격히 증가할 것으로 예상된다.
* 가입과 인증을 쉽게 하기 위해 각 국가의 소셜 로그인 기능을 지속적으로 추가하여, 사용자 가입을 유도한다.
* 사용자가 게임을 직접 검색할 수도 있고, 시스템이 사용자의 개인 성향에 따라서 맞춤형 게임을 추천할 수 있어야 한다.
* 추천은 게임의 평점, 최근 플레이한 게임, 커뮤니티 및 각종 SNS 사이트의 내용 등을 고려한다.
* 다양한 결제 방법을 선택할 수 있고, 각 국가의 대표적인 결제 수단이 반영되어야 한다.
* 사용자는 다양한 SNS를 통하여 본인의 게임 내용을 쉽게 공유할 수 있어야 한다.
* 특정 지역에서는 계약 및 법률 규정에 따라서 판매 및 이용이 불가능하도록 해야 한다.
* 모든 구매를 포함한 사용자의 활동 정보는 분석을 위하여 사용되고, 다시 사용자에게 feedback되어야 한다.
[업무 시나리오 1]
- 신규 출시 게임 예약
1. 신규 게임 출시가 확정되면 담당자는 게임을 등록한다.
2. 신규 게임이 출시되면 해당 게임 유형 선호도가 높은 사용자에게 추천 시스템을 통해 이메일을 자동 발송한다.
3. 사용자는 메일 예약 링크 또는 사이트 검색을 통해 예약 주문을 진행한다.
4. 신규 게임의 서비스 대상 국가와 사용자의 거주 국가가 일치하지 않는 경우에는 예약을 할 수 없다.
5. 사용자는 결제 방식을 선택하고 결제를 진행한다.
6. 결제 금액은 담당자가 등록한 할인 금액이 적용된다.
7. 결제는 해당 국가에서 지원하는 신용카드와 간편 결제 서비스를 통해서 이루어진다.
8. 결제 시 포인트를 사용할 수 있고, 사용한 포인트를 제외한 금액이 신용카드나 간편 결제 서비스에 청구된다.
9. 결제를 완료하면 예약이 완료된다.
10. 결제가 완료되면 사용자에게 포인트가 적립되고 메일이 발송된다.
11. 구매 목록에 신규 게임이 나타나고, 환불 요청" 버튼이 활성화된다.
12. "환불 요청" 버튼을 누르면 예약과 결제가 동시에 취소된다.
13. 취소가 되면 사용자의 구매 목록에서 사라진다.
14. 환불을 진행하면 적립된 포인트도 차감이 된다.
15. 출시일이 되면 사용자는 다운로드가 가능해진다.
16. 출시일이 되면 예약 할인이 종료되고 정상가로 구매가 가능하다.
[업무 시나리오 2]
- 선물하기
1. 사용자는 선물하기를 통하여 게임을 다른 사용자에게 선물할 수 있다.
2. 기존에 구매한 제품은 선물이 불가하다.
3. 게임 상점 페이지에서 "선물로 구매"를 선택한다.
4. 선물은 친구 목록에 추가된 사용자에게만 가능하다. 친구 목록은 사전에 상대방의 승인을 통해서 등록한다.
5. 선물할 게임을 가지고 있는 친구는 친구 목록에 나타나지 않는다.
6. 선물할 친구가 포함되어 있지 않다면, 친구 추가 메뉴에서 추가한다. 시스템은 추가된 친구에게 메일을 발송한다.
7. 선물하기는 바로 보내기 또는 예약을 통하여 특정 날짜에 자동 전달이 될 수 있다. 이때 메시지를 작성할 수 있다.
8. 결제는 사용자의 국가에서 지원하는 결제 방식(신용카드/간편 결제 시스템)을 선택하여 결제한다.
9. 결제는 외부 업체를 통해서 처리한다.
10. 결제가 완료되면 친구에게 알림과 이메일이 발송된다.
11. 선물을 받은 사람이 "선물 수락"을 하면 게임을 다운로드 받게 된다.
12. 선물을 받은 사람이 "선물 거절"을 하면 보낸 사람에게 바로 환불 처리가 된다.
13. 친구가 30일 동안 수락하지 않으면 자동 환불 처리가 된다.
14. 선물한 내용은 리포팅 시스템에서 조회가 가능하다.
문제1. 업무 시나리오 1에서 예약 결제(S)-D)와 환불 처리(-00)에 대해, 아래 요건을 고려하여 필요한 API 기능을 정의하고, 실패 시 필요한 보상 트랜잭션에 대해서 정리하시오.
- 예약 결제와 환불 처리에 대해서 각각 작성
- 서비스는 1번 문제에서 도출한 서비스를 기반으로 작성(필요 시 추가 가능)
- 보상 트랜잭션의 호출이 최대한 적게 발생할 수 있도록 호출 순서 정의
- 트랜잭션 종류에 보상 가능 / 피봇 / 재시도 가능 트랜잭션 표기
예약 결제 API 기능 정의
1. RegisterNewGame(GameDetails)
• 설명: 새로운 게임을 등록하여 시스템에 게임 정보를 추가하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 해당 게임 정보 삭제
2. SendEmailToUsers(UserList, EmailContent)
• 설명: 신규 게임에 대한 예약 링크를 선호도 높은 사용자에게 이메일로 전송하는 API.
• 트랜잭션 종류: 피봇
• 실패 시 보상 트랜잭션: 이메일 재발송 시도
3. SearchGame(GameID)
• 설명: 사용자가 게임을 검색하는 API.
• 트랜잭션 종류: 재시도 가능
• 실패 시 보상 트랜잭션: 재시도
4. CheckUserEligibility(UserID, GameID, UserCountry, GameAvailability)
• 설명: 사용자의 게임 예약 가능 여부를 확인하는 API. 사용자 국가와 게임 출시 국가를 비교.
• 트랜잭션 종류: 재시도 가능
• 실패 시 보상 트랜잭션: 재시도
5. ApplyDiscount(GameID, DiscountDetails)
• 설명: 게임 결제 시 적용할 할인 금액을 계산하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 할인 금액 적용 취소
6. ProcessPayment(UserID, PaymentDetails)
• 설명: 사용자가 선택한 결제 수단으로 결제를 처리하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 결제 취소 및 환불 처리
7. AllocatePoints(UserID, Points)
• 설명: 결제 완료 후 사용자에게 포인트를 적립하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 포인트 적립 취소
8. SendConfirmationEmail(UserID, EmailContent)
• 설명: 결제 완료 후 사용자에게 확인 이메일을 전송하는 API.
• 트랜잭션 종류: 피봇
• 실패 시 보상 트랜잭션: 이메일 재발송 시도
9. UpdatePurchaseHistory(UserID, GameID)
• 설명: 사용자 구매 목록에 게임을 추가하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 구매 목록에서 게임 제거
예약 결제 트랜잭션 순서 및 보상 트랜잭션 정의
1. RegisterNewGame(GameDetails) → 실패 시: 게임 정보 삭제
2. SendEmailToUsers(UserList, EmailContent) → 실패 시: 이메일 재발송 시도
3. SearchGame(GameID)
4. CheckUserEligibility(UserID, GameID, UserCountry, GameAvailability)
5. ApplyDiscount(GameID, DiscountDetails) → 실패 시: 할인 금액 적용 취소
6. ProcessPayment(UserID, PaymentDetails) → 실패 시: 결제 취소 및 환불 처리
7. AllocatePoints(UserID, Points) → 실패 시: 포인트 적립 취소
8. SendConfirmationEmail(UserID, EmailContent) → 실패 시: 이메일 재발송 시도
9. UpdatePurchaseHistory(UserID, GameID) → 실패 시: 구매 목록에서 게임 제거
환불 처리 API 기능 정의
1. InitiateRefund(UserID, GameID)
• 설명: 사용자가 환불을 요청할 때 환불 프로세스를 시작하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 환불 취소 및 구매 상태 복원
2. RevertPoints(UserID, Points)
• 설명: 게임 구매 시 적립된 포인트를 환불 시 차감하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 포인트 차감 취소
3. CancelPayment(UserID, PaymentDetails)
• 설명: 환불 요청 시 결제를 취소하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 결제 상태 복원
4. RemoveGameFromPurchaseHistory(UserID, GameID)
• 설명: 환불 처리 후 사용자의 구매 목록에서 게임을 제거하는 API.
• 트랜잭션 종류: 보상 가능
• 실패 시 보상 트랜잭션: 구매 목록에서 게임 제거 취소
환불 처리 트랜잭션 순서 및 보상 트랜잭션 정의
1. InitiateRefund(UserID, GameID) → 실패 시: 환불 취소 및 구매 상태 복원
2. RevertPoints(UserID, Points) → 실패 시: 포인트 차감 취소
3. CancelPayment(UserID, PaymentDetails) → 실패 시: 결제 상태 복원
4. RemoveGameFromPurchaseHistory(UserID, GameID) → 실패 시: 구매 목록에서 게임 제거 취소