30日目
9424 ワード
stateful/stateless
scaleup/scaleout
RoundRobin)バックエンド間でデータを切り替える
最小接続(Least Connection)は、データが最も少ないバックエンドにデータを送信します.
パーティション、、、データベース分割垂直パーティション/水平パーティション(Shading)
分散型データベースでは、データはディスクに格納されますが、永続的に格納されます.
Redisメモリに格納されているデータ(永続的なストレージに変更できますが、基本的には非永続的なデータ)
ハッシュ方式はデータを不可知にし、一方向暗号化パスワードをハッシュ!!
ユーザー情報をタグに保存する->JSON Web Token
(JSON JavaScriptオブジェクトシンボル)
奪われる可能性があるので、短い期限を30分~2時間程度あげます.
accessToken 1時間後に使用できない部分はrefreshTokenを使用してトークンを再発行できます.
リソース・サービス:>ハードウェア・サービス/ユーザー編集サービス/BasketService(MicroService Architecture,MSA)などの小さなユニットに分割されます.
その利点は、障害が発生した場合、すべてのサービスが停止するが、2つのセクションに分割された場合、障害が発生したサービスのみが停止し、残りのサービスが利用できることです.
AutheServiceにログインすると、2つのJWTが取得されます.1つはaccessToken、もう1つはrefreshTokenです.
ブラウザでaccessTokenをstate形式で保存し、refreshTokenをクッキーに保存します.
CookieオプションでhttpOnly:true、secure:true
httponlyはJSをサポートしていません
secureはhttpsでのみ実行
CookieはAPI要求時に自動的にフォローアップする特徴がある
accessTokenとdataをヘッダに配置し、バックエンドで要求とデータを受信します.
error:UNAUTHENTICATEDでエラーキャッシュを行い、対応するauthServiceはrefreshTokenを提供し、新しい受信accessTokenのAPIを要求し、accesstokenが有効であることを検証した後、無効であれば新しいaccesstokenに戻る.受信したaccesstokenを使用して失敗したリクエストを再試行します.
refreshTokenの方法
brower renderの前にerrorを書くのでerror部分は先に書きます!
scaleup/scaleout
RoundRobin)バックエンド間でデータを切り替える
最小接続(Least Connection)は、データが最も少ないバックエンドにデータを送信します.
パーティション、、、データベース分割垂直パーティション/水平パーティション(Shading)
分散型データベースでは、データはディスクに格納されますが、永続的に格納されます.
Redisメモリに格納されているデータ(永続的なストレージに変更できますが、基本的には非永続的なデータ)
ハッシュ方式はデータを不可知にし、一方向暗号化パスワードをハッシュ!!
ユーザー情報をタグに保存する->JSON Web Token
(JSON JavaScriptオブジェクトシンボル)
奪われる可能性があるので、短い期限を30分~2時間程度あげます.
accessToken 1時間後に使用できない部分はrefreshTokenを使用してトークンを再発行できます.
リソース・サービス:>ハードウェア・サービス/ユーザー編集サービス/BasketService(MicroService Architecture,MSA)などの小さなユニットに分割されます.
その利点は、障害が発生した場合、すべてのサービスが停止するが、2つのセクションに分割された場合、障害が発生したサービスのみが停止し、残りのサービスが利用できることです.
AutheServiceにログインすると、2つのJWTが取得されます.1つはaccessToken、もう1つはrefreshTokenです.
ブラウザでaccessTokenをstate形式で保存し、refreshTokenをクッキーに保存します.
CookieオプションでhttpOnly:true、secure:true
httponlyはJSをサポートしていません
secureはhttpsでのみ実行
CookieはAPI要求時に自動的にフォローアップする特徴がある
accessTokenとdataをヘッダに配置し、バックエンドで要求とデータを受信します.
error:UNAUTHENTICATEDでエラーキャッシュを行い、対応するauthServiceはrefreshTokenを提供し、新しい受信accessTokenのAPIを要求し、accesstokenが有効であることを検証した後、無効であれば新しいaccesstokenに戻る.受信したaccesstokenを使用して失敗したリクエストを再試行します.
refreshTokenの方法
const errorLink = onError(({ graphQLErrors, operation, forward }) => {
if (graphQLErrors) {
for (const err of graphQLErrors) {
// 토큰 만료 에러 시
if (err.extensions.code === "UNAUTHENTICATED") {
// restore token
// const newAccessToken = getAccessToken(setMyAccessToken);
// 재요청
operation.setContext({
headers: {
...operation.getContext().headers,
authorization: `Bearer ${getAccessToken(setMyAccessToken)}`,
},
});
return forward(operation);
}
}
}
});
import { GraphQLClient } from "graphql-request";
import { gql } from "@apollo/client";
import { Dispatch, SetStateAction } from "react";
const RESTORE_TOKEN = gql`
mutation restoreAccessToken {
restoreAccessToken {
accessToken
}
}
`;
export const getAccessToken = async (
setMyAccessToken: Dispatch<SetStateAction<string>>
) => {
try {
const graphQLClient = new GraphQLClient(
"https://backend04.codebootcamp.co.kr/graphql",
{
credentials: "include",
}
);
const result = await graphQLClient.request(RESTORE_TOKEN);
const newAccessToken = result.restoreAccessToken.accessToken;
setMyAccessToken(newAccessToken);
return newAccessToken;
} catch (error) {
console.log(error.message);
}
};
気をつけて!brower renderの前にerrorを書くのでerror部分は先に書きます!
Reference
この問題について(30日目), 我々は、より多くの情報をここで見つけました https://velog.io/@nej1044/30일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol