Dadog Shopを作成するとき...


3月から始まった多読挑戦戦が幕を閉じた.Dadogは挑戦を思い出して、私が開発したDadog Shopにフィードバックしたい時間です.

多機能店を作るきっかけ


Dadog Dadogでは3月14日から2週間のDadogチャレンジを計画しています.一緒にチャレンジゲームを企画しているときに、いくつかの課題を解決しなければならないので、私が解決したい課題があるかどうかを考えてみました.
  • 日ごとに検査が完了して挑戦した人
  • 協賛代金支払案
  • 1.チャレンジを日々チェックしていく人


    課題を達成した人のデータは、マルチリードで重要なチェックが必要なデータです.私たちが設定した挑戦成功者の総数は100人で、挑戦を行う間、成功者が何人いるかによって、アクティビティを追加して毎日の免除権を支払うなどの方法で、毎日これらのデータを更新する必要があります.現在、どのくらいの人が挑戦に参加しているかを確認するデータが必要です.

    2.協賛品の支払い案


    スポンサー8社が約648万ウォンの物品を納品することにした.これらの品物の一つは成功者が持っていくもので、問題は価格の千差万別だ.10000元の商品から79000元まで、商品の価値はそれぞれ違います.それだけでなく、商品の数も一定ではなく、この部分は前後順にユーザーに配布する案を採用せざるを得ない.
    問題はどのように100人ぐらいの人に順番に伝えるかです.

    ソリューション


    ユーザデータストア


    sqlalchemyを使用してモデル構造を構築し、モデルに基づいてalembicを使用してmysql dbテーブルを生成します.

    初期アンケートをもとに約300以上のユーザデータを収集し,初期アンケートで受信したメッセージの名前のASCIIコードと電話番号の後ろの位置を組み合わせてユーザIDを形成した.

    チャレンジの保存に成功したかどうか


    チャレンジが成功するたびに、challang logsテーブルに格納されます.Excelファイルに格納されている元のデータをバッチファイルの内部で前処理し、ローカルにサーバのAPIを離れてチャレンジが成功したかどうかを保存するように要求します.
    # app/batch/challange_exe.py
    
    import requests
    import pandas as pd
    import idgen
    
    df = pd.read_excel('data.xlsx', index_col=None)
    
    def is_exist_user(user_name, bpn):
        r = requests.get(f'http://localhost:8000/user?user_name={user_name}&back_phone_number={bpn}')
    
        if r.status_code==200:
            return True
        else:
            return False
    
    def insert_user(user_name, bpn):
        data = {'user_name': user_name, 'back_phone_number': bpn}
        r = requests.post('http://localhost:8000/user', json=data,
        headers={"Content-Type": "application/json; charset=utf-8"})
        print(r.text)
    
    def create_challange_log(challange_id, user_id, now_date, status, link=None, is_duplicate=False):
        data = {
            'challange_id': challange_id,
            'user_id': user_id,
            'now_date': now_date,
            'status': status,
            'link': link,
            'is_duplicate': is_duplicate
        }
        r = requests.post('http://localhost:8000/challange/participate', json=data,
        headers={"Content-Type": "application/json; charset=utf-8"})
    
    if __name__=="__main__":
        now_date = input("날짜(2022-xx-xx): ")
        status = input("상태(SUCCESS/FAIL/EXCEPT): ")
        challange_id = int(input("챌린지 ID: "))
    
        for index, row in df.iterrows():
            user_name = row['user_name']
            user_name = user_name.replace(" ", "")
    
            bpn = str(row['back_phone_number'])
            bpn = bpn.replace(" ", "")
            if len(bpn) != 4:
                bpn = '0'*(4-len(bpn))+bpn
            
            user_id = idgen.id_generator(user_name, bpn)
            if not is_exist_user(user_name, bpn):
                insert_user(user_name, bpn)
            
            if status=="EXCEPT":
                create_challange_log(challange_id, user_id, now_date, status)
            else:
                link = row['link']
                create_challange_log(challange_id, user_id, now_date, status, link)
    

    多機能店を開く


    茶毒の挑戦から1週間以上が経ち、スポンサーの具体的な数とスポンサーの種類が確定した.スポンサー物品をチャレンジ成功者に渡すためには、先着順に物品を配布することにし、スポンサー物品を支払うためには、以下の条件を満たさなければならない.
  • チャレンジの完了に成功したユーザ支払(DB連動)
  • に限る.
  • 有限数量の貨物
  • を正確に支払う.
  • 社に購入者リスト
  • を提出する
    次の候補者を表にまとめる

    以上の要件を満たす選択肢は、多機能店を直接開設することです.問題は、課題が完了した28日以内に開発を完了し、30日以内に導入を完了することです.開発期間は9日目挑戦戦の22日(火)で、締め切りまでは難しい.

    コラボレーションの進捗状況


    この問題を解決するために、内部環境に重点を置くことにした.
  • API開発とサーバ導入
    8日間のマルチ読み取りの課題では、ユーザーのデータを管理するためにFastAPIを使用していくつかのAPIを作成し、AWSを使用してサーバを導入しました.これにより,利用者が何度か挑戦したことがあるというメッセージが伝達される.マルチプレイ関連の付加APIを作成するのにかかる時間は2~3日程度です.

  • マルチファンクションショップデザイン
    簡単にフィグマで多読店に入るホームページを作りました.

    予想総ページ数は7ページ以内で、予想所要時間は1日程度.

  • フロントエンド
    フロントエンドでは、操作を実行する必要はありません.1人のユーザーで7~8日かかる場合があります.
  • 上の作業量から見ると、フロントに投入する時間は絶対に足りません.そこで、フロントを手伝ってくれる人を探して、暗箱でオファーを比較しました.

    純粋な企画案をもとに、ソフトウェア開発側にオファーを出した場合、500万ウォンだった.でたらめな価格が決められ、メンテナンス側と比較した結果、80万元前後の価格になった.学校側の予算を執行する金額が大きすぎる.
    最終的には、プログラミング/コーディングコースで見積書を作成し、直接連絡することを決定し、次のセクションを提供します.
  • 計画第5ページ内
  • APIは
  • を提供する
  • Web配備
  • フロントの仕事部分を純粋に担当し、一緒に協力する場合、オファーは9万元です.この金額は教育費予算で処理できます!!
    (コラボレーション進捗写真)

    マルチショップ展開結果


    万督は希望の帰る31日、彼らを対象にサイトを開いた.同サイトは購入時間を夜6時、6時に定刻にユーザーにチケットを配布する.
    結果はね.
    すばらしい

    生涯で初めて遭遇したトラフィックの問題なので、最初はサーバーを育成すれば問題を解決できると思っていました.
    しかし、培養サーバが7時にオープンした場合も同様の問題が発生し、docker-compose logsチェック後にnginx webサーバのtimeoutエラーが発見された.
    (サンプル写真:https://stackoverflow.com/questions/44675435/504-error-with-nginx-and-flask-docker-containersを参照)

    [504エラー画面]https://stackoverflow.com/questions/54461204/reverse-proxy-on-windows-using-docker-nginx-is-not-forwarding-https-to-iis

    トラブルシューティング方法


    サーバーが爆発した時、私の精神も一緒に爆発しました.商品の支払いの面で隊員たちと一緒に残局を片付けることが重要なので、方法が見つかりませんでした.
    ある程度の整理を経て、私はこの問題の解決方法を見つけて、結果は多種の解決策があることを発見して、その中にいくつかの可能性があります.

  • nginxconf time-out時間の増加
    [参照]https://kinsta.com/blog/504-gateway-timeout/


  • aws弾性を利用したLoad Banger

    出典:アマゾンaws

  • aws lambdaの使用
  • に感銘を与える


    私は生まれて初めてウェブサイトを配置して、配置する前に順調に完成して嬉しいです.Webサイトの導入だけでなく、今後どのような状況でScaleUpやScaleOutなどの決定を下すべきかという悩みも一緒にすることができ、大変でしたが、多くのことを学びました.
    私は自発的に自分でウェブサイトを建てることを決めて、結果はよくなくて、チームメートに申し訳ありません.先着順でも100位くらいは耐えられるでしょうか?不確実な判断をしたからかもしれない.今度はもっと論理的な判断をして、このようなことが起こらないようにしなければなりません.