All Development
Featured · Development/ 2026

BizSim

BizSim — 경영학 이론 기반 심화 시뮬레이션

A 6-quarter business simulation where Porter, BCG, Ansoff, Wright's Law, M/M/1 queueing, EOQ, CLV, Adstock and Korean tax law are all wired in as actual game levers — not flavor text. 166 tests, fully local LLM (no external API).

스마트홈 가전 시장에서 6분기 동안 제품·마케팅·R&D·재무·인력 결정을 내리는 경영 시뮬. Porter/BCG/Ansoff/Wright/M·M·1/EOQ/CLV/Adstock + 한국 상법·세법이 게임 레버로 직접 동작. 166개 테스트, 외부 API 의존 0 (로컬 Ollama).

Next.js 15TypeScriptZustandRechartsOllama

Problem

/ 문제

Business simulations usually treat MBA frameworks as decoration — Porter's Five Forces shows up as a label on a results screen, not as something the player has to actually optimize against. BizSim was built to invert that: every framework taught in a business school course (Porter, BCG, Ansoff, Wright's Law, M/M/1, EOQ, CLV, Adstock, STP, Bullwhip) had to be a working game lever, with a Korean-law-compliant financial system underneath that turns six quarters of decisions into a real three-statement story.

경영 시뮬레이션은 보통 MBA 프레임워크를 장식처럼 다룬다 — Porter Five Forces가 결과 화면의 라벨로만 등장하지, 플레이어가 실제로 최적화 대상으로 삼아야 하는 레버는 아니다. BizSim은 그걸 뒤집기 위해 만들었다. 경영학 과목에서 가르치는 모든 프레임워크(Porter, BCG, Ansoff, Wright, M/M/1, EOQ, CLV, Adstock, STP, Bullwhip)가 동작하는 게임 레버여야 했고, 그 아래에는 한국 상법·세법을 따르는 재무 시스템이 있어 6분기 결정을 진짜 3종 재무제표 이야기로 바꿔야 했다.

Architecture

/ 아키텍처
BizSim architecture diagram

Key Decisions

/ 핵심 결정

One framework, one module — every theory is independently testable

프레임워크 하나당 모듈 하나 — 모든 이론은 독립적으로 테스트 가능

Each theory lives in its own file: porter-style competitor logic in competitor-ai.ts, BCG matrix in bcg.ts, Wright's 80% learning curve in learning-curve.ts, Harris EOQ in eoq.ts, M/M/1 queueing in service-queue.ts, Adstock carryover in adstock.ts, and so on. The 1:1 mapping means each module can be unit-tested in isolation against its textbook formula, and 166 Vitest tests guard the invariants. Adding a new framework is a new file, not a refactor.

각 이론은 자기 파일을 갖는다 — Porter 스타일 경쟁사 로직은 competitor-ai.ts, BCG 매트릭스는 bcg.ts, Wright 80% 학습곡선은 learning-curve.ts, Harris EOQ는 eoq.ts, M/M/1 큐잉은 service-queue.ts, Adstock carryover는 adstock.ts. 1:1 매핑이라 각 모듈을 교과서 공식에 맞춰 단독 unit-test할 수 있고, 166개 Vitest 테스트가 invariant를 지킨다. 새 프레임워크 추가는 새 파일 추가지 리팩토링이 아니다.

Symmetric competitor AI, not scripted behavior

대칭적 경쟁사 AI, 스크립트 행동 아님

Most strategy games script the AI opponent — fixed behavior trees that can be exploited once you learn them. BizSim's competitor uses the same levers the player uses (R&D stamina, ad acceleration when the player hits Star quadrant, supply chain co-movement). That symmetry is what makes the Porter and BCG frameworks meaningful: the player's strategic position only matters because there is a competitor responding to it. Star quadrant pressure is real, not flavor text.

대부분의 전략 게임은 AI 상대를 스크립트로 짠다 — 패턴을 알면 깨지는 고정 행동 트리. BizSim의 경쟁사는 플레이어와 같은 레버를 쓴다 (R&D 스태미나, 플레이어가 Star 분면 진입 시 광고 가속, 공급망 동조). 이 대칭성이 Porter와 BCG 프레임워크에 의미를 부여한다 — 플레이어의 전략적 포지션이 의미 있는 이유는 거기에 반응하는 경쟁사가 있기 때문이다. Star 분면 압박은 진짜다, 라벨이 아니라.

Integrated three-statement system with Korean tax law

한국 세법을 반영한 3종 재무제표 통합

P&L, balance sheet, and cash flow are not three independent panels — they flow into each other through financial-mapper.ts. tax.ts handles current cash tax, deferred tax, R&D tax credits, and loss carryforward as actual quarter-over-quarter state. Korean Commercial Act §462 (distributable profit cap on dividends) is enforced automatically — the player cannot pay a dividend the system would not legally allow. This means a six-quarter game produces a real corporate story, not three disconnected scoreboards.

손익·재무상태·현금흐름은 독립적인 3개 패널이 아니다 — financial-mapper.ts를 통해 서로 흐른다. tax.ts는 당기 cash tax, 이연법인세, R&D 세액공제, 이월결손금을 분기 단위 실제 state로 다룬다. 상법 §462(배당가능이익 한도)는 자동으로 강제된다 — 시스템이 법적으로 허용하지 않을 배당은 플레이어가 지급할 수 없다. 6분기 게임이 진짜 법인 이야기가 되는 이유다, 분리된 점수판 3개가 아니라.

Local Ollama only — no external LLM API

로컬 Ollama만 사용 — 외부 LLM API 0

Consumer interviews (persona dialog) and round-end debriefs run on a local Ollama model (gemma4-ko:26b-q8). The trade-off is real: external APIs would be cleaner and a bit smarter on edge cases. But local-only means no API key, no per-run cost, no rate limit, no data leaving the machine, and the same simulation runs in five years even if every external provider has changed. For a learning tool that should still work offline on a flight, that trade is worth it.

소비자 인터뷰(페르소나 대화)와 라운드 종료 디브리프는 로컬 Ollama 모델(gemma4-ko:26b-q8)로 돌린다. 트레이드오프는 분명하다 — 외부 API가 더 깔끔하고 엣지 케이스에 좀 더 똑똑할 것이다. 하지만 로컬 전용은 API 키 없음, 실행당 비용 없음, rate limit 없음, 데이터가 기기를 벗어나지 않음, 그리고 5년 뒤 외부 공급자가 다 바뀌어도 같은 시뮬이 그대로 돈다. 비행기에서도 오프라인으로 돌아야 하는 학습 도구로서는 가치 있는 거래다.

Outcome

/ 결과

Six quarters of product, marketing, R&D, finance, and HR decisions produce a complete three-statement financial story plus framework dashboards (BCG matrix, Porter forces, STP positioning, EOQ batch suggestions). 18+ theory modules sit behind the engine, each unit-tested. The whole thing runs locally — Next.js 15 + TypeScript + Zustand + Recharts on the front, Ollama on the LLM side, zero external dependencies. 166 Vitest tests keep the simulation invariants stable as new mechanics are added.

6분기에 걸친 제품·마케팅·R&D·재무·인력 결정이 완전한 3종 재무제표 스토리와 프레임워크 대시보드(BCG 매트릭스, Porter forces, STP 포지셔닝, EOQ 배치 권장)를 만든다. 18+ 이론 모듈이 엔진 뒤에 있고 각각 unit-test된다. 전체가 로컬에서 돈다 — 프론트는 Next.js 15 + TypeScript + Zustand + Recharts, LLM은 Ollama, 외부 의존성 0. 166개 Vitest 테스트가 새 메커니즘이 추가돼도 시뮬레이션 invariant를 안정적으로 지킨다.