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

728x90

javascript/[TIL] ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ 

(18)
ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ : ๊ธ€์“ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ Quill ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ์—๋””ํ„ฐ https://quilljs.com/docs/quickstart/ Quickstart - Quill Quickstart The best way to get started is try a simple example. Quill is initialized with a DOM element to contain the editor. The contents of that element will become the initial contents of Quill. Hello World! Some initial bold text var quill = new Quill quilljs.com toolbar const Editor = ({ title, body, onChange..
ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ : ์‹œ์ž‘ ๋ฐ ํšŒ์› ์ธ์ฆ ๊ตฌํ˜„ ํšŒ์› ์ธ์ฆ UI ๊ตฌํ˜„, ํšŒ์› ์ธ์ฆ ๋ฆฌ๋•์Šค ์—ฐ๋™, ํ—ค๋” ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ, ๋กœ๊ทธ์ธ ์œ ์ง€ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•˜๊ณ  ์ ์šฉํ•˜๊ธฐ ๊ทธ๋ฆฌ๊ณ  ์ฃผ์š” ํŽ˜์ด์ง€์˜ ๋ผ์šฐํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋จผ์ € ํ‹€์„ ๊ฐ–์ถ”๊ณ  ํ•˜๋‚˜์”ฉ ๊ฐœ๋ฐœ styled-component styled-component๋กœ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ(StyledButton)๋ฅผ ๋ฐ”๋กœ ๋‚ด๋ณด๋‚ด๋ฉด ์ž๋™ import๊ฐ€ ์ž‘๋™๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ(Button)๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์•ˆ์— styled-component๋กœ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ(StyledButton)๋ฅผ ๋ Œ๋”๋งํ•ด์ค€๋‹ค. import styled from 'styled-components'; const StyledButton = styled.butt..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - JWT๋ฅผ ํ†ตํ•œ ํšŒ์› ์ธ์ฆ ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ JWT(JSON Web Token) : ๋ฐ์ดํ„ฐ๊ฐ€ JSON์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ํ† ํฐ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์ฒด๊ฐ€ ์„œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์›น ํ‘œ์ค€์œผ๋กœ ์ •์˜๋˜์—ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋‘ ๊ฐ€์ง€ ์ธ์ฆ๋ฐฉ์‹ 1. ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ 2. ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ 1. ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ : ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์ค‘์ž„์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค. ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์‹œ, ์„œ๋ฒ„๋Š” ์„ธ์…˜ ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ  ์„ธ์…˜ id๋ฅผ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ๋ฐœ๊ธ‰๋œ id๋Š” ์ฃผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค์— ์ €์žฅํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” ์„ธ์…˜ ์ •์žฅ์†Œ์—์„œ ์„ธ์…˜์„ ์กฐํšŒํ•œ ํ›„ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ตํ•œ๋‹ค. ์„ธ์…˜ ์ €์žฅ์†Œ๋Š” ์ฃผ๋กœ ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šค..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - mongoose๋ฅผ ์ด์šฉํ•œ MongoDB ์—ฐ๋™ - MongpDB๋ž€? - ์ž‘์—… ํ™˜๊ฒฝ ์„ค์ • - mongoose๋กœ DB ์—ฐ๊ฒฐํ•˜๊ธฐ - esm์œผ๋กœ ES ๋ชจ๋“ˆ import/export ๋ฌธ๋ฒ• ์‚ฌ์šฉํ•˜๊ธฐ - ์Šคํ‚ค๋งˆ์™€ ๋ชจ๋ธ ์ดํ•ดํ•˜๊ธฐ - REST API ๊ตฌํ˜„ํ•˜๊ธฐ - ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„ํ•˜๊ธฐ MongoDB ๋ฌธ์„œ ์ง€ํ–ฅ์  NoSQL ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ↔ RDBMS(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค : MySQL, OracleDB) ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋“ฑ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์œ ๋™์ ์ธ ์Šคํ‚ค๋งˆ๋ฅผ ์ง€๋‹Œ๋‹ค. ์žฅ์  1. ์ข…๋ฅ˜๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•˜๋”๋ผ๋„, ์ƒˆ๋กœ ๋“ฑ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๋ฐ”๋€๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. → ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ์ž์ฃผ ๋ฐ”๋€๋‹ค๋ฉด MongoDB๊ฐ€ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์žฅ์  2. ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ์–‘์ด ๋Š˜์–ด๋‚˜๋„ ํ•œ ์ปดํ“จํ„ฐ์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ๋กœ ๋ถ„์‚ฐํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ™•์žฅํ•˜..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - Koa ํ”„๋ ˆ์ž„์›Œํฌ, nodemon, koa-router Node.js ํ™˜๊ฒฝ์—์„œ ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” Koa ์›น ํ”„๋ ˆ์ž„์›Œํฌ 1. Koa๋Š” ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค๋งŒ ๋ถ™์—ฌ์„œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Koa๋Š” ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ๋งŒ ์žˆ์œผ๋ฉฐ ๋‚˜๋จธ์ง€๋Š”(๋ผ์šฐํŒ…, ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ํ˜ธ์ŠคํŒ… ๋“ฑ) ๊ธฐ๋Šฅ๋“ค์€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. (๋ฌด๊ฒŒ : koa < Express Express๋Š” ๋ฏธ๋“ค์›จ์–ด, ๋ผ์šฐํŒ…, ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ํ˜ธ์ŠคํŒ… ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด์žˆ๋‹ค.) 2. Koa๋Š” async/await ๋ฌธ๋ฒ•์„ ์ •์‹์œผ๋กœ ์ง€์›ํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. Koa ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• 0. Koa ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์„ค์น˜ํ•˜๊ธฐ yarn add koa 1. ์„œ๋ฒ„ ๋„์šฐ๊ธฐ const Koa = require('koa'); const app = new Koa(); // app.use() : ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ์• ํ”Œ..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฆฌ์•กํŠธ vs Next JS vs Gatsby ์–ธ์ œ ๋ญ˜ ์จ์•ผํ•˜์ง€? | CSR vs SSR vs SSG ๋‚ด ํ”„๋กœ์ ํŠธ ๋ถ„์„ํ•˜๊ณ  ๋งž๋Š” ๊ธฐ์ˆ ์Šคํƒ ์„ ํƒํ•˜๋Š”๋ฒ•! ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง : UI๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์—‘ํŠธ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (* ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง : UI ๋ Œ๋”๋ง์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ, ์ฒ˜์Œ์—๋Š” ๋นˆ html ํŒŒ์ผ์„ ๋„˜๊ฒจ์ฃผ๋ฉฐ, ๊ทธ ์ดํ›„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰๋˜๊ณ  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ™”๋ฉด์ด ๋ณด์ž…๋‹ˆ๋‹ค.) ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์˜ ์žฅ์  1. SEO(Search Engine Optimization : ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”) : ๊ฒ€์ƒ‰ ์—”์ง„์ด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŽ˜์ด์ง€๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋‹ค. SPA๋Š” ๊ฒ€์ƒ‰ ..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ… ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ• ๋•Œ, ๋นŒ๋“œ ์ž‘์—…์„ ๊ฑฐ์ณ์„œ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค. ๋นŒ๋“œ ์ž‘์—…์œผ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” .js ์•ˆ์— ๋ถˆํ•„์š”ํ•œ ์ฃผ์„, ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€, ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•ด ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ JSX ๋ฌธ๋ฒ•์ด๋‚˜ ๋‹ค๋ฅธ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์ด ์›ํ™œํ•˜๊ฒŒ ์‹คํ–‰๋˜๋„๋ก ์ฝ”๋“œ์˜ ํŠธ๋žœ์Šค ํŒŒ์ผ ์ž‘์—…๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์  ํŒŒ์ผ(์ด๋ฏธ์ง€)์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ์œ„ํ•œ ๊ฒฝ๋กœ๋„ ์„ค์ •๋œ๋‹ค. ์ด ์ž‘์—…์€ webpack์ด ๋‹ด๋‹นํ•˜๋ฉฐ, webpack์—์„œ ๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์ณ์ง€๊ณ  ๋ชจ๋“  CSS ํŒŒ์ผ๋„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์ณ์ง„๋‹ค. CRA(create react-app)๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๊ฒฝ์šฐ, ์ตœ์†Œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. CRA์˜ ๊ธฐ๋ณธ webpack ์„ค์ •์—๋Š”..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ๋ฆฌ๋•์Šค ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ž‘์—… ๋ฆฌ์•กํŠธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ API ์„œ๋ฒ„๋ฅผ ์—ฐ๋™ํ•  ๋•Œ๋Š” API ์š”์ฒญ์— ๋Œ€ํ•œ ์ƒํƒœ๋„ ์ž˜ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. [ ์š”์ฒญ ์‹œ์ž‘ -> ๋กœ๋”ฉ ์ค‘ -> ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ -> ๋กœ๋”ฉ์ด ๋๋‚ฌ์Œ ] ์„ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ์„ฑ๊ณต -> ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์‘๋‹ต์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ์š”์ฒญ ์‹คํŒจ -> ์„œ๋ฒ„์—์„œ ๋ฐ˜ํ™˜ํ•œ ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ redux๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด, middleware๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ด ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. redux middleware๋Š” ์•ก์…˜์„ ๋””์ŠคํŒจ์น˜ํ–ˆ์„๋•Œ reducer์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์•ž์„œ ์‚ฌ์ „์— ์ง€์ •๋œ ์ž‘์—…๋“ค์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์•ก์…˜ โ–ถ middleware โ–ถreducer โ–ถ store ๋ฏธ๋“ค์›จ์–ด๋Š” ์•ก์…˜๊ณผ ๋ฆฌ๋“€์„œ ์‚ฌ์ด์˜ ์ค‘๊ฐ„์ž reduc..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ๋ฆฌ๋•์Šค(Redux) ๋ฆฌ๋•์Šค๋Š” ๋ฆฌ์•กํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๊ด€๋ จ ๋กœ์ง์„ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (= ์—…๋ฐ์ดํŠธ์— ๊ด€๋ จ๋œ ๋กœ์ง์„ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ -> ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ) ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ๋˜‘๊ฐ™์€ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์‹œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์†์‰ฝ๊ฒŒ ์ƒํƒœ๊ฐ’์„ ์ „๋‹ฌ, ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ• ๋•Œ ํšจ๊ณผ์ ) redux ๊ฐœ๋… - ์•ก์…˜ ๊ฐ์ฒด ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฐ์ฒด ๋ฐ˜๋“œ์‹œ type ํ•„๋“œ(=์•ก์…˜์˜ ์ด๋ฆ„)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•จ. ๊ทธ ์™ธ์˜ ๊ฐ’์€ ์—…๋ฐ์ดํŠธ์‹œ ์ฐธ๊ณ ํ•ด์•ผํ•  ๊ฐ’ ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ธฐ ๋ณด๋‹จ, ์•ก์…˜ ๊ฐ์ฒด ์ƒ์„ฑํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค. export const increase = () => ({ type: INCREASE })..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง(CSS, Sass, Css Module, styled-components) ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹ 1. ์ผ๋ฐ˜ CSS : ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์‹ 2. Sass(Syntactically Awesome Style Sheets) (.scss, .sass) : CSS ์ „์ฒ˜๋ฆฌ๊ธฐ - ๋ณต์žกํ•œ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ณ  - ์Šคํƒ€์ผ ์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๋†’์—ฌ์คŒ - ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์คŒ. -> ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ํ•ด์คŒ // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ $red : #fa5252; $orange : #fd7e14; // ๋ฏน์Šค์ธ(์žฌ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ€์ผ ๋ธ”๋ก์„ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ) @mixin square($size){ $calcualated : 32px * $size; width: $calcualated; height: $calcualated; } .SassComponent{ .box{ // .S..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - Context API Context API๋Š” ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๊ฐ€ (์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์ •๋ณด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ ์„ค์ • ํ…Œ๋งˆ ๋“ฑ) ์žˆ์„๋•Œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ ๋ฆฌ๋•์Šค, ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ, styled-components ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Context API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Context API๋ฅผ ์‚ฌ์šฉํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ํ๋ฆ„ ์ดํ•ดํ•˜๊ธฐ ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋Š” ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ App์˜ state์— ๋„ฃ์–ด์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. → ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์ด ๋‚ฎ์•„์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. (์ด์œ  : ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์ณ props๋กœ ์›ํ•˜๋Š” ์ƒํƒœ์™€ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ) โ˜…ํ•ด๊ฒฐ : ๋ฆฌ๋•์Šค ๊ฐ™์€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ์ž‘์—…์„ ๋”..
[๊ตฌ๊ธ€๋ง] ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ์™ธ๋ถ€ API๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๋‰ด์Šค ๋ทฐ์–ด ๋งŒ๋“ค๊ธฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์ตœ์‹  ๋‰ด์Šค ๋ชฉ๋ก์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋‰ด์Šค ๋ทฐ์–ด ํ”„๋กœ์ ํŠธ ๋น„๋™๊ธฐ ์ž‘์—… ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด ์žˆ๋‹ค. ์˜ˆ) ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„œ๋ฒ„ ์ชฝ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ Ajax ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„์˜ API๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋ฒ„์˜ API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ๋Š” ๋„คํŠธ์›Œํฌ ์†ก์ˆ˜์‹  ๊ณผ์ •์—์„œ ์‹œ๊ฐ„ ์†Œ์š”, ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. โ–ถ ์ด ๊ณผ์ •์—์„œ ํ•ด๋‹น ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.(๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ, ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋„ ํ˜ธ์ถœ) ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Ajax ๊ธฐ๋ฒ•(Asynchronous JavaScript and XML) axios : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ HTTP ํด๋ผ์ด์–ธํŠธ ์›น ํ†ต์‹  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ htt..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋กœ SPA ๊ฐœ๋ฐœํ•˜๊ธฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ผ์šฐํŒ…์ด๋ž€? ๋ผ์šฐํŒ… : ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL์— ๋”ฐ๋ผ ์•Œ๋งž์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ, ํŽ˜์ด์ง€ ๋ณ„๋กœ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ถ„๋ฆฌํ•ด๊ฐ€๋ฉด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ, Next.js ๋ฆฌ์—‘ํŠธ์—์„œ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ : ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - Next.js : ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋ ˆ์ž„์›Œํฌ, ์ด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์€ ํŒŒ์ผ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ ๋ผ์šฐํŒ… ๊ด€๋ จ ๊ธฐ๋Šฅ์€ ๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์„œ๋“œ ํŒŒํ‹ฐ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. * ์„œ๋“œ ํŒŒํ‹ฐ๋ž€? ํŽธํ•˜๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด, ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์ œ์ž‘์‚ฌ..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ์ปดํฌ๋„ŒํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™” React DevTools๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ 1. ์ž์‹ ์ด ์ „๋‹ฌ๋ฐ›์€ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ 2. ์ž์‹ ์˜ state๊ฐ€ ๋ฐ”๋€” ๋•Œ 3. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋งํ•  ๋•Œ 4. forceUpdate ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ -> ๋ฆฌ๋ Œ๋”๋ง์ด ๋ถˆํ•„์š”ํ•  ๋•Œ๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 1. React.memo : ์ด์ „๊ณผ ๊ฐ™์€ props๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ, ๋ Œ๋”๋ง ๊ณผ์ •์„ ์Šคํ‚ต, ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ Œ๋”๋ง๋œ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” (== React.memo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค.) ๋ผ์ดํ”„์‚ฌ์ดํด ์ค‘ 'shouldComponentUpdate'๋Š” ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ โ†—์ด๋Š” ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๋Œ€์‹  Reac..
10/11์ผ ์˜ค๋Š˜ ๊ตฌ๊ธ€๋ง ํ•œ ๋‚ด์šฉ (Prettier Option, CSS) Prettier : ์ฝ”๋“œ ์Šคํƒ€์ผ ์ž๋™ ์ •๋ฆฌ ๋„๊ตฌ ์ž๋™ ์ •๋ ฌ, ์ž๋™ ์„ธ๋ฏธ์ฝœ๋ก  ์ถ”๊ฐ€, ํฐ๋”ฐ์˜ดํ‘œ๋กœ ํ†ต์ผ ๋“ฑ๋“ฑ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์„ ์‰ฝ๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค. - "trailingComma" : ํ•ญ๋ชฉ์˜ ๋‚˜์—ด์—์„œ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์—๋„ ์ฝค๋งˆ๋ฅผ ๋ถ™์ด๋Š” ์ฝ”๋”ฉ๋ฐฉ์‹ - "printWidth" : ์ค„ ๋ฐ”๊ฟˆ ํ•  ํญ ๊ธธ์ด ์ฐธ๊ณ  - https://velog.io/@kyusung/eslint-prettier-config em, rem์€ ๋ฌด์—‡์ธ๊ฐ€? em๋‹จ์œ„๋Š” ์ƒ๋Œ€ ๊ธธ์ด ๋‹จ์œ„๋กœ ์š”์†Œ์˜ ๊ธ€๊ผด ํฌ๊ธฐ์™€ ๊ด€๋ จ๋˜์–ด์žˆ๋‹ค. ์ง€์ •๋œ ์š”์†Œ์˜ font-size์˜ ๋ฐฐ์ˆ˜ rem๋‹จ์œ„๋Š” root em์ด๋ผ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ตœ์ƒ์œ„ ์š”์†Œ์˜ font-size์— ๋Œ€ํ•œ em๋‹จ์œ„ ์ด๋‹ค. ์ฐธ๊ณ  - https://velog.io/@ursr0706/em%EB%8B%A8%EC%9C%84..
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - Hooks 1. useState 2. useEffect 3. useReducer 4. useMemo 5. useCallBack 6. useRef 7. ์ปค์Šคํ…€ Hooks useEffect VS useCallBack VS useMemo useEffect useCallBack useMemo ํŠน์ •๊ฐ’(๋ฐฐ์—ด ์•ˆ ๊ฐ’)์ด ์—…๋ฐ์ดํŠธ ๋ ๋•Œ, ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ • ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹คํ–‰๋˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ด€๋ จ ํŠน์ •๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ, ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑ, ํ•จ์ˆ˜ memoizationํ•˜์—ฌ, ๊ฐ™์€ ํ•จ์ˆ˜ ์ธ์Šคํ„ด์Šค ์žฌ์‚ฌ์šฉ โ€ป ๋นˆ ๋ฐฐ์—ด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ ๋งŒ๋“ค์—ˆ๋˜ ํ•จ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ ์žฌ์‚ฌ์šฉ ํŠน์ •๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ, ์—ฐ์‚ฐ์„ ์‹คํ–‰(o) ์ƒˆ๋กœ ์ƒ์„ฑ(x) ๊ฐ’์„ memoizationํ•˜์—ฌ, ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋‚˜ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉ ์›ํ•˜..

728x90