
SAML ์ธ์ฆ SAML์ XML ๊ธฐ๋ฐ์ ํ์ค ๋ฐ์ดํฐ ํฌ๋งท์ ๋๋ค. ์ธ์ฆ ์ ๋ณด๋ฅผ XML ํฌ๋งท์ผ๋ก ์์ฑํ๊ณ ์ํธํํ ๊ฒ์ด Assertion์ธ๋ฐ ์ด๋ฅผ ์ด์ฉํฉ๋๋ค. User, IDP(Identity Provider), SP(Service Provider) ๊ฐ ์กด์ฌํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ธ์ฆ์ด ์ด๋ฃจ์ด์ง๋๋ค. (๊ทธ๋ฆผ) User๊ฐ SP๋ก ์๋น์ค๋ฅผ ์์ฒญํ๋ฉด SP๋ ์ธ์ฆ๋ User์ธ์ง ์ฒดํฌํฉ๋๋ค. ์ธ์ฆ๋์ง ์์์ผ๋ฉด ์ธ์ฆ ์์ฒญ(SAMLRequest)์ ์์ฑํ์ฌ User์๊ฒ ์ ์กํฉ๋๋ค. SAMLRequest์ ์ํด User๋ IDP๋ก redirect๋๊ณ ๋ก๊ทธ์ธ์ ํตํด ์ธ์ฆ์ ์งํํฉ๋๋ค. ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด IDP๋ SAMLAssertion์ด ํฌํจ๋ SAMLResponse๋ฅผ User์ ๋ด๋ ค์ค๋๋ค. โ ๊ทธ ๊ณผ์ ์์ IDP๊ฐ ์ค์ ํ Ses..

์ธ์ฆ Best Case ๊ธฐ๋ณธ flow (OpenIDC) Best Case๋ผ๊ณ ์๊ฐํ๋ ์ธ์ฆ flow(OpenIDC)๋ฅผ ๋จผ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋จผ์ , Auth Service๊ฐ ํ ์๋น์ค๊ฐ ์๋ ์์ฌ์ ์๋น์ค์ผ ๋๋ OAuth ๊ธฐ๋ฐ์ flow๊ฐ ํ์์์ด ๋ค์๊ณผ ๊ฐ์ด ์ํ์ค ๋ค์ด์ด๊ทธ๋จ์ด ๊ทธ๋ ค์ง๋๋ค. (ํ ์๋น์ค์ผ ๊ฒฝ์ฐ OAuth ๋ณด๊ธฐ) Client๊ฐ id(username)์ password๋ฅผ ์ ๋ ฅํ์ฌ ๋ก๊ทธ์ธํฉ๋๋ค. ๋ก๊ทธ์ธ ์์ฒญ์ BFF โ Server โ Auth Service๋ก ์ ํด์ง๋๋ค. ์ ๋ฌ๋ id์ password๋ก Auth Service์์ ์ธ์ฆํฉ๋๋ค. ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด access token, refresh token, id token ๋ฅผ Server๋ก ์ ๋ฌํฉ๋๋ค. Server๋ id token ์ d..

Sticky ์คํ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์คํ์ ํ์ํ ์กฐ๊ฑด์ ํ๋์ฉ ์ถ๊ฐํด๊ฐ๋ฉด์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง๋ฅผ ๊ณ ๋ฏผํด๋ณด์. css์ poistion: sticky; ๋ฅผ ์ด์ฉํ์. ์ฐ์ Sticky๋์ด์ผ ํ๋ Element๊ฐ ์ต์๋จ์ ์์นํด์๋ค๋ฉด ์ฝ๋ค. css๋ฅผ ์ด์ฉํ๋ฉด position: relative; ์ธ ๋ถ๋ชจ์ ์๋จ์ ํด๋น Element๊ฐ sticky๋๋ค. .sticky{ position: sticky; top: 0; } https://codepen.io/bucketressi/pen/GROoeKE Sticky-1 ... codepen.io sticky container๋ฅผ ๋ง๋ค์. ์ด๋ฒ์๋ sticky header(์ฒซ๋ฒ์งธ Sticky Element) ์๋์ sticky sub-header๊ฐ ์์นํด์ผ ํ๋ค๊ณ ์๊ฐํด๋ณด์...
Main Concepts ์ฒ์ React๋ฅผ ์์ํ ๋ ๊ฑฐ์ ์ดํด ๋ชปํ๊ณ practice ์ ๋๋ง ์ฐธ์กฐํ์ ๋ฏ ์ถ์ด์ ๋ค์ ์ฝ์ด๋ณด์๋ค. ๊ฐ๋ ์ ์ด๋ฒ์ ๋ช ํํ ํ๋ค๊ฑฐ๋ ์ฒ์ ๋ค์ด๋ณธ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด์๋๋ฐ, Main concept์์๋ ๊ฝค๋ ๋ง์๋ค. ์ด๋ฒ ๊ธฐํ๋ก ํด๋น ์ ๋ฆฌ ๊ธ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๋๋ก ํด์ผ๊ฒ ๋ค ๐ Introducing JSX React๋ ๊ธฐ์กด์ html, js ์ ๊ฐ์ด ๊ธฐ๋ฅ ๋ณ๋ก ๋ฌธ์๋ฅผ ๋๋๋ ๋ฐ์์ ํ ์ปดํฌ๋ํธ ๋จ์๋ก ๋๋๊ฒ ํจ์ผ๋ก์จ js, html(jsx), css๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํ์๋ค. JSX์ ๋ด๋ถ์ ๋ณ์๋ค์ ๋ ๋ ์์ ์ ์ด๋ฏธ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ ๋๋ฏ๋ก XSS ๊ณต๊ฒฉ์ ํผํ ์ ์๋ค. Rendering Elements React๋ก ๋ง๋ค์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋์ root DOM ๋ ธ๋๋ฅผ ..
Open Graph๋? ์ด๋ค ์นํ์ด์ง๋ social graph์ ์ผ๋ถ๋ถ์ด ๋ ์ ์๋๋ก ํ๋ ํ๋กํ ์ฝ์ด๋ค. Metadata og:title : url ๊ณต์ ์ ์ ๋ชฉ์ผ๋ก ๋ค์ด๊ฐ๋ ์์ญ์ด๋ค. (์นด์นด์คํก ๊ณต์ ๋ title๋ง ๊ณต์ ๋๋ค.) og:type : object์ type์ด๋ค. (ex_ video.movie, website) og:image : url ๊ณต์ ์ ๋ํ๋๋ ์ด๋ฏธ์ง์ด๋ค. og:url : graph์์ id๋ก ์ฐ์ด๋ url์ด๋ค. og:audio, og:video : audio, video ํ์ผ์ url์ด๋ค. og:description: object์ ๊ดํ ์ค๋ช ์ด๋ค.์นด์นด์คํก ๊ณต์ ์์๋ ํ์๋์ง ์๊ณ ์ฌ๋ ๊ณต์ , ๋ธ๋ก๊ทธ์์๋ description๊น์ง ํ์๋๋ค. og:site_name : ๋ฐฉ๋ํ ์น์ฌ์ด..
์ํฉ next.js์์๋ SSR์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ url์ ์๋ query๋ฅผ ๋ฐ์์ฌ ์๊ฐ ์๋ค. ํด๊ฒฐ 1 next page์์ getServerSideProps ํจ์๋ฅผ ์ด์ฉํด query๋ฅผ ๋ฐ์์ฌ ์ ์๋ค. const Page: NextPage = ({ params }) => { } export async function getServerSideProps (context) { const req = context.req; const params = new URLSearchParams(req._parsedUrl.query); return { props: { params } }; }โ ํด๊ฒฐ 2 ํด๊ฒฐ 1์ ๋ฐฉ๋ฒ์ผ๋ก page ๋ด๋ถ์์๋ url parameter๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง _app.tsx์ ๊ฐ์ด ne..
์ ํ์ ์ถฉ๋ ์ /*css*/ .special{ color: blue; } p{ color: red; } css๋ cascade์ specificity๋ผ๊ณ ๋ถ๋ฆฌ๋ rule์ ๊ฐ์ง๊ณ ์๊ณ , ํด๋น rule์ ๋ฐ๋ผ ์ถฉ๋ ์ ๋ ๊ฐํ ์ ํ์๊ฐ ์ ์ฉ๋๋ค. cascade rule : ๋ค์ ์ ์ฉ๋ ์คํ์ผ์ด ์์ ์คํ์ผ์ ๋ฎ์ด์ด๋ค. specificity rule : ์์๋ฅผ ๋ ํน์ ํ๋ ์ ํ์๊ฐ ์คํ์ผ์ ์ฐจ์งํ๋ค. ๋ฐ๋ผ์ ์์ ์์ ์์ specificty rule์ ์ํด color๋ blue๊ฐ ๋๋ค. specificity specificity๋ 4๊ฐ์ง์ ๋จ์๋ก ์ธก์ ๋๋ค. Thousands : style ์์ฑ ๋ด์ ์ ์๋์ด ์๋ style(inline style)์ผ ๊ฒฝ์ฐ Hundreds : ID selector๋ฅผ ์ฌ์ฉํ์ฌ..
๋ง์ผ Typescript๋ก ๊ฐ๋ฐํ๋ ์ค์ ์์ฃผ ์ ์์ฑ๋ JS ๋ชจ๋์ ๊ฐ์ ธ์์ ์ฐ๊ณ ์ ํ๋ค๋ฉด, ํด๋น ๋ชจ๋ ๋ด์ ํจ์๋ typescript๋ก ์ ์๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๋ชจ๋์ด ํด๋น ์์ฑ์ ๊ฐ์ง๊ณ ์์์๋ type์ด ์ ํด์ ธ์์ง ์์์ ๊ฐ์ง๊ณ ์์ง ์๋ค๊ณ ํด์ํ๋ ๊ฒ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ด declare ํค์๋๋ฅผ ์จ์ ์ ์ํด๋๋ฉด type์ด ์ธ์๋์ด typescript compiler๊ฐ ํด์ํ ์ ์๊ฒ ๋๋ค. declare let module: any ๊ฐ๋จํ ๋งํด์ ์ปดํ์ผ๋ฌ์๊ฒ "์ด๊ฑด ์ด๋ฏธ ์กด์ฌํ๊ณ ๋ค๋ฅธ ์ฝ๋์์ ์ฐธ์กฐํ ์ ์๋ค."๋ผ๊ณ ์ค๋ช ํ๋ ๊ฒ์ด๋ค.
Comment