수익 계산

신경연·2023년 5월 23일
0

Project_디붕

목록 보기
6/8

수익 계산

디붕이네 공장은 개인의 영지 환경과 실시간 가격 정보를 통해 계산하여 개개인이 창출할 수 있는 최대 수익 방향을 제시해 주는 사이트입니다. 수익 계산은 가장 핵심이 되는 기능입니다.

디붕이네 공장

1. 목표 방향

정확한 계산은 물론이고, 계산식에 활용되는 데이터에 Enum을 적극 활용하여 DB 사용을 최소화함으로써 RDS 요금이 발생하지 않도록 막는 것이 가장 큰 목표였습니다.

2. Enum

사실 Enum을 제대로 활용한 것인지 잘모르겠습니다. 다만, Enum을 공부했을 때 불변하는 데이터(상수)들에 대해 데이터베이스처럼 사용할 수 있을 것 같다는 생각이 들었습니다. 그리고 무엇보다 개인적으로 사이트를 운영하는 것이라 돈이 청구되는 것은 막고 싶었습니다.

3. 코드

1) Factory Enum

사이트에서 노출될 생산품을 중심으로 한 데이터입니다. 모두 데이터가 비슷했으면 편했겠지만, 최상급의 경우 재료가 다양한 방향으로 들어갈 수 있기 때문에 다소 복잡해진 모습입니다.

category : 재료 아이템의 카테고리 종류
productId : 생산품 Id (최상급 시리즈는 productId가 같습니다.)
produceCost : 생산비
produceQuantity : 생산 수량
energyCost : 활동력 소모량
normalQuantity : 특정 카테고리의 일반 등급 재료 요구 수량
uncommonQuantity : 특정 카테고리의 고급 등급 재료 요구 수량
rareQuantity : 특정 카테고리의 희귀 등급 재료 요구 수량

2) Category Enum

기본적으로 검색 키워드로써 사용하기 위한 Enum이지만, 이 중 unit은 계산에 사용됩니다.
뒤에 나올 Items Enum 에서 재료 아이템을 특정하기 위해 사용됩니다.

3) Items Enum

이것도 기본적으로 검색 키워드로써 사용하기 위한 Enum이고, 순서만 보면 됩니다.
3개 단위로 Category가 바뀌는 형태로 만들었습니다.

Category Enum의 unit
normal 재료 : unit x 3 번째 아이템
uncommon 재료 : unit x 3 + 1 번째 아이템
rare 재료 : unit x 3 + 2 번째 아이템

4) Service

빨간색 박스 부분이 위에서 설명한 부분입니다.
Factory Enum의 Category -> Category Enum의 unit -> 재료 아이템을 특정 지음.

홍보 사이트에 명시해 놓았던 계산식입니다. 위 코드는 이 계산식을 코드로 구현한 것입니다.

floor: 내림, ceil: 올림, round: 반올림
제작비 = Math.floor(소모골드 x (100 - 영지 골드소모 감소)/100) + 재료값
판매 수수료 = Math.ceil(융화재료 판매 가격 / 20)
매출 = 1.05(대성공) x 제작 수량 x (융화재료 판매 가격 - 판매 수수료)
활동력 소모량 = Math.floor(활동력 소모량 x (100-영지 활동력 소모량 감소) / 100)
일일 제작횟수 = 24 x 6 x 영지의 기운 회복량(10분마다 회복) / 제작 활동력 소모량
순이익 = 매출 - 제작비
하루수익 = Math.round(순수익 x 일일 제작횟수)
하루 유지비 = 1.3(3일 등록 수수료) x 매출 x 융화재료 판매 가격/(융화재료 판매 가격 - 수수료) x 일일제작횟수 + 40 x 제작비(공장은 계속 돌아가니까)
최대 유지비(3일) = Math.round(하루 유지비 x 3 - 2 x 40 x 제작비)
활동력 구매 = 30000(영지의기운(중)10개) x 순수익 / 활동력소모량 - 1.44 x 크리스탈가격 x 20/19(5%수수료)

4. 결과

목표로 하였던 계산은 기존에 가지고 있던 엑셀과 결과가 일치하는 것을 확인하였습니다. 그리고 RDS 요금 또한 무료 범위를 지킬 수 있었습니다. 가장 유저가 많았을 배포 첫달에 무료 범위인 것을 보아 앞으로도 괜찮지 않을까 생각합니다.

profile
반갑습니다

0개의 댓글