UMC 9週目

14331 ワード

1.学習目標

  • Ajaxを使用して、Webページ上でサーバと非同期で通信する方法について説明します.
  • Bootstrap、OPEN APIなどを利用して独自のWebページを作成します.
  • 2.9週目以降


    💡 6週目受講後の感想、それぞれの進捗状況を共有
    目標:APIとDBを重点的に改善する.💡 Webページでサーバと非同期で通信するのも面白いですが、これは休暇中に自分で行い、APIに集中しています.

    3.実習


    タスクリスト


    アプリケーションがプロジェクトを開始する前に不足点を復習する

  • やりたいこと
  • DB構造(一部変更完了)
  • クエリー能力(特にサブクエリー)→メッセージクエリー機能で完了!
  • APIの設計と実装の課題を補完し、発展させる

  • へんか

  • ページング処理は、既存の応答を「応答Entity」→「BaseResponse」に変更します(ステータスコードを表示します).
    たとえばisSuccess、code、message
    {
    "isSuccess": true,
    "code": 1000,
    "message": "요청에 성공하였습니다.",
    "result": {
    "result": [
        {
        "postIdx": 6,
        "caption": "LastTest",
        "userIdx": 6
        }
        ],
    "pageInfo": {
        "hasNext:": true,
        "currentPage:": 2,
        "totalPages:": 8
        }
    }
    }

  • 複数のInsert

  • Post、Post Media、Mediaの3段階構造では、Postをプライマリ・テーブル、メディアをサブテーブルに変更することで、メディアを参照Postに変更
    start transaction;
    INSERT INTO Post (caption,userIdx)VALUES("StellaTest",6);
    INSERT INTO Media (postIdx,fileData,thumbNail) VALUES(last_insert_id(),"Photo",1);
    commit;

  • データベースでTRANSACTIONを実行し、複数のクエリーを行ごとに実行します.

  • PostIdxは、PostテーブルのプライマリキーとAUTO INCREMENTであるため、last insert id()を介してメディアテーブルに入力される
    制限点:1つの投稿に複数の写真とビデオを挿入する場合、Insert文をどのように処理しますか?

  • DMコンテンツの表示
  • サブクエリを使用して必要なデータを抽出する
  • (既存)インデックスクエリを使用すると直感的ではありません→instaニックネームが直感的です!
  • (既存)
    select Message.roomIdx,Message.content
    from Room
    inner join Message
    ON Message.roomIdx = Room.roomIdx
    where Room.roomIdx=?
    ORDER BY Message.content DESC;
    (変化)
    SELECT User.nickname, Message.content
    FROM User
    INNER JOIN Message
    ON Message.sender = User.userIdx
    WHERE (sender, content) IN (select sender, content
    FROM Room
    INNER JOIN User as u1
    ON Room.user_1 = u1.userIdx
    INNER JOIN User as u2
    ON Room.user_2 = u2.userIdx
    INNER JOIN Message
    ON Message.roomIdx = Room.roomIdx
    WHERE u1.nickname="test2" AND u2.nickname="97_csh")
    ORDER BY Message.createAt DESC;
    (オプション)独自に作成したAPIまたはOPEN APIを使用してWebページを作成する
    API Sheet
    API開発構想整理→API develop

    🔥 問題シュート(失敗した経験も成長のための経験!)

  • フェイルシュートフォーマット[問題原因]エラーコード:1452.Cannot add or update a child row: a foreign key constraint fails ( Instagram . Media , CONSTRAINT Media_post_ID FOREIGN KEY ( postIdx ) REFERENCES Post ( postIdx ) ON DELETE CASCADE ON UPDATE CASCADE)

  • postはpostIdxをプライマリテーブルとして参照し、mediaはpostIdxをサブテーブルとして参照するため、挿入時に参照整合性エラーが発生します.

  • tagIdxはTagテーブルのプライマリ・キーであり、メディアのサブテーブルであるため、defaultまたはidx値を入力する必要があります.
    [ソリューション]

  • 取引照会
    start transaction;
    INSERT INTO Post (caption,userIdx)VALUES("StellaTest",6);
    INSERT INTO Media (postIdx,fileData,thumbNail) VALUES(last_insert_id(),"Photo",1);
    commit;

  • メディアテーブルのtagIdxのdefaultを「0」に設定
    [参考資料]
  • 4.コアキーワード


  • 静的/動的Webページ

  • 静的Webページ:サーバに格納されているHTML/CSSを直接表示します(変更はありません.変更時にHTML自体を変更する必要があります).

  • 動的Webページ:サーバに格納されているHTMLに状況に応じてデータを追加/加工して変化を表示します(たとえば、ユーザーの要求に応じてWebページをリフレッシュする必要はありません).
    ダイナミックWebページとは?

  • HTML DOM
    ドキュメントオブジェクトモデル(DOM、Documentオブジェクトモデル)は、XMLまたはHTMLドキュメントにアクセスするインタフェースです.
    このオブジェクトモデルは、ドキュメント内のすべての要素を定義し、これらの要素にアクセスする方法を提供します.

    HTML DOM


    HTML DOMは、HTMLドキュメントの処理およびアクセスのための標準的な方法を定義します.
    すべてのHTML要素はHTML DOMでアクセスできます.

  • Webブラウザのレンダリング

  • レンダーエンジンは、要求されたコンテンツをブラウザ画面に表示する役割を果たします.HTML、CSS、JavaScriptなどのファイルをブラウザが画面に表示する形式に変換し、ピクセル単位で表示します.
    ![브라우저구조.jpg](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/703c1a4e-2f8e-49f7-b390-b23394f41308/브라우저구조.jpg)
    
    ![브라우저마다 다른 구조.jpg](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c742dbce-7896-4dc4-832b-0a988338de6f/브라우저마다_다른_구조.jpg)
    レンダーブラウザ[Browser]
    ブラウザの表示と最適化

  • Ajax
  • Ajaxとは?AjaxはAsynchronous JavaScriptとXMLの略です.Ajaxは、高速動的Webページを作成するための開発方法です.Ajaxは、ページ全体を再ロードすることなく、ページの一部のみをリフレッシュできます.Ajaxでは、バックグラウンド領域でサーバと通信し、Webページの一部にのみ結果を表示できます.サーバと次の形式のデータを交換できます.
  • JSON
  • XML
  • HTML
  • テキストファイル等
  • Ajaxのメリット
  • ページ全体を再ロードする必要はなく、一部のページをリフレッシュするだけです.
  • ページをロードすると、サーバにデータ要求を送信できます.
  • ページをロードすると、サーバからデータを受信できます.
  • のバックグラウンド領域からサーバにデータを送信できます.
  • Ajax制限
  • Ajaxは、クライアントがサーバにデータを要求するクライアントプール方式を使用して、サーバがプッシュするリアルタイムサービスを作成できません.
  • Ajaxでバイナリデータを送信または受信できません.
  • Ajaxリクエストを
  • Ajaxスクリプトを含むサーバ以外のサーバに送信できません.
  • Ajaxリクエストは
  • クライアントのPCに送信できません.
  • フレーム
  • Prototype
  • script.aculo.us
  • dojo
  • jQuery

  • 同期/非同期
  • 同期には、要求に応答する必要がありますが、次の操作を実行する必要があります.非同期方式は,要求を送信した後に応答に関係のない動作方式である.
  • [서버 측 JS - 동기와 비동기 1 : 개요](https://www.youtube.com/watch?v=jjypeFGJC3c)
  • SPA(Single Page Application)

  • 代表的なフレームワークReact、Vue/Angular

  • SPAタイプは、最初にブラウザにページ全体をロードし、Ajaxのみで特定の部分にデータをバインドします.

  • 既存vs SPA
    ![SPA cycle.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db371aa0-2dde-46ce-9ff7-8eb2e4e836b1/SPA_cycle.png)
    Web単一ページアプリケーション(SPA)の場合
  • 5.参考資料


    ドキュメントオブジェクトモデル(DOM)-Web API|MDN
    Webサービスが必要!CDNって何?
    Bootstrap
    Free Bootstrap Themes & Templates
    パブリックデータポータル

    追加されたリファレンス


    http://tcpschool.com/javascript/js_dom_concept
    https://sjparkk-dev1og.tistory.com/27