๐ง๐ป JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ ์ด๋ณด๋ถํฐ ์ ๋ฌธ๊ฐ๊น์ง ๐
โจ ์ฌ๋ฌ๋ถ์ JavaScript ๊ฐ๋ฐ์์ด์ ๊ฐ์? ์๋๋ฉด ์ด์ ๋ง ์์ํ๊ฑฐ๋ ์ด๋ ์ ๋ ๊ฒฝํ์ ์๋๋ฐ ์ฑ๋ฅ ํฅ์์ ๊ณ ๋ฏผ์ด์ ๊ฐ์? ๐ค ์ค๋์ ‘JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ’์ ๋ํด ์น๊ทผํ๋ฉด์๋ ์ ๋ฌธ๊ฐ ์์ค์ ๊น์ด ์๊ณ ์ค์ฉ์ ์ธ ์ ๋ณด๋ฅผ ํจ๊ป ๋๋ ๋ณด๋ ค๊ณ ํฉ๋๋ค! ๐ช๐ป
๋ชจ๋๊ฐ ์๊ณ ์ถ์ดํ๋ ‘๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋ฐ’, ์ ๋๋ก ์ดํดํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ‘๋น ๋ฅด๊ณ ๊น๋ํ๊ฒ’ ๋์๊ฐ๊ฒ ๋ง๋ค์ด์ค ํต์ฌ ๋ ธํ์ฐ๋ฅผ ๋จ๊ณ๋ณ๋ก ์๋ดํ ๊ฒ์! ๐ฏ๐
๐ ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ์ ์ ๊ฒฝ ์ธ๊น? ๐ฏ
- โ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ๋๋ฆฐ ํ์ด์ง, ๋ก๋ฉ ๋๊ธฐ ์๊ฐ ์ค์ด๊ธฐ โก
- โ ์ฑ๋ฅ ๊ทน๋ํ: CPU, ๋คํธ์ํฌ ์์ ํจ์จ์ ํ์ฉ ๐ป
- โ ์ฝ๋ ์ ์ง๋ณด์ ์ฉ์ด: ๊ฐ๋ ์ฑ ๋๊ณ ๊น๋ํ ๋น๋๊ธฐ ์ฝ๋ โ๏ธ
ํต๊ณ๋ก ๋ณด๋ ํ์ค
๐ ๋ํ ์๋น์ค์ 70% ์ด์์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ ์คํจ๋ก ์ธํ ๋ณ๋ชฉ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๊ณ , ์ด๋ฅผ ๊ฐ์ ํ ์ฌ๋ก๋ ์๋ฒ ๋น์ฉ ์ ๊ฐ๊ณผ ์ฌ์ฉ์ ๋ง์กฑ๋ ํฅ์์ ํฐ ๋์์ ์ฃผ๊ณ ์์ด์! ๐
๐ ๏ธ JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ธฐ์ด๋ถํฐ ์ต์ ํ๊น์ง
1๏ธโฃ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ธฐ์ด ์ดํด ๐
- ๐ธ ์ฝ๋ฐฑ ํจ์: ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ โญ
๐ ์:setTimeout()
, ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ
๐ ๋จ์ : ์ฝ๋ฐฑ ํฌ(์ฝ๋ฐฑ ์ง์ฅ, callback hell), ๊ฐ๋ ์ฑ ๋ฎ์ ๐ต - ๐ธ Promises (ํ๋ก๋ฏธ์ค): ์ฝ๋ฐฑ ๋ฌธ์ ํด๊ฒฐ, ์ฒด์ด๋ ๊ฐ๋ฅ โจ
๐ ์:fetch()
,new Promise()
์ฌ์ฉ
๐ ์ฅ์ : ๋ช ํํ ์ฑ๊ณต/์คํจ ์ฒ๋ฆฌ, ์ฐ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ - ๐ธ async/await: ์ฝ๊ธฐ๋ ์ฝ๊ณ , ๋๊ธฐ ์ฝ๋์ฒ๋ผ ๋ณด์ฌ ํ๋ฅญํ ์ต์ ํ ๋๊ตฌ ๐
๐ ์:const data = await fetchData()
2๏ธโฃ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ๋ฅผ ์ํ ํต์ฌ ๊ธฐ๋ฒ ๐ก
- ๐น ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋๋น ์ง๋ ฌ ์ฒ๋ฆฌ
โ ํ์ํ ๊ฒฝ์ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ(Promise.all())๋ก ๋ณ๋ ฌ๋ก ์์ฒญ/์์ ์ํ
โ ์์ฐจ์ฒ๋ฆฌ๋ณด๋ค 2๋ฐฐ-10๋ฐฐ ๋น ๋ฅด๊ฒ ๋๋ผ ์ ์์ด์! ๐ - ๐น ์ ์ ํ ์๋ฌ ํธ๋ค๋ง ๊ตฌํ
โtry/catch
๋๋.catch()
ํ์ฉ
โ ์ฌ์ฉ์์๊ฒ ์น์ ํ ์คํจ ๋ฉ์์ง ์ ๊ณต, ์ฌ์๋ ๋ก์ง ๋ฃ๊ธฐ - ๐น ๋ก๋ฉ ์ํ ๊ด๋ฆฌ
โ UI์ ๋ก๋ฉ ์ธ๋์ผ์ดํฐ ํ์, ์ฌ์ฉ์ ๊ฒฝํ ํฅ์
โ ์๋ฅผ ๋ค๋ฉด,isLoading
์ํ ๋ณ์ ๋์
- ๐น ๋ถํ์ํ ์ฌ๋ ๋๋ง ๋ฐฉ์ง
โ ์ํ ๋ณํ ๊ฐ์ง ์ต์ ํ (React์ ๊ฒฝ์ฐuseCallback
,useMemo
)
โ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋น๋๊ธฐ ๋ฐ์ดํฐ fetch ์ต์ ํ - ๐น ๋คํธ์ํฌ ์์ฒญ ์ต์ํ
โ ์บ์ฑ ์ ๋ต ์ ์ฉ (Service Worker, LocalStorage ํ์ฉ)
โ ์์ฒญ ์ค๋ณต ๋ฐฉ์ง ์ค๊ณ
3๏ธโฃ ์ค์ ์์ & ์ต์ ํ ํ ๐
๐ ์์ 1: ์ฌ๋ฌ API ์์ฒญ ๋ณ๋ ฌ ์ฒ๋ฆฌ
javascript
// ๋ณ๋ ฌ๋ก ์ฌ๋ฌ ์์ฒญ ๋ณด๋ด๊ธฐ
async function fetchMultipleData() {
try {
const [userData, productData, commentData] = await Promise.all([
fetch('/api/user'),
fetch('/api/products'),
fetch('/api/comments')
])
// ๋ฐ์ดํฐ ์ฒ๋ฆฌ
console.log(userData, productData, commentData)
} catch (error) {
console.error('์์ฒญ ์คํจ!', error)
}
}
โญ Tip!
๐ธ ๋ณ๋ ฌ ์์ฒญ์ Promise.all()
์ด ํต์ฌ!
๐ธ ์์ฒญ ์ฑ๊ณต, ์คํจ๋ฅผ ๋์์ ๊ด๋ฆฌํ๋ ๋์ ์คํจ ์ ์ ์ฒด ์คํจ ์ฒ๋ฆฌ ๊ฐ๋ฅ!
๐ ์์ 2: ๋น๋๊ธฐ ๋ ๋๋ง ์ต์ ํ
React์์ useMemo
, useCallback
์ฌ์ฉ์ผ๋ก ๋ถํ์ํ ์ฌ๋ ๋๋ง ๋ฐฉ์ง์ ์ฑ๋ฅUP! ๐ฅ
javascript
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b])
const handleClick = useCallback(() => { /* ์ด๋ฒคํธ ์ฒ๋ฆฌ */ }, [deps])
โญ Tip!
๐ธ ์ปดํฌ๋ํธ ์์ ์ฐ์ฐ์ด๋ ํจ์๊ฐ ๋ง๋ค๋ฉด useMemo
, useCallback
ํ์!
๐ธ ์ฑ๋ฅ ํฅ์๋ฟ ์๋๋ผ ๊ฐ๋
์ฑ๋ ์ข์์ง๋๋ค ๐
๐ฅ ๋น๋๊ธฐ ์ต์ ํ๋ฅผ ์ํ ์ค์ ๊ฟํ! ๐ฅ
- โ
๋๊ธฐ์๊ฐ ์ต์ํ:
Promise.race()
๋๋ ํ์์์ ์ค์ ์ผ๋ก ๋ฌดํ ๋๊ธฐ ๋ฐฉ์ง - โ Rate Limiting (์์ฒญ ์ ํ) ๊ด๋ฆฌ: API ํธ์ถ๋ ์กฐ์ , ์๋ฒ ๋ถํ ๋ฐฉ์ง
- โ ์บ์ ํ์ฉ: ์ต๊ทผ ์์ฒญ ๋ฐ์ดํฐ ์ ์ฅ, ์ฌ์ฌ์ฉ
- โ ์ฆ์ ์คํ ํจ์ ํ์ฉ: ๋น๋๊ธฐ ์ฒ๋ฆฌ ์์ ์์ ์ ์ด!
- โ ๋ชจ๋ฐ์ผ ์ฑ๋ฅ ๊ณ ๋ ค: ์ ์ ๋ฐ์ดํฐ, ๋ฐฐํฐ๋ฆฌ ์๋ชจ ์ต์ํ! ๐
๐ฏ ๊ฒฐ๋ก : ๋ง์คํฐํ๊ธฐ ์ํ ์ต์ข ํ โจ
โ
๊ณํ๋ถํฐ ์์! ์ด๋ค ์์ฒญ์ด ๋ณ๋ ฌ, ์ง๋ ฌ๋ก ์ฒ๋ฆฌํ ์ง ๋ช
ํํ ํ์ธ์
โ
์ ๊ทน์ ์ผ๋ก Promise.all() ํ์ฉ! ์ฌ๋ฌ ์์
๋์์ ํ๋๋ก ์ค๊ณํ์ธ์ โ๏ธ
โ
async/await ๋ฌธ๋ฒ์ผ๋ก ๊ฐ๋
์ฑ ๋์ด๊ธฐ – ํํ, ์ฝ๊ธฐ ์ฝ๊ณ ๋๋ฒ๊น
๋ ์ฌ์์!
โ
์ฑ๋ฅ ์ธก์ ! ๊ฐ๋ฐ์ ๋๊ตฌ(DevTools)์ ๋ชจ๋ํฐ๋ง ํด ํ์ฉ์ผ๋ก ๋ณ๋ชฉ ์ฐพ๊ธฐ ๐ป
โ
๋์์์ด ์ฐ์ต! ๋ค์ํ ํ๋ก์ ํธ์ ๋์ ํ๋ฉฐ ๊ฒฝํ ์๊ธฐ ๐ช
๐ ์์ผ๋ก์ ๋จ๊ณ? ๊ณ์ํด์ ์ฑ์ฅํ๋ ค๋ฉด… ๐
๐ ์ถ์ฒ ์๋ฃ
- "JavaScript and JQuery" by Jon Duckett ๐
- MDN Web Docs – Promises, async/await
- ์จ๋ผ์ธ ๊ฐ์ข: Udemy, Inflearn์ ์ค์ ๋น๋๊ธฐ ๊ฐ์
๐ ์ง๊ธ ๋ฐ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ ๊ธฐ์ ์ ์ตํ๊ณ , ๋๋ง์ ๋น ๋ฅธ JavaScript ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ณด์ธ์! ๐
โ ํต์ฌ ์ฒดํฌ๋ฆฌ์คํธ ์ ๋ฆฌ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ฐ๋จํ ์ดํด์ Promise, async/await ํ์ฉ๋ฒ ์์ง
- ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ง๋ ฌ ์ฒ๋ฆฌ์ ์ฐจ์ด์ ๊ณผ ์ ์ ํ ์ฌ์ฉ ์์ ํ์
- ์๋ฌ ํธ๋ค๋ง๊ณผ ๋ก๋ฉ ์ํ ๊ด๋ฆฌ ์๋ฌ
- Promise.all()๊ณผ Promise.race() ํ์ฉ๋ฒ ์ตํ๊ธฐ
- UI ์ต์ ํ๋ฅผ ์ํ React Hook ํ์ฉ
- ์ฑ๋ฅ ์ธก์ ๋ฐ ๊ฐ์ ๋ฐ๋ณต
โ ๏ธ ๋์ผ๋ก, JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ธ๊ณ๋ ๋์ด ์์ด์! ๐ค ๋์์์ด ์ค์ตํ๊ณ , ์ต์ ํ ๊ธฐ๋ฒ์ ์ต๋ํ๋ฉฐ, ์ฌ๋ฌ๋ถ ์ฝ๋๊ฐ ‘๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ’ ๋ชจ์ต์ผ๋ก ๋ฐ์ ํ๋ ๊ทธ๋ ๊น์ง ํจ๊ป ๋ฌ๋ ค๋ด ์๋ค!๐ฅ๐ฅ
๐ ๊ถ๊ธํ ์ ์ด๋ ๊ณต์ ํ๊ณ ์ถ์ ๋ ธํ์ฐ๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์! ๋ชจ๋ ํจ๊ป ์ฑ์ฅํ๋ JS ์ปค๋ฎค๋ํฐ, ์ง๊ธ ๋ฐ๋ก ์์ํฉ์๋ค! ๐๐ฏ
์ด์ ๊ธ ๋ณด๊ธฐ!!