๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/React by GPT

๋ฆฌ์•กํŠธ JS ํ…Œ์ด๋ธ” ํ—ค๋” ํ† ๊ธ€ ๋ฐ ์ •๋ ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ

by st๊ณต๊ฐ„ 2025. 5. 13.
๋ฐ˜์‘ํ˜•

๋ฆฌ์•กํŠธ JS ํ…Œ์ด๋ธ” ํ—ค๋” ํ† ๊ธ€ ๋ฐ ์ •๋ ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ

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

ํ…Œ์ด๋ธ”์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ ํ—ค๋” ํ† ๊ธ€ ์ •๋ ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ, ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ, ํ•„ํ„ฐ๋ง, ํŽ˜์ด์ง•ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ํ—ค๋” ํด๋ฆญ ์‹œ ์ •๋ ฌ ๋ฐฉํ–ฅ์ด ํ† ๊ธ€๋˜๋Š” ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(state)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋™์ ์ธ UI๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฆฌ์•กํŠธ์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hook)์„ ํ™œ์šฉํ•˜์—ฌ, ํ…Œ์ด๋ธ” ํ—ค๋”๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ •๋ ฌ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ํ† ๊ธ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๋ถ€ํ„ฐ ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ ์˜ˆ์ œ, ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•๊นŒ์ง€ ํญ๋„“๊ฒŒ ๋‹ค๋ฃจ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋ฐ ๊ธฐ๋ณธ ๊ฐœ๋…

๋ฆฌ์•กํŠธ์—์„œ ํ…Œ์ด๋ธ” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ ์ปฌ๋Ÿผ์˜ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const data = [
  { id: 1, name: 'ํ™๊ธธ๋™', age: 28, address: '์„œ์šธ' },
  { id: 2, name: '๊น€์ฒ ์ˆ˜', age: 35, address: '๋ถ€์‚ฐ' },
  { id: 3, name: '์ด์˜ํฌ', age: 22, address: '๋Œ€๊ตฌ' },
  // ... ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ
];

์ด์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ, ๊ฐ ์ปฌ๋Ÿผ(์˜ˆ: name, age, address)์— ๋Œ€ํ•ด ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ ฌ ์ƒํƒœ๋Š” ๋ณดํ†ต ‘์˜ค๋ฆ„์ฐจ์ˆœ(ascending)’๊ณผ ‘๋‚ด๋ฆผ์ฐจ์ˆœ(descending)’ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋ฉฐ, ๊ฐ™์€ ์ปฌ๋Ÿผ์„ ์—ฐ์†ํ•ด์„œ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ํ† ๊ธ€๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ์˜ useState์™€ useMemo ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ useMemo๋Š” ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋„๋ชจํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ํ…Œ์ด๋ธ” ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

์•„๋ž˜๋Š” ๋ฆฌ์•กํŠธ์—์„œ ํ…Œ์ด๋ธ” ํ—ค๋” ํ† ๊ธ€ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ ํ—ค๋” ํด๋ฆญ ์‹œ ์ •๋ ฌ ๋ฐฉํ–ฅ์ด ํ† ๊ธ€๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

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

const SortableTable = ({ data }) => {
  // ํ˜„์žฌ ์ •๋ ฌ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ์ƒํƒœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  const [sortConfig, setSortConfig] = useState({ key: null, direction: 'ascending' });

  // useMemo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์—ฐ์‚ฐ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  const sortedData = useMemo(() => {
    let sortableItems = [...data];
    if (sortConfig.key !== null) {
      sortableItems.sort((a, b) => {
        if (a[sortConfig.key] < b[sortConfig.key]) {
          return sortConfig.direction === 'ascending' ? -1 : 1;
        }
        if (a[sortConfig.key] > b[sortConfig.key]) {
          return sortConfig.direction === 'ascending' ? 1 : -1;
        }
        return 0;
      });
    }
    return sortableItems;
  }, [data, sortConfig]);

  // ํ—ค๋” ํด๋ฆญ ์‹œ ์ •๋ ฌ ๋ฐฉํ–ฅ์„ ํ† ๊ธ€ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  const requestSort = key => {
    let direction = 'ascending';
    if (sortConfig.key === key && sortConfig.direction === 'ascending') {
      direction = 'descending';
    }
    setSortConfig({ key, direction });
  };

  return (
    <table>
      <thead>
        <tr>
          <th onClick={() => requestSort('name')}>์ด๋ฆ„</th>
          <th onClick={() => requestSort('age')}>๋‚˜์ด</th>
          <th onClick={() => requestSort('address')}>์ฃผ์†Œ</th>
        </tr>
      </thead>
      <tbody>
        {sortedData.map(item => (
          <tr key={item.id}>
            <td>{item.name}</td>
            <td>{item.age}</td>
            <td>{item.address}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
};

export default SortableTable;

์œ„ ์ฝ”๋“œ์—์„œ SortableTable ์ปดํฌ๋„ŒํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ •๋ ฌํ•œ ํ›„, ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋”๋ฅผ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค requestSort ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ๋Š” ์ž๋™์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง๋˜์–ด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ† ๊ธ€ ๋ฐ ์ •๋ ฌ ๋กœ์ง ์‹ฌํ™”

ํ† ๊ธ€ ์ •๋ ฌ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ ๋กœ์ง์€ ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์–ด๋–ค ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ์ •๋ ฌ ๋ฐฉํ–ฅ(์˜ค๋ฆ„์ฐจ์ˆœ/๋‚ด๋ฆผ์ฐจ์ˆœ)์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ “์ด๋ฆ„” ์ปฌ๋Ÿผ์„ ํด๋ฆญํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์ฒซ ๋ฒˆ์งธ ํด๋ฆญ ์‹œ์—๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ ์šฉ๋˜๊ณ , ์ดํ›„ ๊ฐ™์€ ์ปฌ๋Ÿผ์„ ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ† ๊ธ€๋˜์–ด ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์„ ํด๋ฆญํ•  ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ปฌ๋Ÿผ์— ๋งž๋Š” ์ƒˆ๋กœ์šด ์ •๋ ฌ ๊ธฐ์ค€์ด ์„ค์ •๋˜๋ฉฐ, ๊ธฐ๋ณธ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ† ๊ธ€ ๋™์ž‘์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •๋ ฌ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ค‘์š”ํ•œ UX ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ •๋ ฌ ๋กœ์ง ๊ตฌํ˜„ ์‹œ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ: ์ •๋ ฌ ์ „ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•œ ํ›„ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹(์˜ˆ: ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)์„ ์ทจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์„ ๊ฒฝ์šฐ, ์ •๋ ฌ ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ useMemo์™€ ๊ฐ™์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๋ช…ํ™•์„ฑ: ์ •๋ ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ€์ˆ˜(sortConfig)์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ , ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ์ƒํ™ฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃจ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ •๋ ฌ ๋กœ์ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŽ˜์ด์ง•, ํ•„ํ„ฐ๋ง ๋“ฑ์˜ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋ž™์…˜์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋Š” UI๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

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

์ฒซ์งธ, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งค์šฐ ๋งŽ์€ ๊ฒฝ์šฐ, ์ •๋ ฌ ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ฒ„ ์ธก ์ •๋ ฌ์ด๋‚˜ ๊ฐ€์ƒ ์Šคํฌ๋กค(Virtual Scrolling) ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ์ •๋ ฌ ๊ธฐ์ค€์ด ๋ณต์žกํ•œ ๊ฒฝ์šฐ์—๋Š” ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ๋™์‹œ์— ๊ณ ๋ คํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€์ง€ ์•Š๋„๋ก ์ ์ ˆํ•œ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ์™€ ์ฃผ์„ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์‹œ์—๋Š” ๋””๋ฐ”์šด์‹ฑ(Debouncing)์ด๋‚˜ ์Šค๋กœํ‹€๋ง(Throttling) ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์—ฐ์†์ ์ธ ํด๋ฆญ ์ด๋ฒคํŠธ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•๋“ค์€ ํŠนํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ๋น ๋ฅธ ์†๋„๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ํด๋ฆญํ•  ๊ฒฝ์šฐ์—๋„ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

๊ฒฐ๋ก 

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

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

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

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

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

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€