์๊ณ ๋ฆฌ์ฆ
์คํฐ๋ ์กฐ์๋ถ๋ค์ด ๋ชจ๋ ํ ์์ผ์ ์๋ ํ ์ค ์ฝ๋ฉํ
์คํธ์ ์ฐธ๊ฐํด์ ๊ฒฝํ์ด๋ผ๋ ํด๋ณด๊ธฐ๋ก ํ๋ค. ์์ง ์คํฐ๋ ์์ํ์ง ์ผ๋ง๋์ง ์์์ ํฐ ๊ธฐ๋๋ ์์ง๋ง, ๊ธฐํ๊ฐ ์๊ฒผ์๋ ์ฐธ์ฌํด๋ณด๋๊ฑด ์ข์๊ฒ ๊ฐ๋ค.
ํ๋ฃจ 3๋ฌธ์ .. ์ด๊ฒ๋ ํ๋ค์ง๋ง ๊พน ์ฐธ๊ณ ๊ณ์ํด๋ด์ผ์ง .. ๋งค์ผ ๊ฐ์ฅ ์ด๋ ค์ ๋ ๋ฌธ์ ๋ฅผ ์๋ ํ์ด๋ก ๋จ๊ฒจ๋๊ณ ๋ณต์ตํด์ผ๊ฒ ๋ค.
์๊ธฐ์๊ฐ ํ์ด์ง๋ง๋ค๊ธฐ
์ด์ ์์
ํ๋ ํ๋ก์ ํธ ๋ถ๋ถ ํ์ด์ง๋ฅผ ๋ง๋ค์๋ค. ์ง๊ธ์ ๊ธฐ๋ณธ์ ์ธ ๋ ์ด์์๋ง ์ก์๋์ ์์ ํด์ผํ ๋ถ๋ถ์ ๋จ์์๋ค. ์๋ ์ฒ์์๋ ํ๋ก์ ํธํ์ด์ง ์์ฐ์ gif๋ก ํ๋ ค๊ณ ํ๋๋ฐ ๋
นํํ ์์์ gif๋ก ๋ณํํ๋ ์ฉ๋์ด ํจ์ฌ ์ปค์ ธ์ ๊ทธ๋ฅ ๋น๋์คํ์ผ์ ์ฌ์ฉํด์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
์์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ์์์ด ์ฌ์๋๊ณ , ์์๋ฐ์ผ๋ก ๋ง์ฐ์ค๊ฐ ๋๊ฐ๋ฉด ์์์ด ์ ์ง๋๋ ํํ๋ก ๋ง๋ค์๋ค.
๋ด์ผ์ who page
๋ฅผ ๊ตฌ์ํ๊ณ , ๋นจ๋ฆฌ ์ด๋ ฅ์๋ฅผ ์์ฑํด์ ๊ธฐํ๊ฐ ์๊ธฐ๋ฉด ๋ฐ๋ก ์ง์ ํ ์ ์๊ฒ ์ค๋นํด์ผ๊ฒ ๋ค.
์๋ฒ์ฌ์ด๋ ๋ ๋๋ง (๊ฐ๋ฐ์๋ผ๋ฉด ์์์ผ๋ก ์๊ณ ์์ด์ผ ํ๋ ๊ฐ๋ ์ ๋ฆฌ โญ๏ธ)
https://youtu.be/iZ9csAfU5Os (๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ๐งโโ๏ธ)
๐งญ ์น ์ญ์ฌ๋ถํฐ ์์
1990๋ ๋ ์ด => Static Site๋ฅผ ์ฃผ๋ก ์ฌ์ฉ (๋ค๋ฅธ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ ์ฒด ํ์ด์ง๊ฐ ๋ค์ ๋ก๋ฉ๋จ ) => ๊น๋นก์ ํ์๋ฐ์
1996๋
=> <iframe>
๋์
(๋ถ๋ถ์ ์ผ๋ก ๋ฌธ์๋ฅผ ๋ฐ์์์ ์
๋ฐ์ดํธ ๊ฐ๋ฅ)
1998๋ => XMLHttpRequest => ํ์ํ ๋ฐ์ดํฐ๋ง ๋ถ๋ถ์ ์ผ๋ก ๋ฐ์ ์ฌ ์ ์๊ฒ๋จ (์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก)
2005๋
Ajax => SPA(Single Page Application) => ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ถ๋ถ์ ์ผ๋ก ํ์ด์ง๋ฅผ ์
๋ฐ์ดํธํด์ ์ฌ์ฉํจ.
=>์ฌ์ฉ์ฑ์ด ํฌ๊ฒ ์ฆ๋
=> ์ฌ์ฉ์์ ์ปดํจํฐ ์ฌ์์ด ์ข์์ง์ ๋ฐ๋ผ ๋ง์ ์๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก๋ค.
์ดํ ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ Angular, React, Vue.js ์๊น
=> ์ 3๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ,ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด์ ๋ง๋ ์นํ์ด์ง๋ฅผ CSR (Client Side Rendering) ์ด๋ผ๊ณ ํ๋ค.
๐ CSR(Client Side Rendering)
CSR์ ์๋ฒ์์ ๋ฐ์์ค๋ html,js๋ฑ ํ์ผ์ ๋ฐ๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ ค์ ์ฒซ ํ๋ฉด์ด ๋ฆ๊ฒ ๋จ๋ ๋จ์ ์ด ์๊ณ ,
SEO(Search Engine Optimization)๊ฐ ์ข์ง ๋ชปํ๋ค. SEO => ๊ฒ์์์ง ์ต์ ํ
SEO๋ html๋ด๋ถ์ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ, CSR์ html์ด ๋น์ด์๋ค. ๊ตฌ๊ธ์์๋ ๊ฐ์ ํ๋ค๊ณ ๋ ํ์ง๋ง seo๊ฐ ์ข์ง ๋ชปํ๋ค.
=> TTV์ TTI๊ฐ ๊ฐ๋ค.
๐ SSR(Server Side Rendering)
SSR(Sever Side Rendering)์ ์ฒ์ ๋ก๋ฉ์ด ๋น ๋ฅด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ปจํ
์ธ ๊ฐ html ๋ฌธ์์ ๋ด๊ฒจ ์์ด์ SEO์๋ ์ข๋ค.
๊ทธ๋ฌ๋ 1990๋
์ด์ ๊ฐ์ด ๋ธ๋งํน ์ด์๊ฐ ์์ด์ ์ฉ ์ข์ง ๋ชปํ UX๋ฅผ ๊ฒฝํ ํ ์ ์๋ค. ๋ํ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ธฐ ์ฝ๋ค. ( ์ฌ์ฉ์๊ฐ ๋ง์ ์๋ก ํด๋ฆญ์๊ฐ ์ฆ๊ฐ๋๋ฉฐ ๋์ ์ผ๋ก ์์ฑํด์ผํ html์ ์๊ฐ ๋ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.)
์ฒซ ํ๋ฉด์ด ๋นจ๋ฆฌ ๋ก๋ฉ๋๋ ์ฅ์ ์ด ์์ง๋ง, ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ JS๋ฅผ ์๋์ ์ผ๋ก ๋ฆ๊ฒ ๋ฐ๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ฅผ ํด๋ฆญํด๋ ์๋ฌด๋ฐ ๋ฐ์์ด ์์ ์ ์๋ค.
=> TTV,TTI ๊ณต๋ฐฑ์ด ๋ฐ์ํ๋ค. (๊ธธ๋ค..)
๐ฅ ๋ง๋ฌด๋ฆฌ
TTV (Time To View): ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ ์์ ์ด๋ค.
TTI (Time To Interact) : ์ฌ์ฉ์๊ฐ ์นํ์ด์ง์์ ์ธํฐ๋ ์ ํ ์ ์๋ ์์ ์ด๋ค.
=> ์ฌ์ดํธ์ ๋งก๊ฒ TTV,TTI์ ์ฐจ์ด๋ฅผ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด์ผํจ
โค๏ธ SSG(Static Site Generation)
(๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ๐งโโ๏ธ : ํญ์ ๋ง์ ๋์์ ๋ฐ๋ ๊ฐ์ฌํ ์๋ฆฌ๋!! ์ค๋๋ ๊ฐ์ฌํฉ๋๋ค.)
๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ
function solution(places) {
let answer = [];
for (let i = 0; i < places.length; i++) {
answer.push(keep_dist(places[i]));
}
return answer;
}
// ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธ
function keep_dist(place) {
place = place.map(v => v.split(''));
for (let row = 0; row < 5; row++) {
for (let col = 0; col < 5; col++) {
if (place[row][col] === 'P') {
// ๊ฐ๋ก ํ์นธ ์ฒดํฌ
if (col < 4 && place[row][col + 1] === 'P') {
return 0;
}
// ๊ฐ๋ก ๋์นธ ์ฒดํฌ
if (col < 3 && place[row][col + 2] === 'P' && place[row][col + 1] === 'O') {
return 0;
}
// ์ธ๋ก ํ์นธ ์ฒดํฌ
if (row < 4 && place[row + 1][col] === 'P') {
return 0;
}
// ์ธ๋ก ๋์นธ ์ฒดํฌ
if (row < 3 && place[row + 2][col] === 'P' && place[row + 1][col] === 'O') {
return 0;
}
// ์๋ ์ผ์ชฝ ๋๊ฐ
if (row < 4 && place[row + 1][col - 1] === 'P') {
if (place[row + 1][col] === 'O' || place[row][col - 1] === 'O') {
return 0;
}
}
//์๋ ์ค๋ฅธ์ชฝ ๋๊ฐ
if (row < 4 && col < 4 && place[row + 1][col + 1] === 'P') {
if (place[row + 1][col] === 'O' || place[row][col + 1] === 'O') {
return 0;
}
}
}
}
}
return 1;
}
์ ์ฒ์์ ๋ฌธ์ ์ค๋ช ์ ๋งจํดํผ๊ฑฐ๋ฆฌ๋ผ๋ ๋จ์ด๊ฐ๋์์ ๊ทธ๋๋ถํฐ ๊ฒ๋จน๊ณ ๋ฌธ์ ๋ฅผ ํผ ๊ฒ ๊ฐ๋ค.
(๋ ํผ๋ฐ์ค๋ฅผ ๋ณด๊ณ ์ฝ๋๋ฅผ ์ดํดํด๋ณด๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.) ๐คฎ
์ฝ๊ฐ ํ๋ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ์๊ฐํด์ if๋ฌธ ๋ถ๊ธฐ๋ฅผ ๋๋ ์ ์ฝ๋๊ฐ ์์ฑ ๋ ๊ฒ ๊ฐ๋ค.