}> ); } export default App;

์ด ์˜ˆ์ œ์—์„œ๋Š” Home, About, Contact ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ง€์—ฐ ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ผ์šฐํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. Suspense ์ปดํฌ๋„ŒํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๊ธฐ์ˆ  ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

์˜ค๋ฅ˜ ๊ฒฝ๊ณ„(Error Boundaries)

์˜ค๋ฅ˜ ๊ฒฝ๊ณ„๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์–ด๋””์—์„œ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๊ณ , ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ, ์ถฉ๋Œํ•œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๋Œ€์‹  ๋Œ€์ฒด UI๋ฅผ ํ‘œ์‹œํ•˜๋Š” React ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์—ฐ ๋กœ๋”ฉ๋œ ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ๋”ฉ ์ค‘์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


import React, { lazy, Suspense } from 'react';

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // ๋‹ค์Œ ๋ Œ๋”๋ง์—์„œ ๋Œ€์ฒด UI๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // ์˜ค๋ฅ˜๋ฅผ ์˜ค๋ฅ˜ ๋ณด๊ณ  ์„œ๋น„์Šค์— ๊ธฐ๋กํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋Œ€์ฒด UI๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
      return 

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

; } return this.props.children; } } const MyComponent = lazy(() => import('./MyComponent')); function App() { return ( Loading...}> ); } export default App;

์ด ์˜ˆ์ œ์—์„œ ErrorBoundary ์ปดํฌ๋„ŒํŠธ๋Š” Suspense ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์Œ‰๋‹ˆ๋‹ค. MyComponent์˜ ๋กœ๋”ฉ ๋˜๋Š” ๋ Œ๋”๋ง ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ErrorBoundary๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๊ณ  ๋Œ€์ฒด UI๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ๋กœ๋”ฉ์„ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๋‹ค์–‘ํ•œ ์‚ฐ์—… ๋ถ„์•ผ์—์„œ์˜ ์˜ˆ์‹œ

React ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์ฝ”๋“œ ๋ถ„ํ• ์˜ ์ด์ ์€ ๋‹ค์–‘ํ•œ ์‚ฐ์—… ๋ถ„์•ผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

React.lazy์™€ Suspense๋ฅผ ๋„˜์–ด์„œ

React.lazy์™€ Suspense๊ฐ€ ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ธฐ์ˆ ๋“ค์€ ๋” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๊ณผ ์ œ์–ด๊ถŒ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๊ฒฐ๋ก 

์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ ๋ถ„ํ• ์„ ๋™๋ฐ˜ํ•œ React ์ง€์—ฐ ๋กœ๋”ฉ์€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ ๋กœ๋“œํ•จ์œผ๋กœ์จ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ด๊ณ , ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๋ฉฐ, ๋ฆฌ์†Œ์Šค ์†Œ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React.lazy์™€ Suspense๋ฅผ ํ™œ์šฉํ•˜์—ฌ React ํ”„๋กœ์ ํŠธ์— ์‰ฝ๊ฒŒ ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋” ๋น ๋ฅด๊ณ  ๋ฐ˜์‘์„ฑ์ด ์ข‹์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ ๋ฐ ๊ธฐํƒ€ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ์ง€์†์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ฝ”๋“œ ๋ถ„ํ•  ์ „๋žต์„ ๊ฐœ์„ ํ•˜์—ฌ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค.

์ง€์—ฐ ๋กœ๋”ฉ์˜ ํž˜์„ ๋ฐ›์•„๋“ค์—ฌ ๋” ๋น ๋ฅด๊ณ , ๋” ํšจ์œจ์ ์ด๋ฉฐ, ๋” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž ์žฌ๋ ฅ์„ ๋ฐœํœ˜ํ•˜์„ธ์š”.

React ์ง€์—ฐ ๋กœ๋”ฉ: ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ ๋ถ„ํ• ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ | MLOG | MLOG