๋ฌธ์ ์๋ง๋ค ์ฐ์ฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ ๊ฒฝ์ฌ์จ๋ ์ ๋ ์ฝ์์ ๊ฐ๊ธฐ ์ ์ฑ๊ธฐ์ง ์์ ๋ฌผ๊ฑด๋ค์ด ์๋ ์ง ํ์ธํ๊ณ ์๋ค. ํ์ํ ๋ฌผ๊ฑด์ ์ ๋ถ ์ฑ๊ธด ๊ฒ ๊ฐ์๊ณ ์ธ์ถ ํ ๋์์ค๋ ๊ธธ์ ๊ฒฝ์ฌ์จ๋ ์ธ์ณค๋ค. "์ ๋ง๋ค ์ฐ์ฐ!!!" ๊ฒฝ์ฌ ์จ๋ ๋งค๋ฒ ์ธ์ถํ๊ณ ๋์์ผ ์ด๋ค ๋ฌผ๊ฑด์ ์ง์ ๋๊ณ ์๋ค๋ ๊ฒ์ ๋ ์ฌ๋ฆด ๋๋ง๋ค ์์ฑ ๊ฐ์ ์๋ฌ๋ฆฌ๋ ๊ฒ์ด ๋๋ฌด ์ซ์๋ค. ์ธ์ถ์ด ์ฆ์ ๊ฒฝ์ฌ ์จ๋ ๋ฐ๋ณต๋๋ ์ผ์ ๊ทผ์ ํ๊ธฐ ์ํด ๊ผญ ์ฑ๊ฒจ์ผ ํ ๋ฌผ๊ฑด๋ค์ ์ ๋ฆฌํด๋ณด์๋ค. ํ์ง๋ง ์ง๊ฐ, ์ค๋งํธํฐ, ์ฐ์ฐ, ์ฐจ ํค, ์ด์ดํฐ, ์๊ณ, ๋ณด์กฐ ๋ฐฐํฐ๋ฆฌ ๋ฑ ์ข ๋ฅ์ ๊ฐ์๊ฐ ๋๋ฌด ๋ง์๋ค. ํ์ ๋ถํ์ํ ์์ง์์ ์์ฃผ ์ซ์ดํ๋ ๊ฒฝ์ฌ ์จ๋ ์ด ๋ฌผ๊ฑด๋ค์ ์ต๋ํ ๋น ๋ฅด๊ฒ ์ฑ๊ฒจ์ ์ธ์ถํ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์๊ณ ์ถ์๋ค. ๊ฒฝ์ฌ ์จ๋ ํ ๊ฑธ์์ ์ํ์ข์ฐ์ ์ธ์ ํ ์นธ์ผ๋ก๋ง ์์ง์ผ ์ ์๋ค. ๊ฒฝ์ฌ ์จ..
์ธ์ฆ ๋ฐฉ์ 1. API key๋ฅผ ํตํ ์ธ์ฆ ๊ณผ์ user๊ฐ login ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค. Client๋ ์ด๋ฏธ Server์ ๋ฑ๋กํ API key๋ฅผ ๊ฐ์ง๊ณ ์๋ค. Client๋ user๊ฐ ์ ๋ ฅํ Login ์ ๋ณด๋ฅผ ๋ฐ์์ API key์ ํจ๊ป Login API๋ฅผ ์์ฒญํ๋ค. Server๋ API key๋ฅผ ํตํด ํด๋น Client๊ฐ ๋ฑ๋ก๋์ด์๋ ์ง๋ฅผ ๊ฒ์ฌํ๋ค. Sever๋ Login ์ ๋ณด๋ฅผ ํตํด ํด๋น User๊ฐ API๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ง๋ฅผ ๊ฒ์ฌํ๋ค. ๋จ์ API key๋ ๋ชจ๋ Client๋ค์ด ๊ณตํต์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ธ์ถ๋๋ฉด ์ ์ฒด API๊ฐ ๋ ธ์ถ๋๋ค. API key๋ ์๊ฐ์ด ๋ฌด์ ํ์ด๊ณ ํ ๋ฒ ๋ ธ์ถ๋๋ฉด API key ๋ณ๊ฒฝ ์ ๊น์ง ๊ณ์ ๋ ธ์ถ๋๋ค. 2. API Token์ ํตํ ์ธ์ฆ ๊ณผ์ user๊ฐ login ์ ๋ณด๋ฅผ ์ ..
๊ธฐ์กด์ ์ํคํ ์ฒ ๊ธฐ์กด์ ์ํคํ ์ฒ๋ Monolitic ์ํคํ ์ฒ๋ก ํ๋์ ์ฝ๋ ๋ฒ ์ด์ค์ ํ๋์ ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ํคํ ์ฒ๋ฅผ ๋ปํ๋ค. ์๋น์ค ๋ณ๋ก ๋๋์ด์ ธ์์ง ์์ผ๋ฉฐ ํ๋์ ์๋น์ค๋ฅผ ๊ฐฑ์ ํ์ฌ ๋ฐฐํฌํ๊ณ ์ ํ๋ฉด ๋ชจ๋ ์๋น์ค๊ฐ ๋ค์ ๋ฐฐํฌ ๋๋ค. MSA ์ฅ์ ๊ฐ๋จํ๋ค. ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค. MSA ๋จ์ ๋น๋ ์๊ฐ, ํ ์คํธ ์๊ฐ, ๋ฐฐํฌ ์๊ฐ์ด ๋น ๋ฅด๊ฒ ์์นํ๋ค. ํ๋์ ์๋น์ค์ ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค๋ก ์ด์ด์ง ์ ์๋ค. ์๋น์ค์ ์ํฅ๋๋ ์ ์ฒด ์์คํ ์ ํ์ ์ด ์ด๋ ต๋ค. MSA ๊ตฌ์กฐ UI layer ๋น์ฆ๋์ค ๋ก์ง layer ๋ฐ์ดํฐ ์ ๊ทผ layer DB Micro Service Architecture MSA๋ ๋ฐฐํฌ ๋จ์๋ฅผ ์๋น์ค ๋ณ๋ก ์ชผ๊ฐ ์ํคํ ์ฒ๋ฅผ ๋ปํ๋ค. ๋น๊ตํ์๋ฉด ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค. MSA ํน์ง ๊ฐ ์๋น์ค๋ mono..
Refresh token์ ์ฅ์ ๋ณธ์ธ์ ์๋ API ์์ฒญ ์ ๋งค๋ฒ Access Token์ ๋ฐ๊ธํ๋ ์์ผ๋ก API๋ฅผ ๊ตฌ์ฑํ์๋๋ฐ, ์ด๋ ๊ฒ ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ๋ง์์ง ์๋ก ์์คํ ๋ถํ๊ฐ ์ฆ๊ฐํ๋ค. ๋ฐ๋ผ์ Refresh Token์ ๋ฐ๊ธํ๋ ๊ฒ์ด ๋ซ๋ค. ๋ํ, refresh token์ด ์์ ๊ฒฝ์ฐ access token์ ์ ํจ ์๊ฐ์ ์งง๊ฒ ํ์ฌ ํ์ทจ ์ ๋น ๋ฅด๊ฒ ๋ฌดํจํ ์ํฌ ์ ์๋ค. Refresh token์ ๋์ Access Token์ ํตํด User๊ฐ request๋ฅผ ๋ณด๋ด๊ณ , ์ ํจ ์๊ฐ์ด ๋ง๋ฃ ๋์๋ค๋ ์๋ต์ ๋ฐ๋๋ค. User๋ Access Token๊ณ ํจ๊ป Refresh Token์ ์๋ฒ๋ก ๋ณด๋ธ๋ค. Refresh Token์ด ์ ํจํ๋ค๋ฉด ์ ํจ์๊ฐ์ด ๊ฐฑ์ ๋ Access Token์ด ์๋ก ๋ฐ๊ธ๋์ด User..
token์ cookie์ ์ ์ฅํ ์๋, Web Storage์ ์ ์ฅํ ์๋, Client ์์ฒด์ ์ ์ฅํ ์๋ ์๋ค. Cookie ์ฟ ํค๋ ์๋ฒ๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ต๋ 4KB๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ค. ํด๋ผ์ด์ธํธ์์ Credential ์์ฑ์ผ๋ก ํ์ฉํ๋ฉด ์๋ฒ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. HTTP Request ์ ์๋์ผ๋ก ํฌํจ๋์ด ์๋ฒ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์ ๊ณต ๊ฐ๋ฅํ๋ค. HttpOnly ์ค์ ์ ์ด์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์๋๋ก ๋ง๋ค ์ ์๋ค. Web Storage Session Storage ์๋ฒ์์ ์ ๊ทผํ ์ ์๋ค. ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ๋ชจ๋ ์ญ์ ๋๋ค. 5~10MB์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค. Local Storage ์๋ฒ์์ ์ ๊ทผํ ์ ์๋ค. ๋ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ค. 5~10MB์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค. Client Side ํด๋ผ์ด์ธํธ ..
๊ฐ๋ ์ ๋ฆฌ ๋ด๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ Client, ๋ค๋ฅธ ์๋น์ค๋ฅผ Resource Server, ๋ ์๋น์ค๋ฅผ ๋ชจ๋ ์ด์ฉํ๋ ์ฌ์ฉ์๋ฅผ Resource Owner๋ผ๊ณ ์ ์ํ๋ค. ์ถ๊ฐ์ ์ผ๋ก Resource Server์์ ์ธ์ฆ์ ๋ด๋นํ๋ ์๋ฒ๋ฅผ ๋ฐ๋ก Authorization Server๋ผ๊ณ ํ๋ค. ์ด๋ ๊ฒ ์ฐํฉํด์ ์ธ์ฆ์ฒด๊ณ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ federated Identity๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฐฐ๊ฒฝ Client๊ฐ Resource Server(google, facebook ๋ฑ)์ ์๋ Resource Owner์ ๊ณ์ ์ ์ ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์์๊น? Resource Server์ ๋ํ Resource Owner์ id, pw๋ฅผ ์ ๊ณต๋ฐ์ผ๋ฉด ๋ ์ข๊ฒ ์ง๋ง ๋ณด์ ์ ๋ขฐ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฐ๋ผ์ oAuth๊ฐ ๋์๋ค. oAuth๋ฅผ ..
๋ฌธ์ ์์ ์ด์ง ํธ๋ฆฌ ๋๋ก ๋คํธ์ํฌ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ BOJ ๋๋ผ๋ ๋์์ ๋ ๋์๋ฅผ ์ฐ๊ฒฐํ๋ ๋๋ก๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ด ๋๋ผ์ ๋๋ก ๋คํธ์ํฌ๋ ์์ ์ด์ง ํธ๋ฆฌ์ ํํ๋ฅผ ๊ฐ์ง๋ค. ์๋น์ด๋ BOJ ๋๋ผ์ ๋๋ก ๋คํธ์ํฌ ํธ๋ฆฌ์ ๋์ด H๋ฅผ ์๊ณ ์๋ค. ํธ๋ฆฌ์ ๋์ด๋ฅผ ์๋ค๋ฉด, ๋์์ ๊ฐ์์ ๋๋ก์ ๊ฐ์๋ ๊ตฌํ ์ ์๋ค. ํธ๋ฆฌ์ ๋์ด๊ฐ H์ธ ๊ฒฝ์ฐ์ ๋์์ ๊ฐ์๋ 2(H+1)-1๊ฐ ์ด๊ณ , ๋๋ก์ ๊ฐ์๋ 2(H+1)-2๊ฐ๊ฐ ๋๋ค. ์๋ ๊ทธ๋ฆผ์ H = 2์ผ ๋, ๊ทธ๋ฆผ์ด๋ค. ์๋น์ด๋ ๋๋ก ๋คํธ์ํฌ์ ์ฐจ๋ฅผ ๋ณด๋ด๋ ค๊ณ ํ๋ค. ๋ชจ๋ ์ฐจ๋ ์์ ๋์์ ๋์ฐฉ ๋์๊ฐ ์์ผ๋ฉฐ, ๊ฐ์ ๋์๋ฅผ ๋ ๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋๋ค. ์ฐจ์ ์์ ๋์์ ๋์ฐฉ ๋์๊ฐ ๊ฐ์ ์๋ ์๋ค. ๋ชจ๋ ๋์๋ฅผ ๋ฐฉ๋ฌธํ ์ฐจ์ ๊ฐ์๊ฐ ๋ชจ๋ 1๊ฐ๊ฐ ๋๊ธฐ ์ํด์, ์๋น์ด๊ฐ ์ฐจ..
๋์ด๋ : ๊ณจ๋ 2 ๋ฌธ์ ์ด์ง ํ์ ํธ๋ฆฌ ๋ณต์ํ๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ 1๋ถํฐ N๊น์ง์ ๋ชจ๋ ์ ์๋ฅผ ํ ๋ฒ์ฉ ํฌํจํ๊ณ ์๋ ์์ด A1, A2, ..., AN์ด ์๋ค. ๊ฐ์ด A1์ธ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ํ๋ ํธ๋ฆฌ์ A2, A3, ..., AN ์ ์์๋๋ก ์ฝ์ ํ๋ ค ํ๋ค. N-1๊ฐ์ ๋ ธ๋๋ฅผ ์ฝ์ ํ ๋๋ง๋ค ๋ฃจํธ์์ ๊ทธ ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์, ์ฆ ๋ ธ๋์ ๊น์ด๊ฐ ์ฃผ์ด์ง ๋ A1, A2, ..., AN์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ํ์ด ๊ฐ ๋ฐ์ผ๋ฉด์ 2N(n-1)children.size() > 0) { // ์ผ์ชฝ ์์ ์กด์ฌ Inorder(head->children[0]); } result[head->index] = idx++; if (head->children.size() > 1) { // ์ค๋ฅธ์ชฝ ์์ ..
Comment