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

Frontend

(6)
๋ฐ”๋ฒจ(Babel) ์„ค์ •ํ•˜๊ธฐ ๋ฐ”๋ฒจ(Babel)์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๋ฐ”๋ฒจ์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋กœ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ, JSX ํฌํ•จ)๊ฐ€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋„๋ก ๋ณ€ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค. ์‹คํ–‰์ด ์•ˆ๋˜๋Š” ๊ตฌ๋ฒ„์ „ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํฌํ•  ๋•Œ์— ์˜ˆ์ „ ๋ฐฉ์‹์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐฐํฌํ•˜๋ ค๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋ฒจ ๋นŒ๋“œ ๊ณผ์ • ํŒŒ์‹ฑ(Parsing): ์ฝ”๋“œ๋ฅผ ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ • ๋ณ€ํ™˜(Transforming): ES6 -> ES5 ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ • ์ถœ๋ ฅ(Printing): ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ฐ”๋ฒจ์ด ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•  ์ง€์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ ๋งŒ๋“  ์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ex) .babelrc { "plugins": ["transform..
React-Query React-Query๋ž€? React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ Fetching, ์บ์‹ฑ, ๋™๊ธฐํ™”, ์„œ๋ฒ„ ์ชฝ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๋น„๋™๊ธฐ ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์•„๋ž˜์™€ ๊ฐ™์ด React๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ useEffect๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  useState๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. import React, { useEffect, useState } from "react"; import axios from "axios"; const App = function () { const [sate, setState] = useState([]); const load = async () => { const { data } = await axios.g..
CRA(Create React App) ์›นํŒฉ ์„ค์ •ํ•˜๊ธฐ CRA๋Š” ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ธํŒ… ๋ฐ ๋ณต์žกํ•œ ๊ณผ์ •์„ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์˜ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. yarn create react-app my-app --template typescript ์ด๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๋ฐ”๋ฒจ์ด๋‚˜ ์›นํŒฉ ๊ฐ™์€ ์ข…์†๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์„ค์ •์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆจ๊ฒจ์ง„ ์ข…์†์„ฑ ๋ฐ ์„ค์ •์„ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” eject ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด ๋ฐฉ๋ฒ•์€ ๋‹จ๋ฐฉํ–ฅ ํ”„๋กœ์„ธ์Šค๋กœ ํ•œ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์‹œ ์›์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๊ณ  ์ดํ›„ ์ง์ ‘ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„ค์ •์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์„ค์ •๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด ์„ค์ •๋“ค์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ์„ค์ •๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค. ..
React์—์„œ setInterval ์‚ฌ์šฉํ•˜๊ธฐ ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜ setState๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ import { useEffect, useState } from "react"; import "./App.css"; function App() { const [count, setCount] = useState(0); useEffect(() => { const timer = setInterval(() => { setCount((prev) => prev + 1); }, 1000); return () => { clearInterval(timer); }; }, []); return ( {count} ); } export default App; ์œ„ ์†Œ์Šค๋Š” 1์ดˆ๋งˆ๋‹ค ์นด์šดํŠธ๋ฅผ 1 ์”ฉ ์˜ฌ๋ ค์ฃผ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. useEffect ๋‘ ๋ฒˆ์งธ ์ธ์ž์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์–ด componene..
React 18 ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์ •๋ฆฌ 1. Automatic Batching ์ž๋™ ๋ฐฐ์น˜๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ state ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ(๋ฆฌ๋ Œ๋”๋ง ์„ฑ๋Šฅ ๊ฐœ์„ )ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด 17 ๋ฒ„์ „์—์„œ๋„ ์ด๋Ÿฌํ•œ ๋ฐฐ์นญ ์ฒ˜๋ฆฌ๋Š” ๋˜์—ˆ์ง€๋งŒ ๋น„๋™๊ธฐ ๋ถ€๋ถ„์—์„œ๋Š” ์ž๋™ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 18 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋น„๋™๊ธฐ์—์„œ๋„ ์ž๋™ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. import { useState } from "react"; import "./App.css"; function App() { const [number, setNumber] = useState(0); const [boolean, setBoolean] = useState(true); const onClick = () => { setNumber((prev) => prev + 1);..
TDD (ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ) TDD(Test Driven Development)๋ž€? TDD๋ž€ Test Driven Development๋ผ๋Š” ์•ฝ์ž๋กœ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์„ ์˜๋ฏธํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ ํ™•์ธ ๋ฐ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ณ  ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์€ ๋ฌด์—‡์ผ๊นŒ? ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ด๋ž€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๊ฐœ๋ฐœ์ด ์ด๋Œ์–ด์ง€๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค. 1. ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ๋‹ค.(๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ธก๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ˆ ํ•˜๋Š” ๋‹จ๊ณ„) 2. ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ์˜ ๊ธฐ๋Šฅ๋งŒํผ์˜ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ๋‹ค. 3. ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์€ ์œ„์™€ ๊ฐ™์€ ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 1. ๋จผ์ € ..