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

JavaScript11

[Chrome Extension] ๊ตฌ๊ธ€ ๋”ฅ๋‹ค์ด๋ธŒ ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘๊ธฐ ๊ตฌ๊ธ€ ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•˜์ž. ๋‚˜๋Š” ์ด๊ฑธ ์™œ ๋งŒ๋“ค์—ˆ์„๊นŒ?๊ตฌ๋ฆ„ ํ’€์Šคํƒ ๊ณผ์ • 10๊ธฐ๋ฅผ ์ฐธ์—ฌํ•˜๋ฉด์„œ ๊ฐ•์˜ ๋ฆฌ์ŠคํŠธ ์ค‘ ์ค‘๋ณต๋˜๋Š” ๊ฐ•์ขŒ๊ฐ€ ์žˆ์—ˆ๋‹ค.์ค‘๋ณต๋˜๋Š” ๊ฐ•์ขŒ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด๋ดค๋‹ค.ResultHow?์šฐ์„  docs๋ฅผ ์ฐพ์•„๋ด์•ผํ•œ๋‹ค.https://developer.chrome.com/docs/extensions/get-started/tutorial/hello-world?hl=ko์—ฌ๊ธฐ์„œ ์ž˜ ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.์š”์•ฝํ•ด๋ณด์žmanifest.json ์ด๋ผ๋Š” ํŒŒ์ผ๊ณผbackground.js, ๊ทธ๋ฆฌ๊ณ  ๋™์ž‘์„ ํ•  js๋“ค์ด ํ•„์š”ํ•˜๋‹ค. ์ž์„ธํ•œ ์ฝ”๋“œ๋Š” git์— ์ž‘์„ฑํ•ด๋‘์—ˆ๋‹ค.์ด์ œ ๋ฆฌํŒฉํ† ๋ง์„ ํ•ด๋ณด์ž.https://github.com/groom-study-team1-project/chrome-extension GitHub - groom-st.. 2024. 8. 7.
[React] ํ™˜๊ฒฝ์„ค์ • ์›๋ž˜ ๋ฆฌ์•กํŠธ๋Š” ์›นํŒฉ์ด๋ผ๋Š” Bundler๋กœ ์‹คํ–‰ํ•œ๋‹ค.์ด ๊ฐ•์˜๋Š” ๋ฆฌ์•กํŠธ ๋ฌธ๋ฒ•๊ณผ ๋ฆฌ์•กํŠธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฏ€๋กœ React๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์„ค์ •์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. 1. React ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™˜๊ฒฝ์„ค์ •์ด ๋˜์–ด์•ผํ•˜๋Š”๋ฐ ๋ฆฌ์•กํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์šฉ cdn ๋งํฌ๊ฐ€ ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ๋„ ์ง์ ‘ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ์“ฐ๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด์žˆ๊ณ  ๋ฐฐํฌ์šฉ์œผ๋กœ๋Š” ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค. CDN ๋งํฌ – ReactA JavaScript library for building user interfacesko.legacy.reactjs.org ๋‚˜๋Š” ๋ฐฐํฌ๊นŒ์ง€ ํ•  ๋‚ด์šฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ฐ•์˜์™€ ๋™์ผํ•˜๊ฒŒ cdn์„ ์ด์šฉํ•œ๋‹ค.react.js ๋Š” react ๊ธฐ๋Šฅ์ธ ์ปดํฌ๋„ŒํŠธ, ๊ฐ€์ƒ๋” ๋“ฑ์„ ์ง€์›ํ•œ๋‹ค. 2. React-Dom React Dom์€ ๊ฐ€์ƒ DOM์„ ์‹ค.. 2024. 8. 4.
[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] ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ Viewexport default class SearchResultView extends View { constructor() { super(qs("#search-result-view")); this.template = new Template(); } show(data = []) { if (data.length > 0) { this.element.innerHTML = this.template.getList(data); } else { this.element.innerHTML = this. template.getEmptyMessage(); } super.show(); }}.. 2024. 7. 31.
[Vanila js] ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ Branch - ready/search-form-1์•ž์„  ํฌ์ŠคํŒ…์˜ ์ž‘์—…์ด ์ œ๋Œ€๋กœ ๋˜์—ˆ๋‹ค๋ฉด main ๋ธŒ๋žœ์น˜์—์„œ1. git checkout -b ready/search-form-12. ์ฝ”๋“œ ์ž‘์„ฑ3. git add .4. git commit -m "feat: ๋‚ด์šฉ"5. git push origin ready/search-form-1์ดํ›„ PR ๋‚ ๋ฆฌ๊ณ  Rebase Merge ํ•˜๊ธฐ.git bash์—์„œ ์ฝ”๋“œ๋กœ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํ˜‘์—… ์ค‘ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์ด ์žˆ์Œ.๊ทธ๋ž˜์„œ ์ง์ ‘ github ์‚ฌ์ดํŠธ์—์„œ Mergeํ•˜๋Š” ๊ฒƒ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ ์•ž์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ branch๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์˜ˆ์ •  // index.html // main.jsdocument.addEventListener("DOMContentL.. 2024. 7. 31.
[Vanila.js] ์‚ฌ์ „ ์ฝ”๋“œ ์ดํ•ดํ•˜๊ธฐ ๊ฐ•์‚ฌ๋‹˜์ด ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋‘” ์„œ๋น„์Šค branch : ready/scaffodingIn Memory DB์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด, ๊ฒ€์ƒ‰ ๊ธฐ๋ก, ์ƒํ’ˆ ๋ฐ์ดํ„ฐUtility์‹œ๊ฐ„๊ด€๋ จ UtilDOM Event๋ฅผ ํ™œ์šฉํ•œ Util๊ธฐ๋ณธ์ ์œผ๋กœ JS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋“ค์„ ๋ชจ๋“ˆํ™”ํ–ˆ๋‹ค๊ณ  ๋ณด์ธ๋‹ค.Model์ดํ›„์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ์ค‘์š” ๋กœ์ง์ด ๋‹ด๊ธธ ๊ฒƒ์œผ๋กœ ๋ณด์ž„.View์ •์  ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ๋ Œ๋”๋ง(์ˆ˜์ •)ํ•˜๋Š” ํŽ˜์ด์ง€Utility๋ฅผ ํ™œ์šฉํ•ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋œ๋‹ค.ControllerView์— ์ž‘์„ฑ๋  ๋‚ด์šฉ์„ ์ œ์–ดModel์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋”ฐ๋กœ ์„œ๋น„์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•  ๋“ฏ 2024. 7. 31.