Today, What I learned?
ํน๊ฐ์์ ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋ฐ๋๋ผ JS๋ก SPA๋ฅผ ๊ตฌํํ๋ ๋ฒ๊ณผ, hashed url path์ ๋ํด ๋ฐฐ์ ๋ค!
์ดํ ์ข ์ฐพ์๋ณด๋ ์๊ฐ๋ณด๋ค SPA๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ๊ณผ ์์์ด ๋ง์๋ค. ๐ค
๊ฐ์ธ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์์ผ๋ฉด ์ข์์ ํ ๋ฐ ์ถ์ ์์ฌ์... ๊ธฐํ๊ฐ ๋๋ฉด ๋ฆฌํฉํ ๋ง ํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค..
์ผ๋จ ์ค๋ ๋ฐฐ์ด ๊ฒ์ ๋ํ ์ ๋ฆฌ ์์!
MPA์ SPA
์ฐ์ ์ด ๋ ์ฃผ์ ์ ๋ํด์๋ ์ด์ ์ ๋ฐ๋ก ์ ๋ฆฌํด๋ณด์๋ ๊ธ์ด ์๋ค. (๋ถ์กฑํจ์ด ์์ ์ ์์)
์์ฝํ์๋ฉด MPA๋ ์ฌ๋ฌ ํ์ด์ง(multi page)๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ .
ํญ์ ์๋ฒ๋ก๋ถํฐ ์์ฑ๋ HTML์ ๋ฐ์์ ์๋ก ๋ ๋๋ง ํ๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจ์ด ์ผ์ด๋๋ค.
SPA๋ ํ๋์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฉฐ ๋ ๋๋ง์ ์ํ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ต์ด ์ ๊ทผ ์ ํ ๋ฒ๋ง ๋ค์ด๋ก๋ํ๊ณ ,
์ดํ ํ์์ ๋ฐ๋ผ์ ๋น๋๊ธฐ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํด์ค๋ ๋ฐฉ์์ด๋ค.
์ต์ด ๋ ๋๋ง ์ดํ ๋ถ๋ถ๋ถ๋ถ ๋ ๋๋ง์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจ ์์ด ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ์ ์ฐํ UX๋ฅผ ์ ๊ณตํ ์ ์๋ค.
ํ์ง๋ง ์ต์ด ๋ ๋๋ง์ MPA์ฒ๋ผ ์์ฑ๋ HTML์ด ์๋๊ธฐ ๋๋ฌธ์, ๋ณด์๊ณผ SEO์ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ด ์๋ค.
Hashed url path , Non-hashed url path
Non-hashed url path
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์์ฃผ ๋ณด๋ URL์ด๋, aํ๊ทธ์ href์ /
๋ฅผ ์ด์ฉํด์ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํ๊ณค ํ๋ค.
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=๋ํ๋ฏผ๊ตญ
์์ ๋ค์ด๋ฒ ๊ฒ์๊ฒฐ๊ณผ URL ๊ฐ์ ๊ฒฝ์ฐ๋ง ๋ด๋ ๊ทธ๋ ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ด๋ ๊ฒ /
๋ฅผ ์ด์ฉํด ๊ตฌ๋ถ๋ URL์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ ๋ฌธ์๋ฅผ GET
ํด์์ผ ํ๋ค๊ณ ์ธ์ํ๋ค.
๊ณ ๋ก ์์ ๊ฐ์ด Cannot GET /abc ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋ ์ ์๋ค.
๋ณดํต์ url์ ์๋ฒ์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจ์ด ์ผ์ด๋ ์๋ฐ์ ์๋ค.
Hashed url path
Url์ ํด์ #
๋ฅผ ๋ถ์ด๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด์ ์๋ถ๋ถ๊น์ง๋ง url๋ก ์ธ์ํ๋ค.
https://example.com/sample/#someting
์ด๋ ๊ฒ ์๋ค๋ฉด https://example.com/sample/
๊น์ง๋ง ์ธ์ํ๋ค๋ ๋ง!
๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ๋ ํญ์ https://example.com/
์ ํด๋นํ๋ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ ๊ฒ์ด๋ค.
JS๋ก SPA ๊ตฌํํ๊ธฐ
JS๋ง์ผ๋ก SPA๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์๋ก๊ณ ์นจ ์์ด ๋ผ์ฐํฐ๋ฅผ ํตํด ํ์ด์ง URL์ด ๋ฐ๋๋๋ก ํ๋ ๊ฒ์ด ํ์ํ๋ค.
์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ์ผ๋ก history์ hash๊ฐ ์๋๋ฐ, history๋ history ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
history๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ๋ค๋ ๋ง์ด ์๊ธฐ๋ ํ๊ณ , ์ค๋ ๊ฐ์์์ ๋ค์ Hash๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.
์ฐ์ ๋ผ์ฐํฐ๊ฐ ๊ตฌํ์ด ๋์ด์ผ ๊ฒฝ๋ก์ ๋ฐ๋ผ์ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ ์ ์๋ค!
const routes = {
"/": "/pages/index.html",
about: "/pages/about.html",
lorem: "/pages/lorem.html",
};
๊ตฌํ์ ์ํ ๋ก์ง
window.location.hash
๋ฅผ ์ด์ฉํด์ ํ์ฌ hash๋ฅผ ์์์จ๋ค.
window.location
๊ฐ์ฒด๋ก ํ์ฌ ํ์ด์ง์ ๋ํ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์ ์ ์๋๋ฐ, ์ด ์ค์ hash
๊ฐ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ url ๋ถ๋ถ์ด๋ค!
- hash์ ๋ณ๊ฒฝ์ด ์์ ๊ฒฝ์ฐ, ํด๋น hash์ ํด๋นํ๋ ๋ผ์ฐํฐ ํ์ด์ง๋ฅผ ์ฐพ๋๋ค.
- ํ์ด์ง html์ fetch ํด์์ index.html์ ๋ ๋๋ง ํ ๋ถ๋ถ์ ๋ฟ๋ ค์ค๋ค. ํต์ผ๋ก ๊ฐ์ ธ์์ ๋ฟ๋ ค์ค๋ค๊ณ ํ ์ ์๋ค!
window ๊ฐ์ฒด ์ด๋ฒคํธ ์คhashchange
๋ผ๋ ์์ฑ ๊ฐ์ผ๋ก ํด์์ ๋ณํ๋ฅผ ์ ์ ์๋ค.window.addEventListener("hashchange", handleLocation);
- ์ฒ์ ๋ ๋๋ง ๋์์ ๋๋ฅผ ์ํ ์ด๋ฒคํธ ์ถ๊ฐ
DOMContentLoaded
๋ฅผ ์ด์ฉํด์ DOM์ด ๋ชจ๋ ๋ก๋๋์์ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๋ก ํ ์ ์๋ค.document.addEventListener("DOMContentLoaded", handleLocation);
HTTP Status 304
์ฒ์ ์๊ฒ ๋ ์ฝ๋ 304 Not Modifeid
๋ผ๋ ์ด๋ฆ์ ๊ฐ๊ณ ์๋๋ฐ, ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ๊ณ ์๋ ์บ์ฑ๋ ๊ฐ์ผ๋ก ๋ฆฌ๋๋ ์
ํ๋ค๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค.
https://developer.mozilla.org/ko/docs/Web/HTTP/Status/304
๋ญ๊ฐ ๋ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ์ง๋ง?..
์ง์ ๊ตฌํํ๋ฉด์ ์๊ฐ์ ์ฌ์ ๊ฐ ์๋ค๋ฉด ์ถ๊ฐ ๋ณด์ํด๋ณด๋ ๊ฒ์ผ๋ก.. ๐ค๐ค
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก์ธ์ค์ ์ค๋ ๋ (0) | 2022.11.18 |
---|---|
ํ์ด์ด๋ฒ ์ด์ค (0) | 2022.11.17 |
TIL : ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ, display:table ์์ฑ (0) | 2022.11.14 |
TIL : CPU, ์ด์งํ์, ์ฌ๊ทํจ์ (0) | 2022.11.11 |
[JavaScript] ์ฐ๊ฒฐ๋ฆฌ์คํธ Linked List in JS (0) | 2022.11.10 |
Comment