๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming ๊ฐœ๋ฐœ/๐ŸŒŠ Javascript, Typescript

ํ”„๋ก ํŠธ์—”๋“œ 101 - 10+๋…„์ฐจ ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด ์นœ๊ตฌ์—๊ฒŒ ๋“ค์—ˆ๋˜ ๊ธฐ์ดˆ ๋‚ด์šฉ ์ •๋ฆฌ

by kimdee 2024. 11. 23.
๋ฐ˜์‘ํ˜•

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 
โ€”โ€”> ๋ฌธ์ œ์  : ๋ผ์šฐํŒ… ์ˆ˜ ํ™•๋Œ€, ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ์ปค์ง (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์‚ฌ์ด์ฆˆ) : ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋Š๋ ค์ง 
 
์„œ๋ฒ„์‚ฌ์ด๋“œ์™€ ํด๋ผ์ด์–ธํŠธ์‚ฌ์ด๋“œ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” 

  1. ์ƒˆ๋กœ๊ณ ์นจ(CSR, Client-side Rendering ์—์„œ ํ•„์š”์—†๋‹ค) 
  2. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

 
 
- 
 
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/

React โ€“ A JavaScript library for building user interfaces

A JavaScript library for building user interfaces

reactjs.org

babeljs.io/

Babel ยท The compiler for next generation JavaScript

The compiler for next generation JavaScript

babeljs.io

 
โ€” 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํ† ํƒ€์ž… 

 
๊ฐ์ฒด 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/

The Modern JavaScript Tutorial

We want to make this open-source project available for people all around the world. Help to translate the content of this tutorial to your language!

javascript.info

 


์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€