English ยท ํ๊ตญ์ด
์์ค ์ฝ๋๋ฅผ ํด๋์ค:๋ฉ์๋ ๋จ์๋ก ๋ถ์ํ๊ณ git blame์ ํจ๊ป ๋ฌถ์ด ๋ก์ปฌ SQLite์ ํํ ์คํธ + ๊ทธ๋ํ ์ธ๋ฑ์ค๋ก ์ ์ฅํ ๋ค, CLI / TUI / ๋ก์ปฌ ์น GUI ์ธ ๊ฐ์ง ์ธํฐํ์ด์ค๋ก ํ์ํ๊ฒ ํด ์ฃผ๋ ๋น ๋ฅธ ์ฝ๋ ์ค์บ๋ & ์ธ๋ฑ์์ ๋๋ค.
.NET 10.0 ๊ธฐ๋ฐ Native AOT ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ๋น๋๋ฉ๋๋ค.
- ๋ค๊ตญ์ด ๋ถ์ โ ์ผ๋ฐ์ ์ธ ์์ค ์ธ์ด์์ ํด๋์ค, ๋ฉ์๋, ์ฃผ์, ์์กด์ฑ ํํธ๋ฅผ ์ถ์ถ
- Git blame ํตํฉ โ ๊ฐ ๋ฉ์๋๋ฅผ ์ต์ข ์์ฑ์, ์์ฑ์ผ, ์ปค๋ฐ๊ณผ ์ฐ๊ฒฐ
- ํํ ์คํธ ๊ฒ์ โ Trigram ํ ํฌ๋์ด์ ๊ธฐ๋ฐ FTS5๋ก ๋ถ๋ถ ๋ฌธ์์ด ๋ฐ CJK(ํยท์คยท์ผ) ์ธ์ด ์ง์
- ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ โ ์ธ๋ฑ์ฑ๋ DB ๊ฒ์๊ณผ ๋ผ์ด๋ธ
git log --grep๊ฒฐ๊ณผ๋ฅผ ํจ๊ป ํ์ - ๊ทธ๋ํ ๊ฒ์ โ Neo4j ์คํ์ผ์ ์์ค ์ง์ ๊ทธ๋ํ๋ฅผ ์๋ฒ ๋๋ SQLite์ ์ ์ฅ
- Cypher-like ๊ทธ๋ํ ์ง์ โ ๊ตฌ์กฐํ๋ ๊ทธ๋ํ ์กฐํ๋ฅผ ์ํ ์์ ํ
MATCH ... WHERE ... LIMIT ...์๋ธ์ - ํ์ด๋ธ๋ฆฌ๋ ์์กด์ฑ ๊ทธ๋ํ โ ์ ๊ท์ ๊ธฐ๋ฐ ์์กด์ฑ ์ฃ์ง๋ฅผ 1์ฐจ๋ก ์์ฑํ๊ณ , ํฅํ ์๋ฏธ ๋ถ์์ ์ํ ์ธ์ด/ํ๋ก์ ํธ ๋ฉํ ํ๋ก๋ธ ํฌํจ
- ์ธํฐ๋ํฐ๋ธ TUI โ Terminal.Gui v2 ๊ธฐ๋ฐ์ผ๋ก ํ์, ์ค์บ, ํค์๋ ๊ฒ์, ๊ทธ๋ํ ๊ฒ์, ๊ทธ๋ํ ์ง์ ๊ฐ๋ฅ
- ๋ก์ปฌ ์น GUI โ ํค์๋ ๊ฒ์, ๊ทธ๋ํ ๊ฒ์/์ง์, 2D ๊ทธ๋ํ ํ์, ์นด๋ฉ๋ผ ์ ์ด ๊ฐ๋ฅํ 3D ๋ทฐ. ๊ธฐ๋ณธ ํฌํธ 8085
- ํ๋ก์ ํธ ๊ด๋ฆฌ โ ์ธ๋ฑ์ฑ๋ ํ๋ก์ ํธ์ ๋ฑ๋ก, ์ค๋ช , ๊ฐฑ์ , ์ญ์
- ๋จ์ผ ๋ฐ์ด๋๋ฆฌ โ Native AOT ์ปดํ์ผ, ๋ฐํ์ ์์กด์ฑ ๋ถํ์
๋ก์ปฌ GUI๋ ํค์๋ ๊ฒ์, ๊ทธ๋ํ ๊ฒ์, ๋ ธ๋/์ฃ์ง ๋ํ ์ผ ์กฐํ, 2D ๊ทธ๋ํ ์ปจํธ๋กค, ์นด๋ฉ๋ผ ์ ์ดํ 3D ๊ทธ๋ํ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
TUI์์ ํ๋ก์ ํธ ํ์, ์ค์บ, ํ๋ก์ ํธ ๊ด๋ฆฌ, ํค์๋ ๊ฒ์, ๊ทธ๋ํ ๊ฒ์์ ํฐ๋ฏธ๋๋ง์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋ ์ธํฐํ์ด์ค์์ ๋ฉ์๋/์ฃผ์ ์ถ์ถ, git blame ๋ณด๊ฐ, DB ๊ทธ๋ํ ์ธ๋ฑ์ฑ์ ํฌํจํ ์ค์บ์ ๋ฐ๋ก ์คํํ ์ ์์ต๋๋ค.
Claude๋ Codex๋ฅผ ์์ ๋กญ๊ฒ ์ฐ์ง ๋ชปํ๋ ์ํฉ์ด ๋ถ๋ช ํ ์กด์ฌํฉ๋๋ค โ ํ์๋ง, ๋ณด์์ด ๊ฐํ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ ์์ฃผ ๋ฐ์ํ๋ ํต์ฌ AI ๋ฒค๋์ ์ฅ์ . ๊ทธ๋ฌํ ์ํฉ์์๋ CodeScan์ ์ฝ๋ ๋ถ์ ํ๋์ ๋ฉ์ถ์ง ์์ ์ ์์ต๋๋ค. TUI ChatMode๋ Gemma 4 ๋ชจ๋ธ์ ์์ ํ ์จ๋๋ฐ์ด์ค + CPU ์ ์ฉ์ผ๋ก ๊ตฌ๋ํ๋ฉด์ CodeScan์ SQLite ์ธ๋ฑ์ค์ JSON ํด์ฝ ๋ฃจํ๋ฅผ ๋๋ฆฝ๋๋ค. CPU๊ฐ ์๋ํ๋ค๋ฉด, ๋น์ ์ ์ฝ๋๋ฒ ์ด์ค์ ๊ณ์ ์ง๋ฌธํ ์ ์์ต๋๋ค.
- ์คํ๋ผ์ธ ์ค๊ณ โ ๋คํธ์ํฌ ํธ์ถ ์์. ๋ชจ๋ธ GGUF๋
~/.codescan/models/์ ๋๊ณ , ์์ด์ ํธ ๋ฃจํ๋ ๋ก์ปฌ ์ธ๋ฑ์ค์ ๋ก์ปฌ ํ์ผ์์คํ ์๋ง ์ ๊ทผํฉ๋๋ค. - CPU ์ ์ฉ, ๋ฉํฐ OS โ Native AOT ๊ทธ๋๋ก ์ ์ง. GPU / ๋๋ผ์ด๋ฒ / ๋ฒค๋ SDK ๋ชจ๋ ๋ถํ์.
- ํด ์ฌ์ฉ ์์ด์ ํธ โ Gemma๋ ๋งค ํด GBNF ์ ์ฝ JSON์ ๋ฐํํฉ๋๋ค (
db_search/read_file/grep_file/list_projects/project_info/graph_query/done). ๋ชจ๋ธ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ถ์ธกํ์ง ์๊ณ ์ค์ ๋ก ๋ค์ฌ๋ค๋ด ๋๋ค. - ํฌ๋ ์ ์ธ์
๋ก๊ทธ โ ๋ชจ๋ ์ฑํ
์ธ์
์ด
~/.codescan/logs/chat-YYYYMMDD_HHmmss.log์ raw ๋ชจ๋ธ ์ถ๋ ฅ๊น์ง ๊ธฐ๋ก๋ผ ์ถํ ๋ถ์ ๊ฐ๋ฅํฉ๋๋ค.
ํ์ฌ ์ํ: ์ด ํ๋ฉด์ ์จ๋๋ฐ์ด์ค SLM ํ๋ฆ์ ๋ง์ถฐ ์ ๊ทน์ ์ผ๋ก ์งํ ์ค์ ๋๋ค (ํ๋จ Why AOT? โ Edge AI ํธ๋ ๋์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ์ ๊ฐ์น ์ฐธ์กฐ). ์ค์ ์ธ์ ์์ ์ป๋ ํ์ต์ ๋ฐ๋ผ ๋์๊ณผ ํด ์นดํ๋ก๊ทธ๊ฐ ๋ฐ๋ ์ ์์ต๋๋ค.
| ์ธ์ด | ํ์ฅ์ | ํด๋์ค/ํ์ ์ธ์ | ๋ฉ์๋ ์ธ์ | ์์กด์ฑ ํํธ |
|---|---|---|---|---|
| C# | .cs |
class / struct / record / interface | ์ ๊ทผ์ + ๋ฐํํ + ์ด๋ฆ | using, ์์/์ธํฐํ์ด์ค, new, ํ์
์ฌ์ฉ |
| Java | .java |
class / interface / enum | ์ ๊ทผ์ + ๋ฐํํ + ์ด๋ฆ | import, extends/implements, new, ํ์
์ฌ์ฉ |
| Kotlin | .kt, .kts |
class / object / data class / sealed class | fun / suspend fun | import, ๊ธฐ๋ฐ ํ์ , ์์ฑ์/ํ์ ์ฌ์ฉ |
| JavaScript | .js, .jsx |
class | function / arrow / const / export | import, extends/implements ๋ฅ ํํธ, new, ํ์
์ ์ฌ ์ฌ์ฉ |
| TypeScript | .ts, .tsx |
class | function / arrow / const / export | import, extends/implements, new, ํ์
์ด๋
ธํ
์ด์
|
| PHP | .php |
class / interface / trait | function | use, extends/implements, new, ํ์
ํํธ |
| Python | .py |
class (๋ค์ฌ์ฐ๊ธฐ ๊ธฐ๋ฐ) | def / async def (๋ค์ฌ์ฐ๊ธฐ ๊ธฐ๋ฐ) | import, ๋ฒ ์ด์ค ํด๋์ค, ์์ฑ์ ์ ์ฌ ํธ์ถ |
| Go | .go |
type struct/interface | ๊ทธ๋ํ ์์กด์ฑ ์ค์บ๋ง | import, ์์ฑ์/ํ์ ์ฌ์ฉ |
| Rust | .rs |
struct / enum / trait | ๊ทธ๋ํ ์์กด์ฑ ์ค์บ๋ง | use, ์ฐ๊ด ์์ฑ์/ํ์ ์ฌ์ฉ |
| C/C++ | .c, .cc, .cpp, .cxx, .h, .hpp, .hh, .hxx |
class / struct | ๊ทธ๋ํ ์์กด์ฑ ์ค์บ๋ง | include, ์์, new, ํ์
์ฌ์ฉ |
ํ๋์ ๋ฆด๋ฆฌ์ฆ ํ์ดํ๋ผ์ธ โ ๋ค ๊ฐ์ ๋ค์ดํฐ๋ธ ๋ฐ์ด๋๋ฆฌ โ ์ธ ๊ฐ์ ํจํค์ง ์ฑ๋. GitHub Actions release.yml
| OS | ์ํคํ ์ฒ | ์ฃผ ๋ช ๋ น | ๋์ฒด |
|---|---|---|---|
| Windows | x64 | winget install psmon.CodeScan |
npm install -g @webnori/codescan-cli (Node ์ด๋ฏธ ์์ ๋) |
| macOS | arm64 (Apple Silicon) | brew install psmon/codescan/codescan |
โ |
| Linux | x64 / arm64 | npm install -g @webnori/codescan-cli |
โ |
โ ์ค์: ๋ฐ๋์ ์ค์ฝํ ๋ถ์
@webnori/codescan-cli๋ก ์ค์นํ์ธ์. ์ฐ๋ฆฌ๊ฐ publishํ๊ธฐ ์ ์ ๋ฌด๊ดํ ์ 3์๊ฐ npm์์ ์งง์ ์ด๋ฆcodescan-cli๋ฅผ ์ ์ ํด ๋์์ต๋๋ค. ๊ทธ ํจํค์ง๋ ESM/CJS ์ถฉ๋ ๋ฒ๊ทธ๊ฐ ์์ดcodescan์คํ ์ฆ์ ์ฃฝ์ผ๋ฉฐ CodeScan๊ณผ๋ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค. ์๋ชป ์ค์นํ๋ค๋ฉด ๋จผ์ npm uninstall -g codescan-cli๋ก ์ ๊ฑฐํ๊ณ ์์@webnori/codescan-cli๋ฅผ ์ค์นํ์ธ์.
์ค์น ํ ํ์ธ:
codescan --version # codescan v0.5.0 (๋๋ ๊ทธ ์ด์) ์ถ๋ ฅ
codescan --help์ฑ๋ ์ํ (v1) GitHub Release ํ์ดํ๋ผ์ธ์ ์ด๋ฏธ ๊ฐ๋ ์ค์ด๊ณ ๋ชจ๋ ์ฑ๋์ด ๊ฐ์ ธ๊ฐ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ยท Homebrew tap โ
psmon/homebrew-codescan์ ๋ผ์ด๋ธ. Apple Silicon Mac์์brew tap psmon/codescan && brew install codescan๋ฐ๋ก ๋์. ยท winget โ ๋งค๋ํ์คํธ๋packaging/winget/manifests/p/psmon/CodeScan/์ ์ค๋น๋จ.microsoft/winget-pkgsPR ๋จธ์ง ๋๊ธฐ ์ค. ๋จธ์ง ์ ๊น์ง๋ ์๋ Windows์์ winget ๋ก์ปฌ ํ ์คํธ๋ก ๊ฒ์ฆ. ยท npm (@webnori/codescan-cli) โ ํจํค์ง๋packaging/npm/codescan-cli/์ ์ค๋น๋จ. npm ๋ ์ง์คํธ๋ฆฌ publish ๋๊ธฐ ์ค. ์งง์ ์ด๋ฆcodescan-cli๋ ๋ฌด๊ดํ ์ 3์๊ฐ ์ ์ ์ค์ด๋ฏ๋ก ๋ฐ๋์ ์์ ์ค์ฝํ ๋ถ์ ์ด๋ฆ์ ์ฌ์ฉ. ์ฑ๋๋ค์ด ์ ์ ๊ณต๊ฐ๋๊ธฐ ์ ๊น์ง๋ ์๋ ์ง์ ์ธ์คํจ๋ฌ๋ฅผ ์ค๋ ๋ฐ๋ก ์ธ ์ ์์ต๋๋ค.
winget ๋งค๋ํ์คํธ๋ ๋ชจ๋ ๋ฆด๋ฆฌ์ฆ๋ง๋ค ์์ฑ๋ฉ๋๋ค. microsoft/winget-pkgs์ PR์ด ๋จธ์ง๋๊ธฐ ์ ์ด๋ผ๋ ๋ก์ปฌ ๋งค๋ํ์คํธ ํ์ผ๋ก ์ค์น๋ฅผ ์๋ํ ์ ์๋๋ฐ, winget์ ๋ณด์์ ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์๋ก๋๋ค. ๊ด๋ฆฌ์ ๊ถํ PowerShell์์ ํ ๋ฒ๋ง ์คํ:
winget settings --enable LocalManifestFiles์ผ ๋ค์๋ ์ผ๋ฐ ๊ถํ์ผ๋ก ์ ์ฅ์ ์ ๋งค๋ํ์คํธ์์ ๋ฐ๋ก ์ค์นํ ์ ์์ต๋๋ค:
# ์ด ์ ์ฅ์๋ฅผ ํด๋ก ํ ๊ณณ์์
winget install --manifest packaging\winget\manifests\p\psmon\CodeScan\0.5.0
codescan --version์ด๊ฑด ์์์ yaml๋ก ํจํค์ง๊ฐ ์ค์น๋๋ ๊ฑธ ๋ง๋ winget์ ์์ ๊ฐ๋์
๋๋ค. ํ ๋ฒ ์ผ๋๋ฉด ์ด๋ค ๋ก์ปฌ ๋งค๋ํ์คํธ๋ ์ค์น/๊ฒ์ฆํ ์ ์์ต๋๋ค. ๋์ค์ ๋๋ ค๋ฉด: winget settings --disable LocalManifestFiles (๊ด๋ฆฌ์).
- winget (Windows) โ ๋ง์ดํฌ๋ก์ํํธ์ ํ์ค Windows ํจํค์ง ๋งค๋์ . portable ์ค์น, ๊ด๋ฆฌ์ ๊ถํ ๋ถํ์, PATH ์๋ ์ฒ๋ฆฌ.
- Homebrew (macOS) โ macOS ๊ฐ๋ฐ์์๊ฒ ์ฌ์ค์ ํ์ค์ธ ํจํค์ง ๋งค๋์ . v1์ arm64(Apple Silicon)๋ง ์ ๊ณตํฉ๋๋ค. Intel Mac ์ฌ์ฉ์๋ ์์ค์์ ์ง์ ๋น๋ํ๊ฑฐ๋ Rosetta๋ก arm64 ๋น๋๋ฅผ ์คํํ์ธ์. Intel Mac ์ ์ ์ง์์ v2 ๊ฒํ ์ฌํญ์ ๋๋ค.
- npm (Linux + Windows ๋์ฒด) โ apt/dnf/snap ๋์ npm์ ์ ํํ ์ด์ ๋ npm์ด ๋ชจ๋ Linux ๋ฐฐํฌํ์์ ํต์ฉ๋๊ณ , CodeScan ๋ฆด๋ฆฌ์ฆ ํ์ดํ๋ผ์ธ์ด ํ๋์ ๋ํผ ํจํค์ง๋ก ๋ค ๊ฐ์ ๋ฐ์ด๋๋ฆฌ (
linux-x64,linux-arm64,osx-arm64,win-x64) ๋ฅผ ๋ชจ๋ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. npm ํจํค์ง๋ postinstall์์ GitHub Releases์ ์ ์ ํ ๋ค์ดํฐ๋ธ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฐ์์ค๋ ์์ ๋ํผ์ ๋๋ค. Windows ์์๋winget์ด ์ฌ์ ํ ๊ถ์ฅ ๊ฒฝ๋ก (Node.js ๋ถํ์) ์ง๋ง, Node ์ด๋ฏธ ์๊ณ ๋จ์ผnpm install -g @webnori/codescan-cli๋ก ํด์ฒด์ธ ํต์ผํ๊ณ ์ถ๋ค๋ฉด ์ด ํจํค์ง๋ ๋์ํฉ๋๋ค. ๋ฐ๋์ ์ค์ฝํ ๋ถ์@webnori/codescan-cli์ด๋ฆ์ ์ฌ์ฉ โ ์งง์codescan-cli์ด๋ฆ์ ๋ฌด๊ดํ ์ 3์(์ค์น ์ฆ์ ๊นจ์ง๋ ํจํค์ง)๊ฐ ์ ์ ์ค์ ๋๋ค. Linux arm64๋ ์๋๋ 1๊ธ ํ๊น โ README ํ๋จ์ Why AOT? โ Edge AI ํธ๋ ๋์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ์ ๊ฐ์น์์ arm64 SBC(Raspberry Pi / Jetson / Latte Panda) ๋ฐฐํฌ๊ฐ ์ ์ด ๋๊ตฌ์ ํต์ฌ์ ์ธ ๋ฏธ๋ ์๋๋ฆฌ์ค์ธ์ง ์ค๋ช ํฉ๋๋ค.
npm ๋ํผ๋ ์ฌ์ฉ์ CPU ์ํคํ ์ฒ๋ฅผ ์๋ ๊ฐ์งํ์ฌ ๋ง๋ tarball์ ๋ค์ด๋ก๋ํฉ๋๋ค:
process.arch |
๋ค์ด๋ก๋ ์์ฐ |
|---|---|
x64 |
codescan-linux-x64.tar.gz |
arm64 |
codescan-linux-arm64.tar.gz |
postinstall์ด GitHub์ ๋๋ฌํ ์ ์๋ ํ๊ฒฝ(ํ์ฌ ํ๋ก์, ์์ด๊ฐญ)์ด๋ผ๋ฉด ์ค์น ์ CODESCAN_SKIP_DOWNLOAD=1์ ์ง์ ํ๊ณ ์ต์ ๋ฆด๋ฆฌ์ฆ์์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ง์ ๋ฐ์ผ์ธ์.
v1์ glibc ๊ธฐ๋ฐ Linux๋ง ์ง์ํฉ๋๋ค. musl/Alpine ์ง์์ v2 ๊ฒํ ์ฌํญ์ ๋๋ค.
ํจํค์ง ๋งค๋์ ๊ฐ ์๋ ํ๊ฒฝ โ ๋๋ ํน์ ๋ฆด๋ฆฌ์ฆ์ ๊ณ ์ ์ค์นํ๊ณ ์ถ์ ๋.
Windows (PowerShell):
iwr https://raw.githubusercontent.com/psmon/CodeScan/main/Script/install-win.ps1 -OutFile install-win.ps1
.\install-win.ps1 # ์ต์
.\install-win.ps1 -Version 0.5.0 # ๋ฒ์ ๊ณ ์ Linux / macOS (bash):
curl -fsSL https://raw.githubusercontent.com/psmon/CodeScan/main/Script/install.sh -o install.sh
sh install.sh # ์ต์
sh install.sh --version 0.5.0 # ๋ฒ์ ๊ณ ์ ๋ ์ธ์คํจ๋ฌ ๋ชจ๋ GitHub์์ ํด๋น ๋ฆด๋ฆฌ์ฆ ์์ฐ์ ๋ฐ์ checksums.txt ๊ธฐ์ค SHA256์ ๊ฒ์ฆํ๊ณ , ์ฌ์ฉ์ ๋ก์ปฌ ๊ฒฝ๋ก(Win: ~/.codescan/bin, Unix: ~/.local/bin)์ ์ค์นํ๋ฉฐ, ~/.codescan/{db,logs,config}์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ ์ ๋ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
| OS | ๋ฐ์ด๋๋ฆฌ ์ค์น ๊ฒฝ๋ก | ์ฌ์ฉ์ ๋ฐ์ดํฐ |
|---|---|---|
| Windows | %USERPROFILE%\.codescan\bin (๋๋ winget ๊ด๋ฆฌ) |
%USERPROFILE%\.codescan\{db,logs,config} |
| Linux | ~/.local/bin (๋๋ npm ๊ด๋ฆฌ) |
~/.codescan/{db,logs,config} |
| macOS | $(brew --prefix)/bin |
~/.codescan/{db,logs,config} |
์ค์น / ์ ๊ทธ๋ ์ด๋ / ์ ๊ฑฐ ์ ๊ณผ์ ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ ๋ณด์กด๋ฉ๋๋ค.
git clone https://github.com/psmon/CodeScan.git
cd CodeScan
dotnet build # ๋๋ฒ๊ทธ ๋น๋
dotnet publish -c Release # ๋ฆด๋ฆฌ์ฆ publish (๋จ์ผ ํ์ผ)์ ์ ์กฐ๊ฑด:
- .NET 10.0 SDK (๋น๋์ฉ)
- Git (blame ํตํฉ์ฉ)
์ฐ์ถ๋ฌผ: bin/Release/net10.0/<rid>/codescan (Windows๋ codescan.exe).
GitHub Releases๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ก์ปฌ ์ฒดํฌ์์์์ ๋ฐ๋ก ์ค์นํ๊ณ ์ถ์ ์ ์ฅ์ ๊ฐ๋ฐ์์ฉ:
- Windows:
Script/deploy-win.ps1 - Linux:
Script/deploy-linux.sh
dotnet publish + ~/.codescan/bin ์ค์น + PATH ๋ฑ๋ก๊น์ง ํ ๋ฒ์ ์ฒ๋ฆฌํฉ๋๋ค โ ๋ก์ปฌ ๊ฐ๋ฐ ์ ํธ๋ฆฌํ์ง๋ง ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ ๊ถ์ฅํ๋ ๊ฒฝ๋ก๋ ์๋๋๋ค.
์์ฐ ๋ช
๋ช
, ์ฝ๋ ์๋ช
/๊ณต๊ธ๋ง ์ ์ฑ
, SBOM, CI ํ๋ฆ, ์ฑ๋ ์ ์ถ ์ ์ฐจ ๋ฑ v1 ํ์ ์์ Docs/install-distribution-strategy.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
# ํ์ฌ ๋๋ ํ ๋ฆฌ ์ค์บ (๋ฑ๋ก + ๋ถ์ + ํ์)
codescan scan
# ํน์ ๊ฒฝ๋ก ์ค์บ
codescan scan /path/to/project
# ์ธ๋ฑ์ฑ๋ ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ฒ์
codescan search "HttpClient"
# ๊ทธ๋ํ ๊ฒ์
codescan graph "HttpClient"
codescan search "HttpClient" --graph --depth 2
# Cypher-like ๊ทธ๋ํ ์ง์
codescan query "MATCH (c:class)-[r:uses_type]->(t:type) WHERE t.label = 'HttpClient'"
# ์ธํฐ๋ํฐ๋ธ TUI ์คํ
codescan tui
# ๋ก์ปฌ GUI ๋ทฐ์ด ์์
codescan gui start --port 8085| ๋ช ๋ น | ์ค๋ช |
|---|---|
scan [path] |
๋๋ ํ ๋ฆฌ ๋ฑ๋ก + ๋ถ์ (๊ธฐ๋ณธ ์ต์ ์ผ๋ก list ์คํํ๋ ๋จ์ถํ) |
list <path> |
์ฌ์ฉ์ ์ ์ ํํฐ/์ถ๋ ฅ ์ต์ ์ผ๋ก ์ค์บ |
search <query> |
ํํ ์คํธ + git log ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ |
graph [query] |
์์ค ์ง์ ๊ทธ๋ํ ๊ฒ์ ๋ฐ ์กฐํ |
query <graph-query> |
CodeScan Cypher-like ๊ทธ๋ํ ์ง์ ์๋ธ์ ์คํ |
cypher <graph-query> |
query์ ๋ณ์นญ |
| `gui start | stop` |
projects |
๋ฑ๋ก๋ ๋ชจ๋ ํ๋ก์ ํธ์ ํต๊ณ ๋์ด |
project <id> |
ํ๋ก์ ํธ ์์ฝ ๋๋ --detail๋ก ์ ์ฒด ๋ณด๊ธฐ |
project-addinfo <id> <text> |
ํ๋ก์ ํธ์ AI ์นํ์ ์ค๋ช ์ถ๊ฐ |
project-update <id> |
ํ๋ก์ ํธ ๊ฒฝ๋ก/์ค๋ช ๊ฐฑ์ |
project-delete <id> |
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋ก์ ํธ ์ ๊ฑฐ |
tui |
์ธํฐ๋ํฐ๋ธ ํฐ๋ฏธ๋ UI ์คํ |
help [command] |
ํน์ ๋ช ๋ น์ ๋์๋ง ํ์ |
# ๋ฉ์๋ ๊ฒ์
codescan search "async" --type method
# ์ฃผ์ ๊ฒ์
codescan search "TODO" --type comment
# ํน์ ํ๋ก์ ํธ ๋ด ๊ฒ์
codescan search "config" --project 1
# ๊ทธ๋ํ ๊ฒ์
codescan search "HttpClient" --graph --depth 2
codescan graph "SearchCommand" --project 1
# ๊ฒ์ ์ธ์๋ฅผ ๊ทธ๋ํ ์ง์๋ก ์ฒ๋ฆฌ
codescan search "MATCH (f:file)-[r:imports]->(m:module) LIMIT 20" --queryCodeScan์ ์์ฒด ๊ทธ๋ํ ๋ฐ์ดํฐ์ ๋ง์ถฐ Cypher-like ์ง์ ์๋ธ์ ์ ์ ๊ณตํฉ๋๋ค. CLI ์ฌ์ฉ์, AI ์์ด์ ํธ, ์๋ํ ์คํฌ๋ฆฝํธ๊ฐ SQL์ ์ง์ ๋ค๋ฃจ์ง ์๊ณ ๋ ๊ตฌ์กฐํ๋ ๊ทธ๋ํ ์กฐํ๋ฅผ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด๊ฒ์ ์ ์ฒด Cypher๊ฐ ์๋๋๋ค. CodeScan์ SQLite ๊ธฐ๋ฐ ์์ค ๊ทธ๋ํ์ ๋งคํ๋๋ฉฐ, CLI/TUI/GUI๊ฐ ๋ ๋๋งํ ์ ์๋ GraphData ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ง์ ํจํด:
MATCH (n:kind)
MATCH (a:kind)-[r:edge_kind]->(b:kind)์ง์ WHERE ํ๋:
| ๋ณ์นญ ์ข ๋ฅ | ํ๋ |
|---|---|
| ๋ ธ๋ ๋ณ์นญ | kind, label, path, detail |
| ์ฃ์ง ๋ณ์นญ | kind, label |
์ง์ ์ฐ์ฐ์:
| ์ฐ์ฐ์ | ์์ |
|---|---|
= |
t.label = 'HttpClient' |
CONTAINS |
c.label CONTAINS 'Command' |
STARTS WITH |
m.label STARTS WITH 'System' |
ENDS WITH |
f.path ENDS WITH '.cs' |
์ง์ ์ :
| ์ | ๋์ |
|---|---|
WHERE ... AND ... |
๋งค์นญ๋ ๋ ธ๋/์ฃ์ง ํํฐ๋ง |
RETURN ... |
๊ฐ๋ ์ฑ์ ์ํด ํ์ฉ, ๋ ๋๋ฌ๋ ๋ฌด์ |
LIMIT <n> |
๋งค์นญ๋ ์๋ ๋ ธ๋/์ฃ์ง ๊ฐ์ ์ ํ |
์์:
# ํด๋์ค ๋
ธ๋ ๊ฒ์
codescan query "MATCH (c:class) WHERE c.label CONTAINS 'Service' LIMIT 20"
# ํน์ ํ์
์ ์ฌ์ฉํ๋ ํด๋์ค ๊ฒ์
codescan query "MATCH (c:class)-[r:uses_type]->(t:type) WHERE t.label = 'HttpClient'"
# ํ์ผ ์ํฌํธ ๊ฒ์
codescan query "MATCH (f:file)-[r:imports]->(m:module) WHERE m.label CONTAINS 'System.Net'"
# ์์ฑ์-๋ฉ์๋ ๊ด๊ณ ๊ฒ์ ๋ฐ ์ด์ ํ ๋จ๊ณ ํ์ฅ
codescan query "MATCH (a:author)-[r:authored]->(m:method) WHERE a.label CONTAINS 'kim'" --depth 1
# `graph`๋ MATCH ์ง์๋ฅผ ์๋ ๊ฐ์ง
codescan graph "MATCH (c:class)-[r:creates]->(t:type) LIMIT 30"์ฃผ์ ๋ ธ๋ ์ข ๋ฅ:
project, directory, file, class, method, comment, doc, author, type, module
์ฃผ์ ์ฃ์ง ์ข ๋ฅ:
contains, defines, authored, has_comment, documents, imports, inherits_or_implements, creates, uses_type
# ๊ธฐ๋ณธ ํฌํธ๋ก ์์
codescan gui start
# ์ฌ์ฉ์ ์ ์ ํฌํธ๋ก ์์
codescan gui start --port 8090
# GUI ์๋ฒ ์ ์ง
codescan gui stopGUI ์์ ํ http://127.0.0.1:8085/๋ฅผ ์ฝ๋๋ค. ๋ทฐ์ด๋ ํค์๋ ๊ฒ์, ๊ทธ๋ํ ๊ฒ์, Cypher-like ๊ทธ๋ํ ์ง์, Neo4jClient ์คํ์ผ 2D ๊ทธ๋ํ ์บ๋ฒ์ค, ์นด๋ฉ๋ผ ์ ์ด ๊ฐ๋ฅํ 3D ๊ทธ๋ํ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
GUI ๊ทธ๋ํ ์ปจํธ๋กค:
| ์ปจํธ๋กค | ๋์ |
|---|---|
Keyword |
ํํ ์คํธ ํค์๋ ๊ฒ์ ์คํ |
Graph Search |
ํค์๋๋ก ๊ทธ๋ํ ๋ ธ๋ ๊ฒ์ ๋ฐ ์ด์ ํ์ฅ |
Query |
MATCH ... ๊ทธ๋ํ ์ง์ ์คํ ๋ฐ ๋ ๋๋ง |
| 2D ๋ฐฐ๊ฒฝ ๋๋๊ทธ | ๊ทธ๋ํ ํจ๋ |
| 2D ๋ง์ฐ์ค ํ | ์ปค์ ๊ธฐ์ค ์ค |
| 2D ๋ ธ๋ ๋๋๊ทธ | ๋ ธ๋ ์์น ์ฌ๋ฐฐ์น |
| ๋ ธ๋ ํด๋ฆญ | ๋ ธ๋ ๋ํ ์ผ + ๊ฐ์ ๊ด๊ณ ํ์ |
| ์ฃ์ง ํด๋ฆญ | ๊ด๊ณ ๋ํ ์ผ ํ์ |
| ๋ฒ๋ก ์นฉ | ๋ ธ๋ ์ข ๋ฅ ํ ๊ธ |
Fit |
๊ฐ์ ๋ ธ๋๋ฅผ ์บ๋ฒ์ค์ ๋ง์ถค |
Reset Camera |
2D ๋ทฐํฌํธ ๋๋ 3D ์นด๋ฉ๋ผ ๋ฆฌ์ |
| 3D ๋๋๊ทธ | ์นด๋ฉ๋ผ ๊ถค๋ ํ์ |
| 3D Shift-๋๋๊ทธ / ์ค๋ฅธ์ชฝ ๋๋๊ทธ | ์นด๋ฉ๋ผ ํจ๋ |
| 3D ๋ง์ฐ์ค ํ | ์นด๋ฉ๋ผ ์ค |
# ๋ฉ์๋ ๋ํ
์ผ๊น์ง ํธ๋ฆฌ ๋ทฐ
codescan list /path/to/project --detail --tree
# ํ์ฅ์ ํํฐ
codescan list /path --include .ts,.tsx
# ๊น์ด ์ ํ + git blame ํฌํจ
codescan list /path --depth 3 --blame๋ชจ๋ ๋ฐ์ดํฐ๋ ~/.codescan/ ์๋์ ์ ์ฅ๋ฉ๋๋ค:
~/.codescan/
โโโ db/
โ โโโ codescan.db # FTS5 ์ธ๋ฑ์ค๊ฐ ํฌํจ๋ SQLite DB
โโโ logs/
โโโ *.log # ์ค์บ ๋ก๊ทธ (--devmode ํ์ )
| ํ ์ด๋ธ | ๋ด์ฉ |
|---|---|
projects |
์ธ๋ฑ์ฑ๋ ํ๋ก์ ํธ์ ๊ฒฝ๋ก, ์ค์บ ์ผ์, ํต๊ณ |
scans |
ํ๋ก์ ํธ๋ณ ์ค์บ ์ด๋ ฅ |
files |
ํ์ผ ๋ฉํ๋ฐ์ดํฐ (๊ฒฝ๋ก, ํฌ๊ธฐ, ํ์ฅ์, ๊น์ด) |
methods |
git blame ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ํด๋์ค:๋ฉ์๋ ์ ์ |
comments |
์ฃผ๋ณ ์ฝ๋ ์ปจํ ์คํธ๊ฐ ํฌํจ๋ ์ฃผ์ ๋ธ๋ก |
project_docs |
์๋ ๋ฐ๊ฒฌ๋ README / AGENT / CLAUDE.md ๋ด์ฉ |
search_index |
FTS5 ๊ฐ์ ํ ์ด๋ธ (trigram ํ ํฌ๋์ด์ ) |
graph_nodes |
์์ค ๊ทธ๋ํ ๋ ธ๋: ํ๋ก์ ํธ, ๋๋ ํ ๋ฆฌ, ํ์ผ, ํด๋์ค, ๋ฉ์๋, ์ฃผ์, ๋ฌธ์, ์์ฑ์ |
graph_edges |
์์ค ๊ทธ๋ํ ๊ด๊ณ: contains, defines, authored, documents, comments, imports, creates, uses_type, inherits_or_implements |
๊ตฌ์กฐ ์ฃ์ง:
| ์ฃ์ง | ์๋ฏธ |
|---|---|
project -[contains]-> directory/file |
ํ๋ก์ ํธ ํ์ผ ํธ๋ฆฌ |
directory -[contains]-> directory/file |
๋๋ ํ ๋ฆฌ ํ์ผ ํธ๋ฆฌ |
file -[contains]-> class |
์์ค ํ์ผ์์ ๋ฐ๊ฒฌ๋ ํด๋์ค/ํ์ |
class/file -[defines]-> method |
๋ฉ์๋/ํจ์ ์ ์ |
file -[has_comment]-> comment |
์์ค ํ์ผ์์ ๋ฐ๊ฒฌ๋ ์ฃผ์ ๋ธ๋ก |
author -[authored]-> method |
git blame ์ต์ข ์์ฑ์ ๊ด๊ณ |
project -[documents]-> doc |
์๋ ๋ฐ๊ฒฌ๋ ํ๋ก์ ํธ ๋ฌธ์ |
์์กด์ฑ ํํธ ์ฃ์ง:
| ์ฃ์ง | ์ถ์ฒ |
|---|---|
file/class -[imports]-> module |
using, import, use, #include |
class -[inherits_or_implements]-> type |
๋ฒ ์ด์ค ํด๋์ค / ์ธํฐํ์ด์ค / trait ์คํ์ผ ์ ์ธ |
class -[creates]-> type |
์์ฑ์ ๋๋ new Type() ๊ฐ์ ์์ฑ์ ์ ์ฌ ํธ์ถ |
class -[uses_type]-> type |
์ ๊ท์ ์ ๋ต์ด ๊ฐ์งํ ํ์ ์ด๋ ธํ ์ด์ , ํ๋, ๋งค๊ฐ๋ณ์, ๋ฐํ, ์ง์ญ ์ ์ธ |
์์กด์ฑ ๊ทธ๋ํ๋ ์๋์ ์ผ๋ก ํ์ด๋ธ๋ฆฌ๋์ ๋๋ค. CodeScan์ ๋จผ์ ์ธ์ด ์ค๋ฆฝ์ ์ ๊ท์ ์ ๋ต์ ์ฌ์ฉํ๋ฏ๋ก ํ๋ก์ ํธ๊ฐ ๋น๋๋์ง ์์๋ ๊ทธ๋ํ ์ฃ์ง๊ฐ ์กด์ฌํฉ๋๋ค. ๋์์ ํ๋ก์ ํธ ๋ฉํ๋ฐ์ดํฐ๋ก ์๋ฏธ ๋ถ์ ๊ฐ๋ฅ์ฑ์ ํ์งํฉ๋๋ค:
| ์ธ์ด | ์๋ฏธ ๋ถ์ ํ๋ก๋ธ |
|---|---|
| C# | ํฅํ Roslyn ๋ถ์์ ์ํ .sln, .csproj |
| Java | ํฅํ JDT/Spoon ๋ถ์์ ์ํ pom.xml, build.gradle, build.gradle.kts |
| TypeScript/JavaScript | ํฅํ TypeScript Compiler API ๋ถ์์ ์ํ tsconfig.json, jsconfig.json |
| Go | ํฅํ go/packages ๋ถ์์ ์ํ go.mod, go.work |
| Rust | ํฅํ rust-analyzer / Cargo ๋ฉํ๋ฐ์ดํฐ ๋ถ์์ ์ํ Cargo.toml |
| C/C++ | ํฅํ Clang LibTooling ๋ถ์์ ์ํ compile_commands.json |
ํ์ฌ ์๋ฏธ ๋ถ์ ํ๋ก๋ธ๋ ํ์ํ ํ๋ก์ ํธ ๋ชจ๋ธ ์กด์ฌ ์ฌ๋ถ๋ง ๊ฐ์งํฉ๋๋ค. ์ธ์ด๋ณ ์๋ฏธ ๋ถ์ ์ ๋ต์ด ์ถ๊ฐ๋ ๋๊น์ง๋ ์ ๊ท์์ด ๊ธฐ๋ณธ ํด๋ฐฑ ์ ๋ต์ ๋๋ค.
CodeScan/
โโโ Program.cs # ์ง์
์ ๋ฐ CLI ๋ผ์ฐํ
โโโ Commands/ # ๋ช
๋ น ๊ตฌํ
โโโ Models/ # ๋ฐ์ดํฐ ๊ตฌ์กฐ (FileEntry, MethodEntry, CommentBlock, SourceDependency)
โโโ Services/ # ํต์ฌ ๋ก์ง
โ โโโ DirectoryScanner.cs # ํํฐ๋ง ํฌํจ ์ฌ๊ท ์ํ
โ โโโ SourceAnalyzer.cs # ๋ค๊ตญ์ด ํด๋์ค/๋ฉ์๋ ์ถ์ถ
โ โโโ SourceGraphAnalyzer.cs # ํ์ด๋ธ๋ฆฌ๋ ์์กด์ฑ ์ฃ์ง ์ถ์ถ
โ โโโ CommentExtractor.cs # ์ปจํ
์คํธ ํฌํจ ์ฃผ์ ์ถ์ถ
โ โโโ GitBlameService.cs # ๋ฉ์๋๋ณ git blame
โ โโโ GitLogSearchService.cs # ํ์ด๋ธ๋ฆฌ๋ git log ๊ฒ์
โ โโโ GraphQuery.cs # Cypher-like MATCH ์ง์ ํ์
โ โโโ GraphModels.cs # ์์ค ๊ทธ๋ํ DTO
โ โโโ SqliteStore.cs # FTS5 ํํ
์คํธ ๊ฒ์์ ๊ฐ์ถ SQLite DB
โ โโโ TreeFormatter.cs # ํธ๋ฆฌ/ํ๋ซ ์ถ๋ ฅ ํฌ๋งทํ
โโโ Tui/
โ โโโ TuiApp.cs # Terminal.Gui v2 ์ธํฐ๋ํฐ๋ธ UI
โโโ Script/ # ๋ฐฐํฌ ์คํฌ๋ฆฝํธ (Windows/Linux)
| ํจํค์ง | ์ฉ๋ |
|---|---|
| Microsoft.Data.Sqlite | FTS5 ์ง์ ์๋ฒ ๋๋ SQLite |
| Terminal.Gui v2 | ํฌ๋ก์ค ํ๋ซํผ ํฐ๋ฏธ๋ UI ํ๋ ์์ํฌ |
- ์ค์์ง์ค์ ์ ์ฅ โ ๋๊ตฌ๊ฐ ์คํ๋๋ ์์น์ ๋ฌด๊ดํ๊ฒ ๋ชจ๋ ๋ฐ์ดํฐ๋
~/.codescan/์๋ - ์ต์ ์ ์ ๋ ฌ โ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ ์์ ์๊ฐ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์
- ์ค๋งํธ ๊ธฐ๋ณธ๊ฐ โ
.git,node_modules,bin,obj,dist,build,__pycache__๋ ์๋ ์ ์ธ - ๋งํฌ๋ค์ด์ ํญ์ ํฌํจ โ
--includeํํฐ๊ฐ ํ์ฑํ๋์ด๋.mdํ์ผ์ ํญ์ ์ธ๋ฑ์ฑ - Git ๋ฃจํธ ๊ฐ์ง โ ์๋ธํ๋ก์ธ์ค ์์ด ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ
.git/์ ํ์ - Trigram FTS โ ํยท์คยท์ผ CJK ์ธ์ด์ ํจ๊ณผ์ ์ธ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํจ
- ์ ๊ท์ ์ฐ์ ๊ทธ๋ํ โ ๋น๋ ์ฑ๊ณต ์์ด๋ ์์กด์ฑ ๊ทธ๋ํ ํํธ ์์ฑ
- ์๋ฏธ ๋ถ์ ์ค๋น๋ ์ ๋ต ๋ ์ด์ด โ
ISourceDependencyStrategy๋ค์ ์ธ์ด๋ณ ์ปดํ์ผ๋ฌ ๋ถ์์ ์ถ๊ฐํ ์ ์์
TL;DR โ 2026~2027๋ AI ์ธํ๋ผ์ ๋ฌด๊ฒ์ค์ฌ์ด ํด๋ผ์ฐ๋์ ๊ฑฐ๋ ํ๋ก ํฐ์ด ๋ชจ๋ธ์์ *์จ๋๋ฐ์ด์ค SLM(Small Language Model)*๊ณผ ์ฃ์ง ์์ด์ ํธ๋ก ๋น ๋ฅด๊ฒ ์ฎ๊ฒจ๊ฐ๊ณ ์์ต๋๋ค. CodeScan์ .NET 10 Native AOT๋ก ๋น๋๋ ๋ฐํ์ ์์กด์ฑ ์๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ โ ์ด ํ๋ฆ์ ํจ๊ป ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ฐ๋ฐ์์ ๋ ธํธ๋ถ, ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด, ๋๋ก ๊ธ SBC์์ ๋ชจ๋ ๋์ผํ ์ฐ์ถ๋ฌผ์ด ๊ทธ๋๋ก ๋์ํฉ๋๋ค.
2025๋ ๊น์ง์ "์ฃ์ง LLM"์ ๋ฐ๋ชจ์ ๋ฒค์น๋งํฌ ๊ธ ์์ค์ ๋จธ๋ฌผ๋ฌ ์์์ต๋๋ค. 2026๋ ๋ถํฐ ๋ถ์๊ธฐ๊ฐ ๋ฌ๋ผ์ก์ต๋๋ค:
- Google Gemma 3 / 3n / 3 270M โ Gemma 3๋ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์ 14.5 tok/s๋ฅผ ๊ธฐ๋กํ๊ณ , Jetson์์ 12์๊ฐ ๋ฌด์ค๋จ ์ถ๋ก ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์์ด ํต๊ณผํ์ต๋๋ค. 270M ๋ณ์ข ์ INT4 ์์ํ + Per-Layer Embedding(PLE) ์บ์๋ก Pixel 9 Pro์์ **25ํ ๋ํ์ ๋ฐฐํฐ๋ฆฌ 0.75%**๋ง ์๋ชจ โ ์ผ์ ๊ธฐ๊ธฐ์ ์์ฐ์ค๋ฝ๊ฒ ํ์ฌ๋๋ ์์ค์ ์ง์ ํ์ต๋๋ค. (Gemma 3 270M ๋ฐํ, Gemma 3n ๊ฐ์)
- NVIDIA Nemotron 3 Nano (4B / 30B-A3B) โ ํ์ด๋ธ๋ฆฌ๋ Mixture-of-Experts ๊ตฌ์กฐ๋ก, 30B ํ๋ผ๋ฏธํฐ ์ค forward pass๋น 3B๋ง ํ์ฑํ๋ฉ๋๋ค. 4B ๋ณ์ข ์ 4bit ์์ํ ์ VRAM 3GB ๋ฏธ๋ง์ผ๋ก ์ปจ์๋จธ RTX ์นด๋์ Jetson๊ธ ์ฃ์ง ๋ณด๋์์ ๋์ํ๋ฉฐ, NVIDIA๋ ๋๊ธ ์คํ ๋ชจ๋ธ ๋๋น 9๋ฐฐ ์ฒ๋ฆฌ๋์ ์ฃผ์ฅํฉ๋๋ค. (Nemotron 3 Nano Omni ์๊ฐ, Nemotron 3 Nano 4B ํ์ด๋ธ๋ฆฌ๋ ์ํคํ ์ฒ)
- 3B ํ๋ผ๋ฏธํฐ ๋ชจ๋ธ์ด 2026๋ sweet spot โ 3~8bit ์์ํ๊ฐ ์์ฐ ์์ค์ผ๋ก ์์ ํ๋๊ณ ์ํ NPU๊ฐ ๋จ์ผ ๋ณด๋ ์ปดํจํฐ์ ๋ณธ๊ฒฉ ํ์ฌ๋๋ฉด์, ์ปค๋ฎค๋ํฐ๊ฐ ์ฝ 3B ํ๋ผ๋ฏธํฐ๋ฅผ SBC ์ถ๋ก ์ ์ค์ฉ์ sweet spot์ผ๋ก ์๋ ด์์ผฐ์ต๋๋ค. (The Small Model Revolution 2026)
์ง๊ธ์ ๊ณก์ ์ ๊ทธ๋๋ก ์ธ์ฝํ๋ฉด, 2027๋ ์๋ ๋ค์์ด ํ์ค์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค:
- ๋๋ก โ Whisper๊ธ ์์ฑ ์ธ์ + 3B๊ธ SLM์ด GPS ์์ด๋ ์์จ ์๋ฌด ํด์/์ฌ๊ณํ์ ์ํ (ํ์ฌ์ ํ์ ๋ฐ๋ชจ โ ์์ฐ ํ์ด๋ก๋ ๋จ๊ณ๋ก ์ง์ ).
- Raspberry Pi 5 + AI HAT+ 2 โ Hailo-10H ๊ฐ์๊ธฐ(40 TOPS INT4) + 8GB LPDDR4X๋ก SBC๊ฐ ๋ณธ๊ฒฉ์ ์ธ LLM ํธ์คํธ๊ฐ ๋จ. (Raspberry Pi AI HAT+ 2 ์ถ์ โ The Register, 2026๋ 1์)
- x86/ARM SBC (Latte Panda, Khadas Edge, Orange Pi ๋ฑ) โ ๊ณต์ฅ PLC ์์์ ๋ก์ปฌ SLM์ด ๋ก๊ทธ ๋ถ๋ฅ, ์ด์ ํ์ง, ์์ฐ์ด ์ด์ฉ UI๋ฅผ ๋ด๋น.
- ๋ ธํธ๋ถ/ํ๋ธ๋ฆฟ โ NPU ๋ด์ฅ SoC(Apple Silicon, Snapdragon X, AMD Strix Halo)๊ฐ ๋ณดํธํ๋๋ฉฐ 4B๊ธ ์จ๋๋ฐ์ด์ค ์ถ๋ก ์ด OS ๋ ๋ฒจ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ์๋ฆฌ์ก์. SamsungยทGoogleยทMotorola์ 2026 ํ๋๊ทธ์ญ์ ์ด๋ฏธ Q4 ์์ํ 4B ๋ชจ๋ธ์ ์ง์ํฉ๋๋ค. (2026 SLM ๋น๊ต: Phi-4 vs Gemma 3 vs Qwen)
์ด ๋ชจ๋ ํ๊ฒฝ์ ๊ณตํต ๊ตฌ์กฐ์ ์ ์ฝ:
| ์ ์ฝ | ์์ฌ์ |
|---|---|
| ๋ฐํ์ ๋ถ์ฌ โ ๋๋ก ํ์จ์ด์ SBC ๋ฏธ๋๋ฉ ์ด๋ฏธ์ง์๋ .NET / Java / Python ๋ฐํ์์ด ๊ฑฐ์ ์๊ณ , ์ถ๊ฐ ๋น์ฉ๋ ํฝ๋๋ค | ๋จ์ผ self-contained ๋ฐ์ด๋๋ฆฌ๊ฐ ์ฌ์ค์ ์๊ตฌ์ฌํญ |
| ๋ฉ๋ชจ๋ฆฌ/์ ์ฅ ์๋ฐ โ ๋ชจ๋ธ์ด RAM์ ๊ฑฐ์ ์ ์ ํ๋ฏ๋ก ์ฃผ๋ณ ๋๊ตฌ๋ ์์์ผ ํฉ๋๋ค | AOT ํธ๋ฆฌ๋ฐ๊ณผ ๋จ์ผ ํ์ผ ์์ถ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง |
| ์ฝ๋ ์คํํธ ๋น์ฉ โ ๋ฐฐํฐ๋ฆฌ ๊ตฌ๋ ๋ฐ ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ ์ํฌ๋ก๋๋ ์ฆ์ ์๋ตํด์ผ ํฉ๋๋ค | "JIT warmup ์์"์ด ๊ฒฐ์ ์ ์ด์ |
| ๊ณต๊ธ๋ง ์ ๋ขฐ โ ์ฃ์ง๋ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฌผ์ด ํ ๋ฒ ๋ฐํ ์ฐ์ถ๋ฌผ์ ๋ฌด๊ฒฐ์ฑ์ด ๋ ์ค์ํฉ๋๋ค | ๋จ์ผ ํ์ผ + SHA256 + SBOM ์กฐํฉ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ถํฉ |
CodeScan์ ๋น๋ ํํ๊ฐ ์ด ์ ์ฝ ๊ฐ๊ฐ์ ์ ํํ ๋ค์ด๋ง์ต๋๋ค:
- ์ฆ์ ์์ (JIT ์์) โ ์ฃ์ง ์์ด์ ํธ๊ฐ ์์ฑ ํธ๋ฆฌ๊ฑฐ ํ ์ฝ 50ms ์์ ์๋ตํด์ผ ํ๋ ์๋๋ฆฌ์ค์์ ๊ฒฐ์ ์ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค. (Native AOT ๋ฐฐํฌ ๊ฐ์ โ Microsoft Learn)
- ๋ฐํ์ ๋น์์กด ๋จ์ผ ํ์ผ โ
~/.codescan/bin/codescanํ๋๋ง ๋ณต์ฌํ๋ฉด .NET์ด ์ค์น๋์ง ์์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์๋ ๊ทธ๋๋ก ๋์ํฉ๋๋ค. - ๋ฉ๋ชจ๋ฆฌ ํํ๋ฆฐํธ ์ถ์ โ AOT๋ JIT, ๊ทธ ๋ฉํ๋ฐ์ดํฐ, ๋๋ฌ ๋ถ๊ฐ๋ฅํ ๋ฐํ์ ์๋น์ค๋ฅผ ์ ๊ฑฐํ๋ฏ๋ก ๋ชจ๋ธ์ ๋ ๋ง์ RAM์ ์๋ณดํฉ๋๋ค.
- ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์ โ ๋์ ์ฝ๋ ์์ฑ๊ณผ ๋๋ถ๋ถ์ ๋ฆฌํ๋ ์ ๊ฒฝ๋ก๊ฐ ์ ๊ฑฐ๋๋ฉฐ, ๋จ์ผ ํ์ผ + SBOM ๋๋ด์ ๊ณต๊ธ๋ง ๊ฐ์ฌ์ ์นํ์ ์ ๋๋ค.
- multi-arch 1๊ธ ์ง์ โ v1๋ถํฐ ๋์ผ ํ์ดํ๋ผ์ธ์ด
linux-x64,linux-arm64,osx-arm64,win-x64๋ฅผ ๋๋ฑํ๊ฒ ๊ฒ์ํฉ๋๋ค. SBC ๋ฐฐํฌ์ ๋ณ๋์ ๋น๋ ์ ์ฐจ๊ฐ ํ์ ์์ต๋๋ค.
CodeScan์ด ์ง์ LLM์ ํธ์คํธํ์ง๋ ์์ต๋๋ค. ๋์ ์์ด์ ํธ๊ฐ ์ฝ๋์ ์ํธ์์ฉํ ๋ ํ์ํ ์ธ๋ฑ์ฑยท๊ฒ์ ๋ ์ด์ด์ ๋๋ค:
- SBC์์ ๋๋ ์ฝ๋ ์ธ์งํ ์์ด์ ํธ(์: Gemma 3 4B + tool-use)๊ฐ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ์ ์๊ฒ ํด ์ฃผ๋ FTS5 + ๊ทธ๋ํ ๋ฐฑ์๋
- ์์จ ๋น๋/๋ฐฐํฌ ๋ด์ด ๋ณ๊ฒฝ ์ํฅ ๋ฒ์๋ฅผ ์ถ๋ก ํ ๋ ์ฌ์ฉํ ์ ์๋ Cypher-like ๊ทธ๋ํ ์ง์ ํ๋ฉด
- ๋๋ก ยท๋ก๋ด SDK ์ ์ฅ์๋ฅผ ์คํ๋ผ์ธ์์ ๋ถ์ํ์ฌ ์ฝ๋ ์ปจํ ์คํธ๋ฅผ SLM์ ์ฃผ์ ํ๋ RAG-lite ์ปดํฌ๋ํธ
์ ๊ทธ๋ฆผ์์ "์์ด์ ํธ" ์ชฝ์ ์๋งค ์ฐ๊ตฌ ํ๋ก์ ํธ๋ก ํจ๊ป ๋ง๋ค์ด์ง๊ณ ์์ต๋๋ค โ psmon/AgentZeroLite. AgentZeroLite๋ ์์์ ์ธ๊ธํ Gemma 3 / Nemotron Nano ๊ธ ์จ๋๋ฐ์ด์ค SLM์ ์ค์ ์ปจ์๋จธ ๋ฑ๊ธ ํ๋์จ์ด ์์์ ๋๋ฆฌ๊ณ ํ๊ฐํ๋ ๊ฒ์ ์ง์คํ๊ณ , CodeScan์ ๊ทธ ์์ด์ ํธ๊ฐ ํธ์ถํ๋ ์ฝ๋ ์ธ์งํ ๊ฒ์ ๋ ์ด์ด ์ญํ ์ ํฉ๋๋ค. ๋ ํ๋ก์ ํธ๋ ์กฐ๋ฆฝ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค:
- AgentZeroLite โ ์จ๋๋ฐ์ด์ค ๋ชจ๋ธ์ ํธ์คํ ํ๊ณ , ํ๋กฌํํธยทtool-useยทํ๊ฐ ๋ฃจํ๋ฅผ ๊ด๋ฆฌ. ์ฃ์ง ์ถ๋ก ์๋๋ฆฌ์ค ์ ์ฉ.
- CodeScan โ "์ด ์ ์ฅ์์ ๋ญ๊ฐ ์์ง?"์ ๋ํด FTS5 ํค์๋ ๋งค์น, ์์ค ๊ทธ๋ํ, Cypher-like ์ง์๋ก ๋ตํจ. ํ๋ก ํฐ์ด ๋ชจ๋ธ ์์ด๋ SLM์ด ์ฝ๋ ์์ ์ ์๋ฏธ ์๊ฒ ํ๋ ค๋ฉด ํ์ํ ๊ตฌ์กฐํ๋ ์ปจํ ์คํธ๋ฅผ ์ ๊ณต.
์จ๋๋ฐ์ด์ค SLM โ ๊ตฌ์กฐํ๋ ์ฝ๋ ๊ฒ์์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋ง๋ฌผ๋ฆฌ๋์ง ๋ณด๊ณ ์ถ๋ค๋ฉด AgentZeroLite๊ฐ ์์ฐ์ค๋ฌ์ด ๋ค์ ์ ๊ฑฐ์ฅ์ ๋๋ค.
์์ปจ๋ โ ์ํ ๋ชจ๋ธ์ด ์ฃ์ง์์ ์ง์ง ์ผ์ ํ๊ธฐ ์์ํ ์๋์, ๊ทธ ๋ชจ๋ธ์ ๋๋ฌ์ผ ๋๊ตฌ ์ญ์ ์๊ณ , ์ฆ์ ์คํ๋๊ณ , ๋ฐํ์ ๋น์์กด์ด์ด์ผ ํฉ๋๋ค. Native AOT ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ ๊ทธ ์๊ตฌ์ฌํญ์ ๋ํ ๊ฐ์ฅ ์ง์ ์ ์ธ ๋ต์ด๊ณ , CodeScan์ ๊ทธ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ง๋ค์ด์ก์ต๋๋ค.
๋น๋/๋ฐฐํฌ์ ์ ์ฒด ์ฌ์์
Docs/install-distribution-strategy.md์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
Blumn AI Studio
Blumn AI์ ์ฐจ์ธ๋ AI ์์ด์ ํธ์ ์ค์๊ฐ ์ฃ์ง AI ์ธํ๋ผ ๊ธฐ์ ์ ์ฐ๊ตฌํ๋ R&D Studio์
๋๋ค.
์ด ์ ์ฅ์๋ ํด๋น ์ฐ๊ตฌ ๋ฐ ๊ฐ๋ฐ ํ๋์ ์ผ๋ถ๋ฅผ ์คํ์์ค๋ก ๊ณต๊ฐํ ํ๋ก์ ํธ์
๋๋ค.
๐ https://blumn.ai/
๐ ๊ธฐ์ ๋ธ๋ก๊ทธ ยท https://blumnai-studio.github.io/tech-writing-harness/






