FE๋ฅผ ํ–ฅํ•ดโ†—โ†—

ยท React
์ด์ „๋ถ€ํ„ฐ Webpack์„ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด๋‘๊ณ  ์‹ถ์—ˆ๋˜ React ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ดค๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ๋งŒ๋“ค์–ด๋ดค๋Š”๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ถ€ํ„ฐ ๋กœ๋”, ์„ค์ • ๋‚ด์šฉ๊นŒ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ธฐ๋กํ•˜๋ฉฐ ์‚ดํŽด๋ณด์ž. ํšŒ์‚ฌ์— ๋‚ด๊ฐ€๋งŒ๋“  ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ๋“ฑ์ด ์ ์  ์Œ“์—ฌ๊ฐ€๋Š” ๊ฑธ ๋ณด๋ฉฐ ํž˜๋“ค์ง€๋งŒ ๋ฟŒ๋“ฏํ•œ ์š”์ฆ˜์ด๋‹ค..โญ๏ธ Webpack ์ด๋ž€? ์›นํŒฉ์€ ๋‹จ์ˆœํžˆ ๋งํ•˜์ž๋ฉด ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ด๋‹ค. ๋ชจ๋“ˆ : ์›นํŒฉ์—์„œ์˜ ๋ชจ๋“ˆ์€ ๊ฐ์ข… .js .css .png ๋“ฑ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž์›์„ ๋งํ•œ๋‹ค. ๋ฒˆ๋“ค๋Ÿฌ : ์ž์›์„ ์กฐํ•ฉํ•ด์„œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“œ๋Š” ์—ญํ•  ES2015๋ถ€ํ„ฐ ๋ชจ๋“ˆ ์ด๋ผ๋Š” ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋‚˜ ๋‚ด๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ๋“ค์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ธฐ์กด์—๋Š” ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ..
ยท CS
ํšŒ์‚ฌ์—์„œ AWS R&D๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ณด์•ˆ๊ทธ๋ฃน ์„ค์ • ์‹œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ๋Š๋ผ๊ณ  ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋Š” IP IP (Internet Protocol) IP๋Š” ์ธํ„ฐ๋„ท์ด ํ†ตํ•˜๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์†ก์‹ ํ•˜๋Š” ํ†ต์‹ ์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ด๋‹ค. IP ์ฃผ์†Œ๋Š” ๊ฐ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ณ ์œ  ๋ฒˆํ˜ธ์ด๋‹ค. IPv4์™€ IPv6๋กœ ๋ฒ„์ „์ด ๋‚˜๋ˆ„์–ด ์ง€๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์›น ํ†ต์‹ ์€ IPv4๋ฅผ ์ด์šฉํ•œ๋‹ค. ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์ด๋‹ค. ํ˜„์žฌ ๊ตฌ์ถ•๋œ ๋ณด์•ˆ์‹œ์Šคํ…œ๋“ค์€ ๋ชจ๋‘ IPv4๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žก๊ณ  ์žˆ์–ด ํ˜ธํ™˜์ด ์–ด๋ ต๋‹คํ•œ๋‹ค. IPv6๊ฐ€ ๋‚˜์˜จ ์ด์œ ๊ฐ€ IPv4 ์ฃผ์†Œ ํ˜•์‹์˜ ๊ณ ๊ฐˆ ๋•Œ๋ฌธ์ด๋ฉฐ ์‹ค์ œ๋กœ IPv4์˜ ์ฃผ์†Œ๋Š” ๋ชจ๋‘ ์†Œ์ง„๋˜์–ด ์ฃผ์†Œ ํ• ๋‹น์„ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ AWS๊ฐ™์€ ์„œ๋น„์Šค์—์„œ IPv4 ํ˜•์‹์˜ ์ฃผ์†Œ๋ฅผ ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑด, ํด๋ผ์šฐ๋“œ ํšŒ์‚ฌ๋“ค์€ IPv4๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๊ณ  ์ƒˆ..
ยท React
์š”์ฆ˜ Next.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ CSS-IN-JS ๋Œ€์‘์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ๋กœ Tailwind CSS๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. VScode ์—์„œ Tailwind CSS IntelliSense ๋ผ๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•ด Tailwind์—์„œ ์ •ํ•ด์ง„ ํฌ๋งท์„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ ์•ฝ๊ฐ„์˜ ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค. ์„ค์ •์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•ด๋ณด์ž! Tailwind Tailwind๋Š” CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ utility class๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” utility class๋ฅผ class์— ๋„ฃ์–ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ํ•ด๋‹น ์Šคํƒ€์ผ๋ง์ด ์ ์šฉ๋œ๋‹ค. ์‚ฌ์šฉ๋ฒ• ์„ค์น˜๋ฐฉ๋ฒ•์€ ๊ณต์‹ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์ž. ๊ณต์‹ํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋ผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์‚ฌ์šฉ๋ฒ•์€ ๋ณ„๊ฑฐ ์—†๋‹ค. function App() { return ( ); } export default App; ์ •ํ•ด์ง„ uti..
ยท React
ํšŒ์‚ฌ์—์„œ 4deps์˜ ์นดํ…Œ๊ณ ๋ฆฌ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์žฌ๊ท€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 4deps๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žก์•˜์ง€๋งŒ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ deps๋“  ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์ฃ ! ์„ฑ๋Šฅ์ ์ธ ๋ฌธ์ œ๋Š” ๋ณ„๊ฐœ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์ด ๋ฐœ๋‹ฌํ•˜๋ฉด์„œ ์ด์ •๋„๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žฌ๊ท€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ ์ฃผ๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋งŽ์ด ์ ‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ์‚ฌ๋ก€๋กœ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค. const fibonacci = (num: number) => { if (num < 2) { return num; } return fibonacci(num - 1) + fibonacci(num - 2); }; ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด "์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜"๋ฅผ ์žฌ๊ท€ ํ•จ์ˆ˜..
ยท CS
XSS (ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…) ์ด๋ฒˆ ๋ฉด์ ‘์—์„œ XSS๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ๋‹ฌ๋ผ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›๊ณ  ๋ณด์•ˆ์  ์ด์Šˆ๋ผ๊ณ ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„์— ๋ฐ˜์„ฑํ•˜๋ฉฐ ๊ธฐ๋กํ•ด๋ณธ๋‹ค.๐Ÿ˜… XSS๋ž€ ? ์›น ์ƒ์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์ทจ์•ฝ์  ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•์ด๋‹ค. ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•˜๋ฉฐ ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๋Š” ์‚ฝ์ž…๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๊ณ , ์˜๋„์น˜ ์•Š์€ ํ–‰๋™์„ ์ˆ˜ํ–‰์‹œํ‚ค๊ฑฐ๋‚˜ ์ฟ ํ‚ค, ์„ธ์…˜ ํ† ํฐ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•œ๋‹ค. ๊ณต๊ฒฉ ๋ฐฉ๋ฒ• โš”๏ธ Stored XSS (์ €์žฅํ˜• ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…) Stored Xss ๊ณต๊ฒฉ์€ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•œ ์„œ๋ฒ„์— ์•…์„ฑ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์„œ๋ฒ„์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ ๊ฒŒ์‹œํŒ, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„, ๋Œ“๊ธ€ ๋“ฑ์„ ํ†ตํ•ด ์„œ๋ฒ„์—..
ยท React
debnounce๋ž€ ? - debounce๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆœ์ฐจ์  ์ด๋ฒคํŠธ ํ˜ธ์ถœ์„ ๋งˆ์ง€๋ง‰(๋˜๋Š” ์ฒ˜์Œ) ํ•˜๋‚˜์˜ ํ˜ธ์ถœ๋งŒ ํ•˜๋„๋ก ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ• - ์ฃผ๋กœ ๊ฒ€์ƒ‰, ์Šคํฌ๋กค ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์œ ๋ช…ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ lodash๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋งŒ์•ฝ ํšŒ์›๊ฐ€์ž…์—์„œ ์ด๋ฉ”์ผ์˜ ์ค‘๋ณตํ™•์ธ์„ onChange ์ด๋ฒคํŠธ๋กœ ์ฒดํฌํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๋งˆ๋‹ค API ํ˜ธ์ถœ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Ÿฌ๋ฉด ๋”์งํ•œ ์„œ๋ฒ„ ๋น„์šฉํญํƒ„์„ ๋งž์„ ์ˆ˜ ์žˆ๋‹ค. debouncing ์˜ˆ์ œ useEffect(() => { console.log(`http ์š”์ฒญ ${formData.email}`); }, [formData.email]); useEffect๋ฅผ ์ด์šฉํ•ด email input์ด ์„œ๋ฒ„์— ๊ฐ™์€ ์•„์ด๋””๊ฐ€ ์žˆ๋Š”์ง€ ์ค‘๋ณตํ™•์ธ..
ยท React
useState โญ๏ธ React์˜ state๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ํ•œ ๊ฐ’์ด๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ useState ํ›…์„ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. import React, { useState } from 'react'; function App() { const [number, setNumber] = useState(0); return ( {number} ); } export default App; React ํŒจํ‚ค์ง€์—์„œ useState๋ฅผ ๋ถˆ๋Ÿฌ์™€ import ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. useState์˜ ์ธ์ž์—๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค. (๋ถˆ๋ฆฌ์–ธ์ด๋‚˜ ๋ฐฐ์—ด, ๊ฐ์ฒด๋„ ํ• ๋‹น ๊ฐ€๋Šฅ) useState๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด๋•Œ ์ฒซ๋ฒˆ์งธ number๋Š” ์›์†Œ์˜ ํ˜„์žฌ ์ƒํƒœ, ๋‘๋ฒˆ์งธ ์›์†Œ๋Š” Setterํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. setState..
๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ HODU์ƒต์„ ์ง„ํ–‰ํ•˜๋˜ ์ค‘ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ๋ถ€๋ถ„์—์„œ input๊ฐ’์ด 1๊ฐœ์”ฉ ๋ฐ€๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋‚˜์™”๋‹ค. ํšŒ์›๊ฐ€์ž… input๊ฐ’๋“ค์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” values ๊ฐ์ฒด์ƒ์„ฑ values์—์„œ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹นํ•œ username, password๋ฅผ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ๋กœ์ง์— ๋„ฃ์–ด์ฃผ๊ณ  ์ด๋Ÿฐ์‹์œผ๋กœ onChange๋ฅผ ๊ฐ์ง€ํ•˜๋ฉฐ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ๋Š”๋ฐ ๋ฌธ์ œ๋Š” ์œ ํšจ์„ฑ test ์ •๊ทœํ‘œํ˜„์‹์„ ๋งŒ๋“  ๋ณ€์ˆ˜์— ์ง์ ‘ state๊ฐ’์„ ๋„ฃ์œผ๋‹ˆ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค. ์›์ธ์€ onChangeํ•จ์ˆ˜์— if๋ฌธ์œผ๋กœ userNameRegExp, passwordRegExp ๋ฅผ ๋„ฃ์„๋•Œ์˜ state๋Š” setState๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฐ’์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๊ณ  ์ด๊ฑด setState๊ฐ€ ๋น„๋™๊ธฐ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด๊ฒฐ target๊ณผ targetName์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” isVal..
YunCow
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก