๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฆฌ์•กํŠธ6

[React] Intro ๋ฆฌ์•กํŠธ๋Š” ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€ ๊ฐœ๋…์ด ์ค‘์š”ํ•˜๋‹ค.1. Reactive2. Virtual DOM3. Component Reactive๋Š” ํŠน์ • ๊ฐ’์— ์˜์กดํ•ด ์ž๋™์œผ๋กœ ๋ฐ˜์‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.Vanila js๋กœ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด(๊ฒ€์ƒ‰ ๋“ฑ) ๋‹ค์‹œ rendering์„ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์‹œ rendering ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. react๋Š” DOM API๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Virtual DOM์„ ์ œ๊ณตํ•œ๋‹ค.Virtual DOM์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ํ™•์ธํ•˜์—ฌ DOM์— ์ œ๊ณตํ•œ๋‹ค.์ด๋Ÿฐ ํŠน์„ฑ ๋•Œ๋ฌธ์— reactive ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ์˜ˆ์‹œ ์˜์ƒ์ด๋‹ค.https://www.youtube.co.. 2024. 8. 3.
[Vanila js] ์ตœ๊ทผ ๊ฒ€์ƒ‰ ๊ตฌํ˜„ํ•˜๊ธฐ ResultViewexport default class HistoryListView extends KeywordListView { constructor() { super(qs("#history-list-view"), new Template()); } bindEvents() {} handleClickRemoveButton() {}} HistoryListView๋ฅผ ๋ณด๋ฉด KeywordListView ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.์ถ”์ฒœ๊ฒ€์ƒ‰๊ณผ ์ฐจ๋ณ„์ ์„ ์ƒ๊ฐํ•˜๋ฉด, ๊ฒ€์ƒ‰๊ธฐ๋ก์„ ์ง€์šฐ๋Š” ์ž‘์—…์ด ์ถ”๊ฐ€๋กœ ์ˆ˜ํ–‰๋˜๋‹ˆ๊นŒ. ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•ด์ค€๋‹ค.๋˜, KeywordListView๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฏ€๋กœ KeywordListView์˜ ์ƒ์„ฑ์ž์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ๋‹ค.Controllerexport defaul.. 2024. 8. 2.
[Vanila js] ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ตฌํ˜„ํ•˜๊ธฐ ResultViewexport default class KeywordListView extends View { constructor() { super(qs('#keyword-list-view')); this.template = new Template(); this.bindEvents(); } show(data = []) { } bindEvents() { } handleClick(event) { }} ์•ž์„  ๊ธฐ๋Šฅ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ keyword-list-view์— ์ ์šฉํ•  interface๋‹ค.Result๋ฅผ ๋ณด๋ฉด ํ‚ค์›Œ๋“œ๋ฅผ ํด๋ฆญํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ๊นŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๊ณ keyword ๋ชฉ๋ก๋“ค์„ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ show().. 2024. 8. 2.
[Vanila js] ํƒญ ๊ตฌํ˜„ํ•˜๊ธฐ ResultViewexport default class TabView extends View { constructor() { super(qs('#tab-view')); this.template = new Template(); } show() {} bindEvents() {} } ์ •์  ํŽ˜์ด์ง€์˜ tab-view id๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.Result์™€ ๊ฐ™์ด ํƒญ์„ ๋ณด์—ฌ์ค„ ๊ธฐ๋Šฅ๊ณผ, ํƒญ์„ ๋ˆ„๋ฅด๋Š” ํ–‰์œ„๋ฅผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”Controllerexport default class Controller { constructor(store, {searchFormView, searchResultView, tabView}) { this.store.. 2024. 8. 1.
[Vanila.js] ํ™˜๊ฒฝ์…‹ํŒ… 1 ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์—์„œ ๊ทผ๋ฌด ์ค‘์ด์‹  ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž ๊น€์ •ํ™˜๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ œ๋ชฉ์€ '๋งŒ๋“ค๊ณ  ๋น„๊ตํ•˜๋ฉฐ ํ•™์Šตํ•˜๋Š” ๋ฆฌ์•กํŠธ'์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ•์˜๋Š” ๊นƒ์„ ์‚ฌ์šฉํ•˜๋ฉฐ Branch๋ณ„๋กœ ๊ฐ•์˜๋ฅผ ํ•ด์ฃผ์‹ญ๋‹ˆ๋‹ค. ํ•™์Šต์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € git์„ forkํ•ฉ๋‹ˆ๋‹ค. fork๊ฐ€ ์ž˜๋˜์—ˆ๋‹ค๋ฉด, ๊ฐ•์‚ฌ๋‹˜์ด ๋งŒ๋“ค์–ด ๋‘” branch๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์šฐ์„  forkํ•œ ๋‚ด ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ cloneํ•˜๊ณ  ํ•ด๋‹น ํด๋”๋กœ ์ด๋™ํ•ด์„œ git bash๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 1. git remote add upstream https://github.com/jeonghwan-kim/lecture-react.git2. git fetch upstream3. git checkout -f upstream/ready/scaf.. 2024. 7. 30.
[Vanila.js] ํ™˜๊ฒฝ์…‹ํŒ…2 1. VS ์ฝ”๋“œ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.2. Node.js๋ฅผ ์„ค์น˜ํ•œ๋‹ค.2-1. npm --version ์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์น˜๊ฐ€ ์ž˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.3. Git Bash๋ฅผ ์„ค์น˜ํ•œ๋‹ค. (์„ ํƒ, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์„ค์น˜)4. npx lite-server --baseDir "ํด๋”๋ช…" or npx lite-server โ€ป ์ฃผ์˜ (windows ํ™˜๊ฒฝ)Node.js์˜ ๊ฒฝ๋กœ๋ฅผ ์ปค์Šคํ…€ ์˜์—ญ์— ์„ค์น˜ ์‹œ, ์‹คํ–‰์ด ์•ˆ๋œ๋‹ค.1. Ctrl + r -> %appdata% -> ์ƒˆํด๋” ์ƒ์„ฑ(์ด๋ฆ„: npm) 2. System ํ™˜๊ฒฝ๋ณ€์ˆ˜์—์„œ ํ•ด๋‹น node js์˜ custom ์˜์—ญ์„ path ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•œ๋‹ค.๋‚˜๋Š” ์‚ฌ์šฉ์ž ์˜์—ญ์— ์ถ”๊ฐ€ํ–ˆ๋‹ค. โ€ป TipVsCode์—์„œ code . ์œผ๋กœ ์‹คํ–‰ํ•˜๋ ค๋Š”๋ฐ ์•ˆ๋œ๋‹ค.Ctrl + shift + p ๋กœ๋„ code ๋ฅผ ๊ฒ€์ƒ‰ํ•ด.. 2024. 7. 30.