React ์ƒํƒœ๊ด€๋ฆฌ ( ์ง€์—ญ, ์ „์—ญ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ )

2026. 1. 20. 03:15ยท๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
728x90

React ์ƒํƒœ๊ด€๋ฆฌ

React๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋‹จ์ˆœํ•˜๋‹ค.

useState

๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์กฐ๊ธˆ๋งŒ ์ปค์ง€๋ฉด ์ด๋Ÿฐ ์งˆ๋ฌธ์ด ๋‚˜์˜ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

  • ์ด ์ƒํƒœ๋ฅผ ์–ด๋””์— ๋‘ฌ์•ผ ํ•˜์ง€?
  • props๋กœ ๋‚ด๋ฆฌ๊ธฐ์—” ๋„ˆ๋ฌด ๋ฉ€๋‹ค
  • ์ „์—ญ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?
  • ์ด๊ฑด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์•„๋‹Œ๊ฐ€?

React ์ƒํƒœ๊ด€๋ฆฌ๋Š” “์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋А๋ƒ”์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ
์ด ์ƒํƒœ๊ฐ€ ์–ด๋””๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์ณ์•ผ ํ•˜๋А๋ƒ์˜ ๋ฌธ์ œ๋‹ค.


1. ์ปดํฌ๋„ŒํŠธ ๋กœ์ปฌ ์ƒํƒœ: ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ คํ•ด์•ผ ํ•  ์„ ํƒ์ง€

React์˜ ๊ธฐ๋ณธ ์ƒํƒœ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜๋‹ค.

  • useState
  • useReducer

ํ† ๊ธ€, ์ž…๋ ฅ๊ฐ’, ๋ชจ๋‹ฌ ์—ด๋ฆผ ์—ฌ๋ถ€์ฒ˜๋Ÿผ
์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ์ด ์ด์ƒ์ด ํ•„์š” ์—†๋‹ค.

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(c => c + 1)}>+1</button>
    </div>
  );
}

์–ธ์ œ ์“ฐ๋ฉด ์ถฉ๋ถ„ํ•œ๊ฐ€

  • ์ƒํƒœ์˜ ์˜ํ–ฅ ๋ฒ”์œ„๊ฐ€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—๋งŒ ์žˆ์„ ๋•Œ
  • props๋งŒ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์œ ์ง€๋  ๋•Œ

๋งŽ์€ ์ƒํƒœ ๋ฌธ์ œ๋Š” ์‚ฌ์‹ค “์ „์—ญ์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๋Š”๋ฐ ์ „์—ญ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ”์—์„œ ์‹œ์ž‘๋œ๋‹ค.


2. URL / Router ์ƒํƒœ: ๊ณต์œ ๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์œ„์น˜

๊ฒ€์ƒ‰ ์กฐ๊ฑด, ํ•„ํ„ฐ, ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ๊ฐ™์€ ์ƒํƒœ๋Š”
์‚ฌ์‹ค UI ์ƒํƒœ์ด๊ธฐ ์ด์ „์— ๋„ค๋น„๊ฒŒ์ด์…˜ ์ƒํƒœ๋‹ค.

์ด๊ฑธ ์ปดํฌ๋„ŒํŠธ state๋กœ๋งŒ ๋“ค๊ณ  ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

  • ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ดˆ๊ธฐํ™”๋จ
  • ๋’ค๋กœ๊ฐ€๊ธฐ ๋™์ž‘์ด ์–ด์ƒ‰ํ•จ
  • ๋งํฌ ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•จ

๊ทธ๋ž˜์„œ ์ด ์ƒํƒœ๋“ค์€ URL๋กœ ์˜ฌ๋ผ๊ฐ”๋‹ค.

function ProductList() {
  const [params, setParams] = useSearchParams();
  const category = params.get('category') ?? 'all';

  return (
    <select
      value={category}
      onChange={e => setParams({ category: e.target.value })}
    >
      <option value="all">์ „์ฒด</option>
      <option value="shoes">์‹ ๋ฐœ</option>
      <option value="bag">๊ฐ€๋ฐฉ</option>
    </select>
  );
}

์–ธ์ œ URL ์ƒํƒœ๊ฐ€ ๋งž๋Š”๊ฐ€

  • ์ƒˆ๋กœ๊ณ ์นจ ํ›„์—๋„ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ
  • ๋’ค๋กœ๊ฐ€๊ธฐ / ๋ถ๋งˆํฌ๊ฐ€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ƒํƒœ
  • “ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์กฐ๊ฑด”์„ ์„ค๋ช…ํ•˜๋Š” ์ƒํƒœ

URL์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ์ƒํƒœ ์ €์žฅ์†Œ๋‹ค.


3. ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์ƒํƒœ: ์ด๊ฑด ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค

useEffect + fetch ์กฐํ•ฉ์€ ์ฒ˜์Œ์—” ๊ฐ„๋‹จํ•ด ๋ณด์ธ๋‹ค.
ํ•˜์ง€๋งŒ ๊ณง ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•œ๋‹ค.

  • ๋กœ๋”ฉ ์ƒํƒœ
  • ์—๋Ÿฌ ์ƒํƒœ
  • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ 
  • ์บ์‹œ, ์žฌ์š”์ฒญ, ๋™๊ธฐํ™”

์ด๊ฑธ ๋งค๋ฒˆ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑด ๋น„ํšจ์œจ์ ์ด๋‹ค.
๊ทธ๋ž˜์„œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์ „์šฉ ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.

function Todos({ filter }) {
  const { data, isLoading, error } = useQuery({
    queryKey: ['todos', filter],
    queryFn: () => fetch(`/api/todos?f=${filter}`).then(r => r.json()),
    staleTime: 60_000,
  });

  if (isLoading) return <p>๋กœ๋”ฉ์ค‘...</p>;
  if (error) return <p>์—๋Ÿฌ!</p>;

  return <ul>{data.map(t => <li key={t.id}>{t.title}</li>)}</ul>;
}

์ค‘์š”ํ•œ ๊ด€์ 

์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋Š” “์ƒํƒœ”๋ผ๊ธฐ๋ณด๋‹ค “์บ์‹œ๋œ ๊ฒฐ๊ณผ”์— ๊ฐ€๊น๋‹ค.

๊ทธ๋ž˜์„œ ์ „์—ญ ์ƒํƒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ด€๋ฆฌํ•˜๋ ค ํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ณต์žกํ•ด์ง„๋‹ค.


4. ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ: ์ง„์งœ ์ „์—ญ๋งŒ ๋‚จ๊ฒจ๋ผ

์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์‹œ์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค.

  • ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ์ •๋ณด
  • ํ…Œ๋งˆ
  • ๊ธ€๋กœ๋ฒŒ ์•Œ๋ฆผ

์ด๊ฑธ props๋กœ๋งŒ ์ „๋‹ฌํ•˜๋ ค ํ•˜๋ฉด
๊ณง props drilling ๋ฌธ์ œ๊ฐ€ ํ„ฐ์ง„๋‹ค.

const useUI = create((set) => ({
  theme: 'light',
  toggle: () => set(s => ({ theme: s.theme === 'light' ? 'dark' : 'light' })),
}));

์–ธ์ œ ์ „์—ญ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€

  • ํŽ˜์ด์ง€๋ฅผ ๋„˜์–ด ๊ณต์œ ๋˜๋Š” ์ƒํƒœ
  • UI ์ „๋ฐ˜์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์„ค์ •๊ฐ’
  • ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์ˆœ์ˆ˜ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด ๊ฐœ์ˆ˜๋‹ค.
์ „์—ญ ์ƒํƒœ๋Š” ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ด€๋ฆฌ ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•œ๋‹ค.


5. ์ƒํƒœ ๋จธ์‹ : ํ๋ฆ„์ด ๋ณต์žกํ•ด์ง€๋Š” ์ˆœ๊ฐ„ ๋“ฑ์žฅํ•œ๋‹ค

๋กœ๊ทธ์ธ, ๊ฒฐ์ œ, ์—…๋กœ๋“œ ๊ฐ™์€ ๋กœ์ง์„ ๋– ์˜ฌ๋ ค๋ณด์ž.

  • ์š”์ฒญ
  • ์„ฑ๊ณต
  • ์‹คํŒจ
  • ์žฌ์‹œ๋„
  • ์ทจ์†Œ

์ด๊ฑธ boolean state ๋ช‡ ๊ฐœ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด
๊ธˆ๋ฐฉ ์ƒํƒœ ์กฐํ•ฉ์ด ํญ๋ฐœํ•œ๋‹ค.

idle → loading → success
        ↓
       error → retry

์ƒํƒœ ๋จธ์‹ ์€ ์ด ํ๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ณ ์ •ํ•œ๋‹ค.

export const loginMachine = createMachine({
  initial: 'idle',
  states: {
    idle: { on: { SUBMIT: 'loading' } },
    loading: {
      invoke: {
        src: fakeLogin,
        onDone: 'success',
        onError: 'error',
      },
    },
    error: { on: { RETRY: 'loading' } },
    success: { type: 'final' },
  },
});

์–ธ์ œ ๊ณ ๋ คํ•  ๋งŒํ•œ๊ฐ€

  • ์ƒํƒœ ์ „์ด๊ฐ€ ๋ช…ํ™•ํ•œ ๋‹จ๊ณ„ํ˜• ๋กœ์ง
  • “์ด ์ƒํƒœ์—์„œ ์ด ํ–‰๋™์€ ๋ถˆ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค”๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

๋ชจ๋“  ๊ณณ์— ์“ธ ํ•„์š”๋Š” ์—†์ง€๋งŒ,
ํ•„์š”ํ•œ ๊ณณ์—์„œ๋Š” ๊ต‰์žฅํžˆ ๊ฐ•๋ ฅํ•˜๋‹ค.


6. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ / ์„œ๋ฒ„ ์•ก์…˜: ์ƒํƒœ๋ฅผ ์—†์• ๋Š” ์„ ํƒ

Next.js App Router ์ดํ›„ ๋“ฑ์žฅํ•œ ๋ฐฉํ–ฅ์„ฑ์€ ๋ถ„๋ช…ํ•˜๋‹ค.

“ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ๋ง์ž.”

์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ ,
ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฒฐ๊ณผ๋งŒ ๋ฐ›๋Š”๋‹ค.

'use server';
export async function addTodo(formData) {
  const title = formData.get('title');
  await db.todo.create({ data: { title } });
}

์–ธ์ œ ์ข‹์€ ์„ ํƒ์ธ๊ฐ€

  • DB ์ ‘๊ทผ, ์ธ์ฆ, ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๋กœ์ง
  • ์„œ๋ฒ„๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…
  • ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ

์ด๊ฑด “๋˜ ๋‹ค๋ฅธ ์ƒํƒœ๊ด€๋ฆฌ”๋ผ๊ธฐ๋ณด๋‹ค
์ƒํƒœ ์ž์ฒด๋ฅผ ์ค„์ด๋Š” ์ ‘๊ทผ์— ๊ฐ€๊น๋‹ค.


7. ํผ ์ƒํƒœ: ์ผ๋ฐ˜ ์ƒํƒœ๊ด€๋ฆฌ๋กœ๋Š” ๋ฒ„๊ฒ๋‹ค

ํผ์€ ํŠน์ดํ•˜๋‹ค.

  • ์ž…๋ ฅ๊ฐ’
  • ์—๋Ÿฌ
  • touched
  • submitting
  • validation

์ด๊ฑธ useState๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ง€์ €๋ถ„ํ•ด์ง„๋‹ค.

const { register, handleSubmit, formState } = useForm();

React Hook Form ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”
ํผ ์ƒํƒœ๋ฅผ ์„ฑ๋Šฅ๊นŒ์ง€ ๊ณ ๋ คํ•ด์„œ ๋ถ„๋ฆฌํ•ด์ค€๋‹ค.

์–ธ์ œ ํ•„์š”ํ•ด์ง€๋Š”๊ฐ€

  • ํ•„๋“œ๊ฐ€ ๋งŽ์€ ํผ
  • ์‹ค์‹œ๊ฐ„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

์ •๋ฆฌ: ์ƒํƒœ๊ด€๋ฆฌ๋Š” ๋„๊ตฌ ์„ ํƒ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค

React ์ƒํƒœ๊ด€๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฒ”์œ„๊ฐ€ ์ž‘์œผ๋ฉด → ์ปดํฌ๋„ŒํŠธ ๋กœ์ปฌ
  • ๊ณต์œ ๋˜์–ด์•ผ ํ•˜๋ฉด → URL ๋˜๋Š” ์ „์—ญ
  • ์„œ๋ฒ„์—์„œ ์™”์œผ๋ฉด → ์„œ๋ฒ„ ์ƒํƒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ํ๋ฆ„์ด ๋ณต์žกํ•˜๋ฉด → ์ƒํƒœ ๋จธ์‹ 
  • ์—†์•จ ์ˆ˜ ์žˆ์œผ๋ฉด → ์„œ๋ฒ„๋กœ ์ด๋™

๋ชจ๋“  ๊ฑธ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋ ค๋Š” ์ˆœ๊ฐ„,
์ƒํƒœ๊ด€๋ฆฌ๋Š” ๋ณต์žกํ•ด์ง„๋‹ค.

์ž˜ ์„ค๊ณ„๋œ React ์•ฑ์€
์ƒํƒœ๊ฐ€ ๋งŽ์€ ์•ฑ์ด ์•„๋‹ˆ๋ผ, ์ƒํƒœ์˜ ์ž๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•œ ์•ฑ์ด๋‹ค.

 

'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ( MSW, Vitest, React Testing Library )  (0) 2026.01.21
FE ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ(FE ์•„ํ‚คํ…์ณ)  (0) 2026.01.20
React ์„ฑ๋Šฅ ์ตœ์ ํ™”  (0) 2026.01.20
CSR / SSR / SSG / ISR ๋ Œ๋”๋ง ๋ฐฉ์‹ ๋น„๊ต  (1) 2026.01.17
Next.js 16 + Turbopack + pnpm ๋ชจ๋…ธ๋ ˆํฌ: Docker ๋นŒ๋“œ ์™„์ „ ์ •๋ณต  (0) 2026.01.17
'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ( MSW, Vitest, React Testing Library )
  • FE ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ(FE ์•„ํ‚คํ…์ณ)
  • React ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • CSR / SSR / SSG / ISR ๋ Œ๋”๋ง ๋ฐฉ์‹ ๋น„๊ต
์—ฐ์žŽ(lotus leaf)
์—ฐ์žŽ(lotus leaf)
  • ์—ฐ์žŽ(lotus leaf)
    lotus' s develog ๐Ÿƒ
    ์—ฐ์žŽ(lotus leaf)
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (79)
      • โœ๏ธ ๊ฐœ๋ฐœํšŒ๊ณ ๋ก (5)
      • ๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (3)
      • ๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE) (19)
        • HTML (0)
        • CSS (0)
        • Javascript (0)
        • React (0)
        • Next.js (0)
        • webpack & babel (0)
      • ๐Ÿ’ป ๋ฐฑ์—”๋“œ(BE) (2)
        • Nest.js (0)
        • Express.js (0)
        • MySQL (1)
      • โš™๏ธ ์ธํ”„๋ผ(Devops) (2)
      • ๐Ÿค– AI (1)
      • ๐ŸŒ WEB (8)
      • ๐Ÿ’ป CS (16)
        • ์ž๋ฃŒ๊ตฌ์กฐ (0)
        • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (1)
        • ์šด์˜์ฒด์ œ (0)
        • ์ธ๊ณต์ง€๋Šฅ (8)
        • ์›น ๋ณด์•ˆ (1)
        • ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… (6)
      • ๐Ÿ–‹๏ธ DevLog (1)
      • ๐Ÿฆพ ๋กœ๋ณดํ‹ฑ์Šค (4)
      • ๐Ÿ“— ๋„ค์ด๋ฒ„๋ถ€์ŠคํŠธ์บ ํ”„ ์›น ๋ชจ๋ฐ”์ผ (0)
      • ๐ŸŽฎ Unity(C#) (10)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (4)
        • C (4)
        • C++ (0)
        • Java (0)
        • Python (0)
      • MSA (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    C#
    ํŒŒ์ผํŠธ๋ฆฌ
    C
    ์ˆœ์—ด
    ros bridge
    c++
    c์–ธ์–ด
    advaned detail
    turtlebot
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    next.js12
    ์กฐํ•ฉ
    Devops #๋Œ€๊ทœ๋ชจํŠธ๋ž˜ํ”ฝ์ฒ˜๋ฆฌ
    ์ฝ”๋”ํŒจ๋“œ
    ros workspace
    ๋ฆฌ์•กํŠธ
    ์ŠคํŒธ๋ถ„๋ฅ˜๊ธฐ
    hard margin svm
    ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต #๋„์ „ํ•™๊ธฐ์ œ
    isaac automator
    auto-scaling
    client-streaming
    gaussian rbf svm
    nav2
    ๋ฐฑ์ค€
    ๊ธฐ์ดˆ์•Œ๊ณ ๋ฆฌ์ฆ˜
    AWS
    ์ŠคํŒธ๋ฉ”์ผ๋ถ„๋ฅ˜๊ธฐ
    soft margin svm
    deploy-aws
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์—ฐ์žŽ(lotus leaf)
React ์ƒํƒœ๊ด€๋ฆฌ ( ์ง€์—ญ, ์ „์—ญ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ )
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”