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

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(93)
[ JS ] Promise VS async await ๋น„๊ต ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฃผ์š” ๋ฐฉ์‹์ธ Promise์™€ async/await์— ๋Œ€ํ•ด ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ‰์†Œ ์ž‘์—…์„ ํ•˜๋ฉด์„œ ๋‘˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์ฐจ์ด์ ๊ณผ ํŠน์ง•์„ ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. (๋‘˜ ๋‹ค ES6+ ์ดํ›„์— ๋„์ž…๋˜์—ˆ๋‹ค.)    1. ๋ฌธ๋ฒ•   - Promise: `.then()`, `.catch()`, `.finally()` ๋ฉ”์„œ๋“œ๋ฅผ ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ.   - async/await: ๋” ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด๋ฉฐ `try/catch` ๊ตฌ๋ฌธ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.  2. ๊ฐ€๋…์„ฑ   - Promise: ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ๋กœ์ง์—์„œ๋Š” ์ค‘์ฒฉ๋œ `.then()`์œผ๋กœ ์ธํ•ด "์ฝœ๋ฐฑ ์ง€์˜ฅ"๊ณผ ์œ ์‚ฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.   - async/await: ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ฝ๊ธฐ ์‰ฌ์šด ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ..
[ React ] React์˜ export์™€ export default ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ SyntaxExport ๊ตฌ๋ฌธ, Import ๊ตฌ๋ฌธ ๊ฐ„๋‹จ ์ •๋ฆฌํ‘œDefaultexport default function Button() {}import Button from './button.js';Namedexport function Button() {}import { Button } from './button.js';  ๋ณดํŽธ์ ์œผ๋กœ ํ•œ ํŒŒ์ผ์—์„œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋งŒ export ํ•  ๋•Œ default export ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ export ํ•  ๊ฒฝ์šฐ์—” named export ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.       React์—์„œ `export`์™€ `export default`์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.1. export   - ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’(ํ•จ์ˆ˜, ๊ฐ์ฒด, ์›์‹œ ๊ฐ’ ๋“ฑ)์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.   - ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ค‘๊ด„ํ˜ธ..
[ ๊ฐœ๋ฐœ๋„์„œ ์ถ”์ฒœ ] ๋ฆฌํŒฉํ„ฐ๋ง 2ํŒ ํšŒ์‚ฌ์—์„œ ๋‚ด๊ฐ€ ์ •๋ง ์ข‹์•„ํ•˜๋Š” ์„ ์ž„๋ถ„์ด ์ถ”์ฒœํ•ด ์ฃผ์‹  ์ฑ….์‚ฌ์‹ค ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ์ข‹์€ ์ฝ”๋“œ์ผ๊นŒ?๋ผ๋Š” ๊ณ ๋ฏผ๊ณผ ์ƒ๊ฐ์€ ๋งŽ์ด ํ•ด๋ดค์ง€๋งŒ, ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๊ฒŒ ๋  ๋•Œ, ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์งœ๊ณ , ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•ด๋ณด์ง€๋Š” ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ฑ…์„ ์ฝ์œผ๋ฉด์„œ ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•œ ๊ธฐ์ค€๊ณผ ๊ฐœ์„ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด ๋ณด๋ ค๊ณ  ๊ตฌ๋งคํ•˜์˜€๋‹ค.       ์ผ๋‹จ ๋‚˜๋Š” ๊ต๋ณด๋ฌธ๊ณ  ์˜จ๋ผ์ธ์—์„œ ์ฃผ๋ฌธํ•˜์˜€๊ณ , ๊ฐ€๊ฒฉ์€ 31,500์›์ด์—ˆ๋‹ค. ์ถœํŒ์‚ฌ๋Š” ๋‚ด๊ฐ€ IT์„œ์ ์„ ๊ตฌ๋งคํ•  ๋•Œ, ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ํ•œ๋น›๋ฏธ๋””์–ด ์ถœํŒ์ด์—ˆ๊ณ , ์ €์ž๋Š” ๋ฌด๋ ค '๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ'์ด๋‹ค. ์ด ์ฑ…์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•ด ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.    ์ฑ…์˜ ์ „๋ถ€๋ฅผ ์ฝ์„ ์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์Šต๋“ํ•˜๋ผ๊ณ  ๊ฐ€์ด๋“œ๊ฐ€ ๋‚˜์™€์žˆ๋‹ค. 1. ๋ฆฌํŒฉํ† ๋ง์ด ๋ญ”์ง€ ๋ชจ๋ฅธ๋‹ค๋ฉด 1์žฅ์„ ..
[ JS ] Event.stopPropagation์™€ Event.preventDefault ์˜ ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ. JavaScript์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ข…์ข… ํ˜ผ๋™๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ์ธ Event.stopPropagation()๊ณผ Event.preventDefault()์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.     Event.stopPropagation()  `stopPropagation()` ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฒคํŠธ์˜ ๋ฒ„๋ธ”๋ง์„ ์ค‘์ง€์‹œํ‚จ๋‹ค.   element.addEventListener('click', function(event) { event.stopPropagation(); // ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง});  ์ฃผ์š” ํŠน์ง• )- ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.- ์ค‘์ฒฉ๋œ ์š”์†Œ์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.   ์‚ฌ์šฉ ์˜ˆ์‹œ )์ค‘์ฒฉ๋œ div์—์„œ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ํ•ด๋‹น div์—์„œ๋งŒ ์ด..
[ React ] Chart UI ๊ตฌํ˜„์„ ์œ„ํ•œ React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •๋ฆฌ Chart ๊ด€๋ จ Libraries ์ •๋ฆฌ ๊ธ€  1.Rechartsโญ 20.3k ์˜ ์ธ๊ธฐ ์žˆ๋Š” ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. (์ค‘๊ตญ ํšŒ์‚ฌ)storybook์„ ํ†ตํ•œ UI ๋ช…์„ธ๊ฐ€ ์žˆ๊ณ , ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ์ฐจํŠธ ์ปดํฌ๋„ŒํŠธ ์ง€์›.https://recharts.org/en-US           2.nivoโญ 11.4khttps://nivo.rocks/components/        3.apexchartsโญ 12.5k์˜ˆ์˜๊ณ  ์•„๊ธฐ์ž๊ธฐํ•œ ๋””์ž์ธ, React ์ปดํฌ๋„ŒํŠธ ์˜ˆ์‹œ(class ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜), ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ ๋„ ๋†’์Œ.https://apexcharts.com/          4.react-chartjs-2โญ 5.9kChart.js ์šฉ React Component ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. Chart.js V3,V4๋ฅผ ์„œํฌํŠธํ•จ. (๊ฐ€์žฅ ์ธ๊ธฐ ๋งŽ..
React์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Zustand์— ๋Œ€ํ•œ ๊ฐ„๋žต ์ •๋ฆฌ๊ธ€. ๋…์ผ์–ด๋กœ "์ƒํƒœ"๋ฅผ ์˜๋ฏธํ•˜๋Š” Zustand๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹จ์ˆœํ™”๋œ Flux ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ž‘๊ณ  ๋น ๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.hook์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„ํŽธํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ตœ์†Œํ•œ์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ง๊ด€์ ์ด๊ณ  ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.     ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ํŠน์ง• 1. ์‹ฌํ”Œํ•œ API:   Zustand์˜ API๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋ณดํ†ต 1~2๊ฐœ์˜ hook๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ `create` ํ•จ์ˆ˜์™€ `useStore` ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค.2. ์ดˆ๊ฒฝ๋Ÿ‰:   Zustand๋Š” ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๋น ๋ฅด๋‹ค. React Context API ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„..
[ Sentry ] F.E์—์„œ Sentry๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋””๋ฒ„๊น… ํ•˜๊ธฐ. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ฐœ๋ฐœ ๋ฐ ์šด์˜์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค. ํ˜„์žฌ ์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์˜ ๋””๋ฒ„๊น… ํˆด๋กœ ์„ผํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์„ผํŠธ๋ฆฌ๋Š” ์›น, ๋ชจ๋ฐ”์ผ ์•ฑ, ๊ฒŒ์ž„๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜์™€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋“ค์— ๋Œ€ํ•ด ํƒ์ง€๋ฅผ ์œ„ํ•œ ํˆด์ด๋‹ค. ์ฒ˜์Œ์—๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ•˜์˜€์œผ๋‚˜ ํ˜„์žฌ๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค์™€ ์˜จํ”„๋ ˆ๋ฏธ์Šค ์„ค์น˜ ๋ฒ„์ „์„ ๋ชจ๋‘ ์ œ๊ณตํ•œ๋‹ค. ์„ผํŠธ๋ฆฌ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ๊ณ ๊ฐ๋“ค์—๊ฒŒ ๋” ๋‚˜์€ ํ’ˆ์งˆ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.  ์„ผํŠธ๋ฆฌ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๋“ค 1. ์—๋Ÿฌ ๋ชจ๋‹ˆํ„ฐ๋ง์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๊ธฐ๋กํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค..
[ WEB ] iOS์—์„œ SVG ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ ธ ๋ณด์ผ ๋•Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ํšŒ์‚ฌ์—์„œ  iOS๊ฐœ๋ฐœ ํŒŒํŠธ์— ์ด์Šˆ ํ‹ฐ์ผ“์ด ๋ฐœํ–‰๋˜์—ˆ๋Š”๋ฐ,  AOS์—์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์ธ ํ•ด์ƒ๋„๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ฐ˜๋ฉด,  iOS ์—์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ ธ ๋ณด์ด๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š”  SVG ๋ฒกํ„ฐ ์ด๋ฏธ์ง€๋ผ ์ด๋ก ์ƒ์œผ๋กœ ๋‹น์—ฐํžˆ ๊นจ์ง€๋Š” ์ด์Šˆ๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ๊ฒŒ ๋งž๋Š”๋ฐ ์ฐธ ์ด์ƒํ–ˆ๋‹ค.  iOS๊ฐœ๋ฐœ์ž ๋ถ„์ด ํ•ด๋‹น ํ™”๋ฉด์€ ์›น๋ทฐ๋ผ๊ณ  ์›นํ”„๋ก ํŠธ ํŒŒํŠธ์— ์ด์Šˆ ํ‹ฐ์ผ“์„ ๋„˜๊ฒจ์ฃผ์–ด ํ•จ๊ป˜ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์‚ฌํŒŒ๋ฆฌ ์›น๋ทฐ์—์„œ SVG๊นจ์ง ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๊ณ , ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค.    ํƒœ๊ทธ๋ฅผ  ์ด๋Ÿฐ ์‹์œผ๋กœ object ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (, ๋„ ๊ฐ€๋Šฅ)     ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณธ ๊ฒฐ๊ณผ ์œ„์˜ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์‰ฌ์›Œ ๋ณด์˜€๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  SVG ์ด๋ฏธ์ง€๋ฅผ ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์‹ค์งˆ์ ์œผ๋กœ ์–ด๋ ค์› ๋‹ค. (์„œ๋ฒ„์—์„œ ์ด๋ฏธ์ง€..