FE ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ(FE ์•„ํ‚คํ…์ณ)

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

1. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ• ๊นŒ?

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

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ• ์ˆ˜๋ก ๋” ์ค‘์š”.


2. "๋‚˜๋ˆˆ๋‹ค"๋Š” ๊ฑด ๋ฌด์—‡์„ ๊ธฐ์ค€์œผ๋กœ?

  • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฐœ๋…์€ ๊ฒฐ๊ตญ ๋ชจ๋“ˆํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ.
  • ESM๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ๋ถ€์กฑํ–ˆ๋˜ ์‹œ์ ˆ์—๋Š”?
    • ์ „์—ญ ๊ฐ์ฒด(namespace)๋ฅผ ์ด์šฉํ•ด ๊ณ„์ธต์„ ํ‰๋‚ด๋‚ด๊ธฐ๋„ ํ•จ.

๊ณผ๊ฑฐ ๋ฐฉ์‹: Namespace ํŒจํ„ด (ESM ์ด์ „)

(์™€ ์ „์—ญ๋ณ€์ˆ˜ ํ•˜๋‚˜๋ผ๋‹ˆ...)

const naver = {}
naver.auth = {}
naver.auth.login = function() {}
naver.store = {}
naver.store.product = {}
naver.store.product.list = function() {}

ํ˜„์žฌ ๋ฐฉ์‹: ESM (ES Modules) ๊ธฐ๋ฐ˜ ๊ตฌ์กฐํ™”

  • ESM ๋•๋ถ„์— React๋ฅผ ๋น„๋กฏํ•œ SPA ๊ตฌ์กฐ์—์„œ ํŒŒ์ผ ๋‹จ์œ„ ๋ชจ๋“ˆํ™” → ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐํ™” → ๋ช…ํ™•ํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง

→ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ค๋Š˜๋‚  ์šฐ๋ฆฌ๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‹ ๊ฒฝ ์“ฐ๋Š” ์ด์œ ๋Š”,
๋ชจ๋“ˆ ์‹œ์Šคํ…œ(ESM)์ด ์ฝ”๋“œ๋ฅผ ์—ญํ• /๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ

  • "๋‚˜๋ˆˆ๋‹ค"๋Š” ๊ฑด ์—ญํ• , ๊ธฐ๋Šฅ, ์ฑ…์ž„์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค๋Š” ๋œป.
  • ESM ๊ตฌ์กฐ๋ผ๋ฉด?
src/
โ”œโ”€โ”€ auth/
โ”‚   โ””โ”€โ”€ login.ts
โ”œโ”€โ”€ store/
โ”‚   โ””โ”€โ”€ product/
โ”‚       โ””โ”€โ”€ list.ts

์ด๋ ‡๊ฒŒ ๊ตฌ์กฐํ™”๋œ ์ฝ”๋“œ๋Š” ํƒ์ƒ‰์ด ์‰ฝ๊ณ , ์˜๋„ ํŒŒ์•…๋„ ๋น ๋ฅด๋‹ค.


3. ์ฃผ์š” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ํŒจํ„ด ๋น„๊ต

3.1 Atomic Design ๊ตฌ์กฐ


https://atomicdesign.bradfrost.com/chapter-2/

'ํ™”ํ•™ ๊ฐœ๋…์„ UI์— ์‘์šฉํ•ด‘์ž‘๊ฒŒ ์ชผ๊ฐœ์„œ ์กฐ๋ฆฝํ•˜์ž' by Brad Frost.

src/
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ atoms/
โ”‚   โ”œโ”€โ”€ molecules/
โ”‚   โ”œโ”€โ”€ organisms/
โ”‚   โ””โ”€โ”€ templates/
  • UI ๋ณต์žก๋„ ๊ธฐ์ค€์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณ„์ธตํ™”
  • ๋””์ž์ธ ์‹œ์Šคํ…œ ์ค‘์‹ฌ์˜ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ

Atomic์˜ ๊ตฌ์„ฑ ์˜๋ฏธ

  • Atoms(์›์ž): ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ UI ์š”์†Œ
    • Button, Input ๋“ฑ
  • Molecules(๋ถ„์ž): ๊ฐ„๋‹จํ•œ ์š”์†Œ๋“ค์˜ ์กฐํ•ฉ
    • SearchForm ๋“ฑ
  • Organisms(์œ ๊ธฐ์ฒด): ์˜๋ฏธ ์žˆ๋Š” ์„น์…˜ ๋‹จ์œ„ UI
    • Header, ProductList ๋“ฑ
    • ์ปค์ง€๊ธฐ ์‰ฌ์›€. ๋‹ค์‹œ ๋ถ„ํ•ด.
  • Templates: ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ
    • Sidebar + Header + Content ์˜์—ญ
    • ๊ตฌ์กฐ๋งŒ ๋‹ด๋‹นํ•˜์ž.. Pages๋ž‘ ๊ตฌ๋ถ„์ž˜ํ•ด์•ผํ•จ
  • Pages: ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•œ ์™„์ „ํ•œ ํŽ˜์ด์ง€
    • ๋ณดํ†ต API๊ฐ€ ๋“ค์–ด๊ฐใ„ท

์žฅ์ : ์‹œ๊ฐ์ ์œผ๋กœ ๋ช…ํ™•, ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ ๊ตฌ์กฐ์— ์ข‹์Œ
๋‹จ์ : ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ์ค‘์‹ฌ ์„ค๊ณ„์™€๋Š” ๋‹ค์†Œ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ์Œ

warning

  • ์—ญ์ฐธ์กฐ ๊ธˆ์ง€
  • ๊ณผ๋„ํ•œ ๋ถ„ํ•ด ์˜์‹ฌ
  • ๋„๋ฉ”์ธ ๊ตฌ์กฐ๋ฅผ ๋ฏน์Šค ํ•  ์ˆ˜๋„ ์žˆ์Œ.
  • ๋‚˜๋ˆ„๋Š”๊ฒƒ์ด ๋ชฉํ‘œ๋Š” ์•„๋‹ˆ๋‹ค.
  • ์œ ์—ฐํ•œ ์ ์šฉ์ด ์ค‘์š”

3.2. Layered Architecture ๊ตฌ์กฐ (๊ณ„์ธตํ˜•)

src/
โ”œโ”€โ”€ components/
โ”œโ”€โ”€ pages/
โ”œโ”€โ”€ services/
โ”œโ”€โ”€ hooks/
โ”œโ”€โ”€ utils/
  • ์—ญํ• ๋ณ„๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฐ€์žฅ ๋ฌด๋‚œํ•œ ๋ฐฉ์‹์ด๋‹ค.

์žฅ์ : ์ง๊ด€์ , ์ต์ˆ™ํ•จ
๋‹จ์ : ๊ธฐ๋Šฅ์ด ํฉ์–ด์ ธ ์žˆ์–ด ์‘์ง‘๋„ ๋‚ฎ์Œ, ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€


3.3 Layered + Atomic ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ atoms/
โ”‚   โ”œโ”€โ”€ molecules/
โ”œโ”€โ”€ pages/
โ”œโ”€โ”€ services/
  • LA ๊ตฌ์กฐ์— Atomic์„ ๊ฒฐํ•ฉ → UI๋Š” Atomic ๋ฐฉ์‹์œผ๋กœ, ๋‚˜๋จธ์ง€๋Š” ์—ญํ•  ์ค‘์‹ฌ์œผ๋กœ ๋ถ„๋ฆฌ

์žฅ์ : ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ์•ฑ ๊ตฌ์กฐ ๊ณต์กด ๊ฐ€๋Šฅ
๋‹จ์ : ๋ณต์žกํ•œ ๊ตฌ์กฐ์—์„œ๋Š” ๊ฒฝ๊ณ„๊ฐ€ ์• ๋งคํ•ด์งˆ ์ˆ˜ ์žˆ์Œ


3.4 Layered + Colocation ๊ตฌ์กฐ

  • ์—ญํ•  ๋‹จ์œ„๋กœ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋‚ด๋ถ€๋Š” ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ธ์ ‘ ๋ฐฐ์น˜
src/
โ”œโ”€โ”€ components/
โ”‚   โ””โ”€โ”€ ProductCard/
โ”‚       โ”œโ”€โ”€ ProductCard.tsx
โ”‚       โ”œโ”€โ”€ ProductCard.module.css
โ”‚       โ””โ”€โ”€ ProductCard.test.tsx

์žฅ์ : ์œ ์ง€๋ณด์ˆ˜ ํŽธํ•จ, ์ฝ”๋“œ ์ง‘์ค‘๋„ ๋†’์Œ
๋‹จ์ : ์ผ๊ด€์„ฑ ์—†์ด ์„ž์ด๋ฉด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ


4. Feature-Sliced Design (FSD) ๊ตฌ์กฐ

FSD๋Š” ๊ธฐ๋Šฅ ์ค‘์‹ฌ์œผ๋กœ ๋ถ„๋ฆฌ๋˜๋ฉด์„œ๋„ ๊ฐ ๊ณ„์ธต์˜ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋‰˜๋Š” ๊ตฌ์กฐ.

๋„๋ฉ”์ธ, ๊ธฐ๋Šฅ, ํ‘œํ˜„์„ ์ ์ ˆํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ˜‘์—… ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

src/
โ”œโ”€โ”€ app/
โ”œโ”€โ”€ entities/
โ”œโ”€โ”€ features/
โ”œโ”€โ”€ shared/
โ”œโ”€โ”€ widgets/
โ”œโ”€โ”€ pages/
  • app: ์•ฑ์˜ ์ง„์ž…์ ๊ณผ ์ „์—ญ ์„ค์ •์„ ๋‹ด๋‹น.
    • ์˜ˆ: App.tsx, store.ts, ๋ผ์šฐํ„ฐ ์„ค์ • ๋“ฑ.
    • ์ „์—ญ ํ”„๋กœ๋ฐ”์ด๋”, ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ, ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋กœ์ง ๋“ฑ
  • entities: ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๋‹จ์œ„. ์ƒํƒœ, ๋ชจ๋ธ, UI ๋ถ„๋ฆฌ.
  • features: ์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ ๋‹จ์œ„. ์•ก์…˜ ์ค‘์‹ฌ.
  • shared: ๋ฒ”์šฉ UI ๋ฐ ๋„๊ตฌ.
  • widgets: ์—ฌ๋Ÿฌ feature์™€ entity๋ฅผ ์กฐํ•ฉํ•œ UI ๋ธ”๋ก.
  • pages: ๋ผ์šฐํŠธ ๋‹จ์œ„ ํ™”๋ฉด.

์žฅ์ : ์—ญํ•  + ๊ธฐ๋Šฅ + ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•, ๋Œ€๊ทœ๋ชจ ์•ฑ์— ์ ํ•ฉ

๋‹จ์ : ๋Ÿฌ๋‹์ปค๋ธŒ ์žˆ์Œ, ์ดˆ๊ธฐ ๋„์ž… ์ง„์ž…์žฅ๋ฒฝ ์กด์žฌ. ํ˜ธ๋ฏธ๋กœ ์“ธ๊ฑด ํ˜ธ๋ฏธ๋กœ ์“ฐ์ž..


5. FSD ์ ์šฉ ์˜ˆ์‹œ

5.1 ์นด์šดํ„ฐ ์•ฑ

src/
โ”œโ”€โ”€ entities/Counter/
โ”‚   โ”œโ”€โ”€ model/store.ts
โ”‚   โ””โ”€โ”€ ui/CounterDisplay.tsx
โ”œโ”€โ”€ features/counterControl/
โ”‚   โ””โ”€โ”€ ui/CounterControls.tsx
โ”œโ”€โ”€ widgets/CounterBox/
โ”‚   โ””โ”€โ”€ CounterBox.tsx
  • ์ƒํƒœ ๊ด€๋ฆฌ (store.ts)๋Š” entity์— ์œ„์น˜
  • +, - ๋ฒ„ํŠผ์€ feature์—์„œ ๊ธฐ๋Šฅ ๋‹ด๋‹น
  • ์ „์ฒด ๋ฐ•์Šค๋Š” widget์—์„œ ์กฐ๋ฆฝ
์นด์šดํ„ฐ ์•ฑ ์˜ˆ์‹œ์ฝ”๋“œ.

entities/Counter/model/store.ts

  • Store(state)์— ์ง‘์ค‘. ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Œ.
import { useState } from 'react'

export function useCounterStore() {
  const [count, setCount] = useState(0)
  const increment = () => setCount((c) => c + 1)
  const decrement = () => setCount((c) => c - 1)
  return { count, increment, decrement }
}

entities/Counter/ui/CounterDisplay.tsx

import React from 'react'

export const CounterDisplay = ({ count }: { count: number }) => {
  return <h1>ํ˜„์žฌ ์นด์šดํŠธ: {count}</h1>
}

features/counterControl/ui/CounterControls.tsx

import React from 'react'

export const CounterControls = ({
  onIncrement,
  onDecrement,
}: {
  onIncrement: () => void
  onDecrement: () => void
}) => {
  return (
    <div>
      <button onClick={onDecrement}>-</button>
      <button onClick={onIncrement}>+</button>
    </div>
  )
}

widgets/CounterBox/CounterBox.tsx

import { useCounterStore } from '@/entities/Counter/model/store'
import { CounterDisplay } from '@/entities/Counter/ui/CounterDisplay'
import { CounterControls } from '@/features/counterControl/ui/CounterControls'

export const CounterBox = () => {
  const { count, increment, decrement } = useCounterStore()

  return (
    <div>
      <CounterDisplay count={count} />
      <CounterControls onIncrement={increment} onDecrement={decrement} />
    </div>
  )
}
 

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

Next.js ์‹œ์ž‘ํ•˜๊ธฐ  (1) 2026.01.22
ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ( MSW, Vitest, React Testing Library )  (0) 2026.01.21
React ์ƒํƒœ๊ด€๋ฆฌ ( ์ง€์—ญ, ์ „์—ญ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ )  (0) 2026.01.20
React ์„ฑ๋Šฅ ์ตœ์ ํ™”  (0) 2026.01.20
CSR / SSR / SSG / ISR ๋ Œ๋”๋ง ๋ฐฉ์‹ ๋น„๊ต  (1) 2026.01.17
'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Next.js ์‹œ์ž‘ํ•˜๊ธฐ
  • ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ( MSW, Vitest, React Testing Library )
  • React ์ƒํƒœ๊ด€๋ฆฌ ( ์ง€์—ญ, ์ „์—ญ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ )
  • React ์„ฑ๋Šฅ ์ตœ์ ํ™”
์—ฐ์žŽ(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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์—ฐ์žŽ(lotus leaf)
FE ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ(FE ์•„ํ‚คํ…์ณ)
์ƒ๋‹จ์œผ๋กœ

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