Frontend 101
์์ ์ ๋ค์๋ ๋ด์ฉ์ ๊ฐ๋จํ๊ฒ ๋ฉ๋ชจํ์ต๋๋ค.
์ถํ์ ๊ณต๋ถํ๋ฉฐ ์ข ๋ ์ด์ ๋ถ์ฌ๋ณผ๊ฒ์!
๋น ๋ฅธ ๋ฉ๋ชจ๋ผ ๊ธํฌ๊ฐ ์งง๊ฒ ๋์ด์ง๋ ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
Overview
ํ๋ก ํธ์๋ ๊ฐ๋ฐ?
web
client๋ Browser(Chrome, FF, Edge, Safari, Whale) ๋ฅผ ํตํด ์น์ ์ ๊ทผ
client (userโs device / user agent / host device )
-
Support Language : HTML, CSS, JS, WebAssembly(WASM)
๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ์ธ์ด์๋ ํ๊ณ๊ฐ , 4๊ฐ๊น์ง (*****)
png ๊ฐ์ ํ์ผ์ ์ธ์ด๊ฐ ์๋๋ผ Binary
e.g.
https://www.naver.com ์ ์ ์ํ๋ค๊ณ ํ๋ฉด
naver.com์ ๋๋ฉ์ธ
ํด๋น ๋๋ฉ์ธ์ด ์ ์ฅ๋ DNS ์ ๋ค์ด๊ฐ์ IP๋ฅผ ์ฐพ์
Request
๋ธ๋ผ์ฐ์ โโโ> ์๋ฒ - ํธ์คํ
์๋ฒ (๋ฐฑ์๋๋ฅผ ๋๋ฆฌ๋ ์๋ฒ,). <โโ> Database
<โโโ
Response (๋ณดํต์ HTML์ ๋ฐ์์)
response๋ฅผ ๋ฐ๋ ๋๋ถ๋ถ์ ํฌ๋งท์ HTML
HTML์ ์ด๋ป๊ฒ ๋ง๋๋๋๊ฐ ํ์ฌ๊น์ง์ ์น์ ๋ฐ์ ๋ฐฉ์
-
์ ์ ํ์ผ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์๊ฒ ์ง. ์๋ฒ์ DB๊ฐ ํต์
-
๊ณผ๊ฑฐ์๋(์ฝ 2012๋
์ฏค์) ์๋ฒ๊ฐ html์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ ์ ๋ฌ. : Server-side Rendering (SSR)
๋ํ์ ์ธ ๊ฒ ASP, PHP, JSP
์์ฆ์๋ ์ด ์ธ์ด๋ค์ด ์๋์ ์ผ๋ก ์ ์ฐ์. ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ ์์ฐ๊ธฐ ๋๋ฌธ์
ํ์ฌ๋(์์ฆ์ ๋ค ์ฌ๊ธฐ) ํด๋ผ์ด์ธํธ๊ฐ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ HTML์ ์์ฑ : Client-side Rendering (CSR)
๋ํ์ ์ผ๋ก AJAX
FE๊ฐ๋ฐ์๊ฐ ์์์ผ๋๋ ๋ฒ์๊ฐ ๋๊ฒ ๋ชจํธํด.
Backend For Frontend (์๋ฒ๊ฐ api๋ง ํ๊ณ , fe๊ฐ ์๋ฒ์ฌ์ด๋๋ ๋๋ง๊น์ง ๋ค ํ๋ ๊ฒ)์ด ์์ฆ์ ํจ๋ฌ๋ค์
โ
๋๋ฉ์ธ์ ๋ํด ๋ ๊น์ด ์๊ฒ ์๊ธฐํด๋ณธ๋ค๋ฉด
naver.com/search
ํธ์คํธ๋๋ฉ์ธ / Path
๊ณผ๊ฑฐ์๋ ์๋ฒ์์ root(/)๋ก ๋ฆฌํ์คํธ๋ฅผ ํ๋ฉด ํน์ root search(/search)๋ก ์ค๋ฉด ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ๋์ง๋ฅผ ์ง์ ํด์คฌ์ด์ผ ํ๋ค. : ๋ผ์ฐํ
(routing)
๋ธ๋ผ์ฐ์ ์์ index.html์ ๊ฐ์ง๊ณ ์๊ณ
JS์์ Path ๋ณ๋ก api ํธ์ถ์ ๋ค๋ฅด๊ฒ : Single Page Application, SPA (JS์์ ์ฒ๋ฆฌํด์ค) (์๋ ์ ๊ฒ. ์์๋ ์ด๊ฒ๋ง ์ฐ์ง ์๊ณ ์์ด ์)
ใด> / => API
ใด> /search => search API
โโ> ๋ฌธ์ ์ : ๋ผ์ฐํ
์ ํ๋, ๋ฒ๋ค ์ฌ์ด์ฆ ์ปค์ง (์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ์ฌ์ด์ฆ) : ์ด๊ธฐ ๋ก๋ฉ์ด ๋๋ ค์ง
์๋ฒ์ฌ์ด๋์ ํด๋ผ์ด์ธํธ์ฌ์ด๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋
- ์๋ก๊ณ ์นจ(CSR, Client-side Rendering ์์ ํ์์๋ค)
- ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ฌ ์ ์๋ค.
-
SPA (Single Page Application)
SSG (Static Side generation) - ์ฌ์ดํธ๋ฅผ ๋ฏธ๋ฆฌ static์ผ๋ก ๋ค ์์ฑํด์ ์๋ฒ์ ์ฌ๋ฆฌ๋,
SSR (Server Side rendering)
์ 3๊ฐ์ง๋ฅผ ์์ด์ ์.
โ
Paradigm ํจ๋ฌ๋ค์
FE์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์์ญ
1. UI (HTML, CSS)
2. Presentation (React, Angular, Vue.js, SvelteโView Model(VM, HTML, CSS๋ฅผ ๋ค ์์ฐ๋ฆ))
โ ๋ชจ๋ธ๊ณผ ํ๋ ์ ํ
์ด์
์ด ์ค์ ๋ก๋ ๋ช
ํํ๊ฒ ๋๋ ์ง์ง ์๋๋ค๋ ๊ฒ.(์ด ์ด๋ ค์ด ๋ถ๋ถ)
> Model (Redux, MobX,,,,, Recoil, Context API)
> Data (Fetch API, AJAX)
Business Logic (๋ชจ๋ธ๊ณผ ํ๋ ์ ํ
์ด์
์ด ์์ฌ ์)
์ด๋ป๊ฒ state๊ฐ ๋ฐ๋๋ฉด์ re-render๋ฅผ ๋ง์ ๊ฒ์ธ๊ฐ ํ๋ FE์ ์ค์ํ ์์ .
๋๋ฌด ์ปค์ก๊ธฐ ๋๋ฌธ์.
๊ฐ๊ฒฐํฉ์ด ๋๊ธฐ ์ฌ์์. ๋ชจ๋ธ์ ๋๋๋ ค๊ณ ํ๋ ๋
ธ๋ ฅ์ด ์ปค์ง.(Recoil, Context API)
๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ด ๋ณต์กํด์ง . ๋ ๋๋ฅผ ๋ค์ํ๋ค๋ ๊ฑด ๋ฆฌ์์ค๊ฐ ๋ญ๋น๋๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์.
๊ทธ๋์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋ฐ์ด ์ด๋ ต๋ค๊ณ .
โ
์ฐ๋ฆฌ๊ฐ ์ ์ผ ๋ง์ด ์ฐ๊ฒ ๋ ์ธ์ด๋ ๋ฐ๋ก Javascript
JS๋ ๋ธ๋ผ์ฐ์ ์์์ ๋์ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ์์ ๋ฆฌํ์คํธ๋ฅผ ๋ฐ์์ ๋ฐ์์ค๋ ๊ฑด๋ฐ.
JSํ์ผ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋๋๊ฐ ๋๊ฒ ์ค์ํด์ง. (= (๋ชจ๋ ๊ฒ ๋ค ๋ง๋ฌด๋ฆฌ๊ฐ ๋)๋ฒ๋ค ํ์ผ)
JS์ ์ญ์ฌ
10์ผ๋ง์ ๋ง๋ค์ด์ง ์ธ์ด. ๋ชจ์นด
์ฐ๋ ๊ธฐ๊ฐ์ ์ธ์ด ^^โฆ ์์.
2015๋
๊น์ง ๋ฒ์ ์
์ด 4๋ฒ.
2009๋
์ node.js ๋ฐํ์(๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๊ณต๊ฐ)์์ ๋๋ฆฌ๋ ์ต์ด์ js
js๋ก ๋ง๋ ํจํค์ง๊ฐ ๋์ด.
2015๋
์ ๋๋์ ์ธ ๋ณํ๊ฐ ์๊น : ์ธํฐํ์ด์ค ๊ฐ์
์ด๋๋ถํฐ ES 2015 + ๋ผ๊ณ ์ง์นญํจ. ๊ณต์๋ฒ์ ์ ECMA Srcipt 6 (ES6) ๋งค๋
์
๋ฐ์ดํธ ๋์ด์์.
TC39๋ผ๋ ํ์คํ๊ธฐ๊ตฌ๊ฐ ์ด ์
๋ฐ์ดํธ๋ฅผ ๋ด๋นํจ.
2010๋
์ ajax๋ฅผ ์ฒ์์ผ๋ก ์ฌ์ฉํ ์น ์ดํ๋ฆฌ์ผ์ด์
: ์ง๋ฉ์ผ gmail
js๊ฐ ํ ์ผ์ด ๊ธฐ์กด์ 1๋งํผ ํ๋ค๋ฉด ์ง๊ธ์ 100๋งํผ.
ES2015์ ๊ฐ์ฅ ํฐ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ : ํ์ ํธํ์ฑ - Babel (๊ตฌํ ๋ธ๋ผ์ฐ์ ๊ฐ ์ธ์ํ ์ ์๊ฒ๋. Pre-processor)
์์ด ์์ฒญ ๊ธธ์ด์ง. ๊ทธ๋์ ๋ชจ๋ ์์คํ
์ด ๋์ด.
๋ชจ๋ ์์คํ
์ ๋ฌธ์ : ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์์ ๋ชปํจ (์ง๊ธ์ ํจ) -> ๊ทธ๋์ ๋ชจ๋ ์์คํ
์ ์ง์ํ๊ธฐ ์ํด ๋์จ ํจํค์ง๊ฐ Webpack (Parcel, Rollup ๋ฑ, ์นํฉ์ด ์ ์ผ ์ข์)
๊ทธ ์ธ npm(node.js์์ ์ฐ๋)
ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํ๋ ค๋ฉด Babel, Webpack, and npm
๋๋ฌธ์ Scaffolding์ด ๋ณต์กํด์ง (์ด๊ธฐ ์ธํ
)
โ
reactjs.org/
โ
์๋ฐ์คํฌ๋ฆฝํธ ํ๋กํ ํ์
๊ฐ์ฒด A (name, age, sex, getter, setter)
๊ฐ์ฒด B (name, age, sex, getter, setter)
ํ๋๊ฐ 3๊ฐ์ง๊ณ ๋ฉ์๋๊ฐ ์ฌ๋ฌ๊ฐ์ง๋ผ๊ณ ํ์ ๋,
๊ฐ์ฒด๊ฐ ์์ผ๋ก ๊ณ์ ๋ง๋ค์ด์ง๋ค๊ณ ํ์ ๋, ํ๋ ํ๋๋น getter, setter๊ฐ ํ์์ฉ ์๊ธฐ๋๊น ์ฃผ๋ฃจ๋ฃฉ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๊ฐ ๋จ.
JS์์ ๊ฐ์ฒด์ ๋ง์ง๋ง ํ๋์ proto ๋ผ๋ ๊ฒ ์์. proto๋ ์กฐ์๊ฒฉ์ ์ํ๋ ๊ฐ์ฒด.
๊ฐ๋ณ ๊ฐ์ฒด๋ค์ด ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ์ผํ๋ ๊ฐ์ด ์๋ ํ๋์ ๊ฒฝ์ฐ ์กฐ์๊ฒฉ๊ฐ์ฒด์ ์์ด๋ ๋จ.
๊ทธ๋์ getter,setter๋ฅผ ์กฐ์๊ฒฉ์ ๋ฃ์. ๊ฐ์ฒด์์ getter, setter ๊ฐ ์์ ๊ฒฝ์ฐ ํ๋กํ ๋ก ์ฐพ์๊ฐ.
proto chain ์ด ๋ง์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋๋ ค์ง. ๊น์ด์ง ์๋ก.
HTML Element๊ฐ ์์ ๋,
e.g.
div element์ ๊ณตํตํ์ง๋ค์ html element๊ฐ ๊ฐ์ง๊ณ ์์.
markup language ์ ๊ณตํตํ์ง๋ค์ด element. ๊ทธ ๋ฐ์ node -> event target - > object
(DOM = ํ๋กํ ํ์
์ ๊ฐ์ฅ ์ ์ฐ๋ ๋ชจ๋ธ.)
javascript.info/
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
'๐ป Programming ๊ฐ๋ฐ > ๐ Javascript, Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ์คํฌ๋ฆฝํธ] ๊ธฐ์ด๋ฌธ๋ฒ ๊ณต๋ถ๋ ธํธ - ์ธํ๋ฐ Amazing Javascript ํ๊ธฐ ๋ฐ ์ถ์ฒ! (13) | 2024.07.12 |
---|
๋๊ธ