리액트 useMemo란?

useMemo는 리액트에서 제공하는 훅(Hook) 중 하나로, 컴포넌트의 성능을 최적화하기 위해 사용됩니다.
주로 계산 비용이 높은 연산의 결과를 저장하고 재사용하거나, 객체/배열 등 참조형 데이터의 동일성 유지가 필요할 때 활용합니다.
복잡하거나 무거운 연산을 매 렌더링마다 반복하고 싶지 않을 때, 그리고 객체, 배열, 함수 등의 참조값이 매번 새로 만들어져서 불필요한 렌더링이 발생할 때 사용할 수 있습니다.


기본 문법

const memoizedValue = useMemo(() => {
  // 계산이 많이 드는 함수 실행 또는 객체/배열 생성
  return expensiveFunction(a, b);
}, [a, b]);
  • 첫 번째 인자: 메모이제이션할 함수(콜백). 이 함수의 반환값이 저장됩니다.
  • 두 번째 인자: 의존성 배열. 배열 안의 값이 바뀔 때만 첫 번째 함수가 다시 실행되어 값을 갱신합니다. 값이 바뀌지 않으면 이전에 저장한 값을 재사용합니다.

예시

계산 비용이 높은 함수의 결과 저장

import React, { useMemo, useState } from 'react';

function ExpensiveComponent() {
  const [count, setCount] = useState(0);

  // 비용이 많이 드는 함수
  const expensiveCalculation = (num) => {
    console.log('Calculating...');
    return num * 2; // 실제로는 더 복잡한 연산이라고 가정
  };

  // useMemo로 결과 저장
  const calculatedValue = useMemo(
    () => expensiveCalculation(count),
    [count]
  );

  return (
    <div>
      <p>Count: {count}</p>
      <p>Calculated Value: {calculatedValue}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}
  • count가 바뀔 때만 expensiveCalculation이 실행되고, 그렇지 않으면 이전 결과를 재사용합니다.

참조 동일성 유지(불필요한 렌더링 방지)

const memoizedObject = useMemo(() => ({ a: 1, b: 2 }), []);
  • 빈 배열([])을 의존성으로 넣으면 컴포넌트가 처음 마운트될 때 한 번만 실행되고, 이후에는 같은 객체 참조가 유지됩니다.
  • 이 패턴은 자식 컴포넌트에 객체/배열을 props로 넘길 때 불필요한 렌더링을 막는 데 유용합니다.

정리

  • useMemo는 값(연산 결과, 객체, 배열 등)을 메모이제이션하여, 의존성 배열의 값이 바뀔 때만 다시 계산합니다.
  • 주로 비용이 큰 연산의 최적화 또는 참조 동일성 유지가 필요할 때 사용합니다.
  • 의존성 배열을 올바르게 설정하는 것이 중요합니다. 잘못 설정하면 값이 갱신되지 않거나, 불필요한 계산이 반복될 수 있습니다.

useMemo를 적절히 활용하면 리액트 앱의 불필요한 연산과 렌더링을 줄여 성능을 최적화할 수 있습니다.

728x90

'React' 카테고리의 다른 글

[React] Props(프롭스)란?  (0) 2025.05.28
[React] 리액트 타입 연결하기  (0) 2025.05.28
[React] UseState란?  (0) 2025.05.27
[React] React Router 설정방법  (2) 2025.05.21
[React] Vite로 프론트엔드 프로젝트 시작하기  (0) 2025.05.08

리액트 라우터(React Router)란?

리액트 라우터(React Router)는 리액트 애플리케이션에서 주소(URL)에 따라 컴포넌트를 다르게 렌더링할 수 있도록 해주는 라이브러리입니다.
즉, 사용자가 브라우저 주소창에 입력한 URL을 감지해서, 해당 경로에 맞는 화면(컴포넌트)을 보여주는 역할을 합니다.
이 기능을 통해 리액트 SPA(Single Page Application)에서도 여러 페이지가 있는 것처럼 자연스러운 내비게이션과 화면 전환을 구현할 수 있습니다.

주요 컴포넌트

  • BrowserRouter
    라우터 기능을 사용하려면 앱의 최상위에 <BrowserRouter>로 감싸야 합니다. 이 컴포넌트가 하위 트리에 라우팅 정보를 전달합니다.
  • Routes & Route
    <Routes>는 여러 개의 <Route>를 감싸서 관리합니다.
    <Route>path 속성에 해당하는 주소로 접근했을 때 어떤 컴포넌트를 보여줄지 정의합니다.
  • Link
    내비게이션을 위해 <Link to="/경로"> 컴포넌트를 사용하면, 페이지 새로고침 없이 경로를 바꿔줍니다.

예시 코드

import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
import Home from './pages/Main';
import Detail from './pages/Detail';

function App() {
  return (
    <BrowserRouter>
      <nav>
        <Link to="/">Main Page</Link>
        <Link to="/Detail">Detail Page</Link>
      </nav>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/Detail" element={<Detail />} />
      </Routes>
    </BrowserRouter>
  );
}

위 예시처럼, 주소가 '/'이면 Main 컴포넌트, '/Detail'이면 Detail 컴포넌트가 보여집니다.

 


리액트 라우터 돔 설치 방법

npm install react-router-dom

 

기본 사용법

  1. BrowserRouter로 앱 전체를 감싸기
    import React from "react";
    import ReactDOM from "react-dom/client";
    import App from "./App";
    import { BrowserRouter } from "react-router-dom";
    
    ReactDOM.createRoot(document.getElementById("root")).render(
      <React.StrictMode>
        <BrowserRouter>
          <App />
        </BrowserRouter>
      </React.StrictMode>
    );
        
  2. Routes와 Route로 경로와 컴포넌트 연결
    import { Routes, Route, Link } from "react-router-dom";
    import Home from "./pages/Home";
    import Detail from "./pages/Detail";
    
    function App() {
      return (
        <div>
          <nav>
            <Link to="/">Main</Link>
            <Link to="/Detail">Detail</Link>
          </nav>
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/Detail" element={<Detail />} />
          </Routes>
        </div>
      );
    }
        
    • <Link to="경로"> : 버튼/메뉴 등으로 표현 가능하며 클릭 시, 주소를 해당 경로로 바꿔줍니다.
    • <Routes> : 여러 개의 Route를 묶어줍니다.
    • <Route path="경로" element={컴포넌트} /> : 해당 경로에 컴포넌트를 보여줍니다.
  3. 각 컴포넌트의 코드 예시
    // pages/Main.tsx
    const Main = () => {
      return <div>Main Page</div>;
    };
    export default Main;
    
    // pages/Detail.tsx
    const Detail = () => {
      return <div>Detail Page</div>;
    };
    export default Detail;
        

실제 작동 원리

  • 링크를 클릭하면 브라우저의 주소가 바뀌고, 그에 맞는 이름의 컴포넌트가 나타납니다.
  • 화면이 리렌더링 없이 빠르게 전환됩니다.
  • 링크를 클릭하지 않아도 올바른 경로를 주소창에 입력하면 해당 컴포넌트가 나타납니다.

정리

  • 리액트 라우터는 SPA에서 URL에 따라 컴포넌트를 다르게 보여주는 라이브러리입니다.
  • BrowserRouter, Routes, Route, Link 등 다양한 컴포넌트로 라우팅을 손쉽게 구현할 수 있습니다.
  • 중첩, 동적, 보호 라우트 등 다양한 고급 기능도 지원합니다.
  • 리액트 라우터를 사용하면, 리액트 앱에서 여러 페이지가 있는 것처럼 자연스럽고 효율적인 내비게이션을 구현할 수 있습니다.
728x90

'React' 카테고리의 다른 글

[React] Props(프롭스)란?  (0) 2025.05.28
[React] 리액트 타입 연결하기  (0) 2025.05.28
[React] UseState란?  (0) 2025.05.27
[React] UseMemo란?  (0) 2025.05.22
[React] Vite로 프론트엔드 프로젝트 시작하기  (0) 2025.05.08

Node.js 설치 확인하기

프론트엔드 개발을 시작하려면 우선 Node.js가 정상적으로 설치되어 있는지 확인해야 합니다.


 아래 명령어를 터미널에 입력하여 Node.js가 설치되었는지 확인 가능합니다.

node -v
npm -v

Vite로 프론트엔드 프로젝트 생성하기

Vite라는 프론트엔드 빌드 도구로 프로젝트를 시작합니다. (2025년 5월 기준)

 

1. 터미널 위치 확인

터미널에서 프로젝트를 진행하고 싶은 위치로 이동해야 합니다.

터미널에서 ls를 입력하여 현재 경로 확인
cd 원하는 경로 를 입력하여 경로 이동

 

2. Vite로 프로젝트 초기화

아래 명령어를 입력하면, Vite가 자동으로 최신 버전의 프로젝트를 생성합니다.

npm create vite@latest

•  Project name

프로젝트 이름을 입력합니다.

(엔터를 누르면 현재 폴더명이 자동 적용됩니다.)

• Select a framework:
│  ○ Vanilla
│  ○ Vue
│  ● React
│  ○ Preact
│  ○ Lit
│  ○ Svelte
│  ○ Solid
│  ○ Qwik
│  ○ Angular
│  ○ Marko
│  ○ Others

프레임워크를 선택합니다.

여기서는 React를 선택하며 Vue, Svelte등 원하는 다른 프레임워크가 있을 시 선택 가능합니다.
• 언어 선택: JavaScript 또는 TypeScript 중 원하는 언어를 선택하세요.

 

◆  Select a variant:
│  ● TypeScript
│  ○ TypeScript + SWC
│  ○ JavaScript
│  ○ JavaScript + SWC
│  ○ React Router v7 ↗
│  ○ TanStack Router ↗
│  ○ RedwoodSDK ↗

언어 선택입니다.

JavaScript 또는 TypeScript 중 원하는 언어를 선택하세요.

설치가 완료되면, 아래 명령어로 프로젝트 폴더로 이동합니다.

cd 프로젝트 폴더명

 

3. 필요한 패키지 설치

프로젝트 폴더 안에서 아래 명령어를 입력하세요.

npm install

위의 메세지를 입력하면 프로젝트에 필요한 모든 패키지가 설치됩니다.

 

4. 개발 서버 실행

아래 명령어를 입력하면 개발 서버가 실행됩니다.

npm run dev

터미널에 표시된 주소(예: `http://localhost:5173`)를 브라우저에 입력하면 프로젝트의 기본 화면이 나타납니다.


 프로젝트 구조

프로젝트 폴더 안에는 다양한 파일들이 설치되어 있습니다.

• src/: App.jsx 또는 App.tsx, main.jsx 또는 main.tsx
• index.css
• public/: favicon.ico 등 정적 파일
• package.json: 프로젝트 정보와 설치된 패키지 목록

 

불필요한 파일/코드 삭제(컴포넌트 수정)

프로젝트 폴더 안의 `src/App.jsx` 또는 `App.tsx` 경로의 파일을 열어 수정이 가능합니다.

프로젝트의 내용을 초기화 하기 위해 아래 파일/코드를 삭제하거나 비웁니다.

src/App.tsx(JSX)

function App() {
  return <div></div>;
}
export default App;

 

- src/assets/ 폴더: 전체 삭제 (로고, 이미지 등)
- src/App.css: 삭제
- src/index.css: 내용 전체 삭제하거나 최소화(원한다면 파일 자체도 삭제 가능하나, main.tsx에서 import도 지워야 합니다.
- src/vite-env.d.ts: 타입스크립트라면 유지

public 폴더
- public/vite.svg 등 이미지 파일 삭제
- public/favicon.ico: 필요 없으면 삭제

코드에서 import 정리
- main.tsx(JSX)에서 import './index.css'; 등 불필요한 import 삭제
- App.tsx에서 import './App.css'; 등 삭제

index.html에서 타이틀/메타태그 변경
- public/index.html 파일에서 `<title>`, `<meta>` 등도 원하는 대로 비우거나 수정


남는 파일 구조 예시

src/

  App.tsx
  main.tsx
  vite-env.d.ts (TS인 경우)
public/
  index.html
package.json

 


정리

 

 App.tsx: 완전히 빈 컴포넌트
  assets, css, 샘플 코드, 이미지: 모두 삭제
 index.html: 타이틀 등도 초기화
 불필요한 import: main.tsx, App.tsx에서 모두 삭제

• 코드 정리: ESLint, Prettier를 설치하면 코드가 더 깔끔해집니다.
• 버전 관리: `git init`으로 Git 저장소를 만들면 프로젝트를 안전하게 관리할 수 있습니다.
• 확장 기능: 라우터, 상태관리 등은 프로젝트가 커지면 추가하세요.

 

이렇게 하면 완전 상태의 프로젝트가 됩니다.  
이후부터는 원하는 컴포넌트, 스타일, 이미지를 자유롭게 추가하면서 개발이 가능해지고

실제로 많은 개발자들이 이렇게 정리해서 "나만의 템플릿"을 만들어 사용합니다.  

또한 이렇게 정리한 뒤, 이 상태를 GitHub에 올려두면 다음 프로젝트부터 degit 등으로 바로 복제해서 쓸 수 있습니다.

 

위의 내용으로 Vite를 이용하여 React의 기본적인 세팅 방법을 알아보았습니다.

추후에 라우팅, 컴포넌트 분리, API 연동 등 더 심화된 내용을 포스팅 하겠습니다.

728x90

'React' 카테고리의 다른 글

[React] Props(프롭스)란?  (0) 2025.05.28
[React] 리액트 타입 연결하기  (0) 2025.05.28
[React] UseState란?  (0) 2025.05.27
[React] UseMemo란?  (0) 2025.05.22
[React] React Router 설정방법  (2) 2025.05.21