- ํ๋ก์ ํธ ์ด๋ฆ: NUNCHI (๋์น)
- ํ๋ก์ ํธ ์ค๋ช : LLM Agentic AI ๊ธฐ๋ฐ ๋ฐฐ๋ฆฌ์ดํ๋ฆฌ ์์จ์ฃผ๋ฌธ ํค์ค์คํฌ. ์์ฑ ๋ํ๋ง์ผ๋ก ๋ฉ๋ด ํ์ โ ์ถ์ฒ โ ๋ด๊ธฐ โ ๊ฒฐ์ ๊น์ง ์๋ฃํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋งํ์ง ์์๋ AI๊ฐ ๋ง์ค์์ ๊ฐ์งํด ๋จผ์ ๋์์ ์ ์ํฉ๋๋ค.
| ์กฐํจ๋ | ์ดํ๋ ธ | ์ํธ์ | ์ํ์ฐ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| BE / AI | FE / PD | Infra / VISION/ ADMIN | FE/PM |
| GitHub | GitHub | GitHub | GitHub |
ํฐ์น ์ฃผ๋ฌธ, ์์ ์ถ์ ์ฃผ๋ฌธ, ์ ์์ธ(๋ฐฐ๋ฆฌ์ดํ๋ฆฌ) ๋ชจ๋๋ฅผ ์ ํํ ์ ์๋ ๋ฉ์ธ ํ๋ฉด์ ๋๋ค.
์ผ๋ฐ ํฐ์น ์ฃผ๋ฌธ๊ณผ AI ๋ํ ์ฃผ๋ฌธ ์ค ์ํ๋ ๋ฐฉ์์ ์ ํํฉ๋๋ค.
ํฐ์น ๊ธฐ๋ฐ ์ฃผ๋ฌธ์ด ๊ธฐ๋ณธ ํ๋ฆ์ ๋๋ค. ์๋จ ๋ง์ดํฌ ๋ฒํผ์ผ๋ก ์์ฑ ์ฃผ๋ฌธ์ ์์ํ๋ฉด AI๊ฐ ์์ฑ์ ์ธ์ํ๊ณ ํ๋ฉด์ ์๋์ผ๋ก ์๊ฒฉ ์กฐ์ํ์ฌ ๋ฉ๋ด ํ์ยท๋ด๊ธฐยท๊ฒฐ์ ๊น์ง ์งํํฉ๋๋ค. AI ์ถ์ฒ ๋ผ๋ฒจ, ๋ํ ๊ธฐ๋ก, ๋งค์ฅ/ํฌ์ฅ ์ ํ ๋ฒํผ์ ์ ๊ณตํฉ๋๋ค.
์บ๋ฆญํฐ ์๋ฐํ "๋์น" ์ ์์ฑ ๋ํ๋ก ์ฃผ๋ฌธ ์ ๊ณผ์ ์ ์งํํฉ๋๋ค. ์ธ๊ธฐ ๋ฉ๋ด ์ถ์ฒ์ ๋ฌผ๋ก , ์๋์ ๊ฐ์ด ๋ค์ํ ๊ธฐ์ค์ผ๋ก ์ถ์ฒ์ ์์ฒญํ ์ ์์ต๋๋ค.
- ์ธ๊ธฐ ๋ฉ๋ด ๊ธฐ๋ฐ ์ถ์ฒ
- ์์์ฑ๋ถ ๊ธฐ๋ฐ ์ถ์ฒ (์ ์นผ๋ก๋ฆฌ, ๊ณ ๋จ๋ฐฑ ๋ฑ)
- ์๋ ๋ฅด๊ธฐ ๊ธฐ๋ฐ ์ถ์ฒ (ํน์ ์ฑ๋ถ ์ ์ธ)
- ๋ ์จ ๊ธฐ๋ฐ ์ถ์ฒ (์ค๋ ๋ ์จ์ ์ด์ธ๋ฆฌ๋ ๋ฉ๋ด)
์๋ฐํ ๋ชจ๋ โ ๋ํ & ์ถ์ฒ
์๋ฐํ ๋ชจ๋ โ ์ถ์ฒ ๋ฉ๋ด ๋ชจ๋ฌ
์ถ์ฒ์ ๋ฐ์ผ๋ฉด ๋ฉ๋ด ์นด๋ ๋ชจ๋ฌ์ด ํ์๋ฉ๋๋ค. ๋ง์์ ๋๋ ๋ฉ๋ด๋ฅผ ๋ฐ๋ก ๋ด๊ฑฐ๋, ๋ง์์ ๋ค์ง ์์ผ๋ฉด ๋ซ๊ณ ๋ค๋ฅธ ์ถ์ฒ์ ์์ฒญํ ์ ์์ต๋๋ค.
๋ค์ ๋ฐํ๋ฅผ ์์ธกํ์ฌ ํ๋จ์ ์ถ์ฒ ์ ๋ ฅ ๋ฒํผ์ ์ ๊ณตํฉ๋๋ค. ํต๋ฐ ์๋ต์ ๋ฏธ๋ฆฌ prefetch๋์ด ์ฆ์ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค.
์:
์ฅ๋ฐ๊ตฌ๋ ํ์ธํด์คยท์กฐ๊ฑด ๋ฐ๊ฟ์ ์ถ์ฒํด์คยท๋ค๋ฅธ ๋ฉ๋ด๋ ์ถ์ฒํด์ค
Smithery.ai์ NUNCHI MCP ์๋ฒ๋ฅผ ๋ฑ๋กํ์ฌ, ๊ฐ์ธ Claude Desktop์ ๊ฐ๋จํ ๋ช ๋ น์ด ํ ์ค๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๊ฐ์ธ AI๋ฅผ ํตํด ์ธ๊ตญ์ด ์ฃผ๋ฌธ, ๊ฐ์ธ ๋ง์ถค ์ถ์ฒ ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋์์ ์์ฒญํ์ง ์์๋, AI๊ฐ ๋ง์ค์ ์ ํธ๋ฅผ ๊ฐ์งํด ๋จผ์ ์ถ์ฒ์ ์ ์ํฉ๋๋ค.
- ์ฒด๋ฅ ์๊ฐ: ํน์ ํ๋ฉด์ ์ค๋ ๋จธ๋ฌด๋ฆ
- ๋ฐ๋ณต ํ์: ๊ฐ์ ๋ฉ๋ดยท์นดํ ๊ณ ๋ฆฌ ๋ฐ๋ณต ํ์ธ
- ์นจ๋ฌต: ์๋ต ์์ด ์ผ์ ์๊ฐ ์ ์ง
- ํค์ง ๋ฐํ: "์", "๋ญ๊ฐ ์ข์ง", "์ถ์ฒํด์ค" ๋ฑ ๋ถํ์ค ํํ
- ์์ฑ ๋ถํ์ค์ฑ: STT ์ ๋ขฐ๋ ๋ฎ์
OpenCV์ MediaPipe ๊ธฐ๋ฐ Python ๋น์ ์์ง์ ํตํด ์ฌ์ฉ์์ ์์ ๋ฐฉํฅ๊ณผ ๋๋ธ ๊น๋นก์์ ๊ฐ์งํฉ๋๋ค.
Python ๋น์ ์๋ฒ๋ WebSocket(ws://127.0.0.1:8765)์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์ฐ๊ฒฐ๋๋ฉฐ,
ํ๋ก ํธ์๋์ vision-client.js๊ฐ .vision-selectable ์์๋ฅผ ๋์์ผ๋ก ํฌ์ปค์ค ์ด๋๊ณผ ํด๋ฆญ์ ์ํํฉ๋๋ค.
- LEFT / RIGHT ์์ ์ ์ง: ์ ํ ํฌ์ปค์ค ์ด๋
- ๋๋ธ ๊น๋นก์: ํ์ฌ ํฌ์ปค์ค๋ ์์ ํด๋ฆญ
- ์บ๋ฆฌ๋ธ๋ ์ด์ ํ๋ฉด: ์ฌ์ฉ์์ ์ค์ ์์ ๊ธฐ์ค ๋ณด์
- ์ ์ฉ ํ๋ฉด: ๋ชจ๋ ์ ํ, ๋งค์ฅ/ํฌ์ฅ ์ ํ, ๋ฉ๋ด ์ ํ, ์ฃผ๋ฌธ ํ์ธ, ๊ฒฐ์ ํ๋ฆ
์ด๋ฅผ ํตํด ํฐ์น ์์ด๋ ํค์ค์คํฌ ์ฃผ์ ์ฃผ๋ฌธ ํ๋ก์ฐ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
ํค์ค์คํฌ์์ ๋ฐ์ํ ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ์๊ฐ ํ์ธํ ์ ์๋ ์ด์ ๊ด๋ฆฌ ํ๋ฉด์ ๋๋ค.
๊ด๋ฆฌ์๋ ์ฃผ๋ฌธ ๋ด์ญ, ์ฃผ๋ฌธ ์์ธ ์ ๋ณด, ์ฃผ๋ฌธ ์ํ, ์ฃผ๋ฌธ ์๊ฐ, ์ฃผ๋ฌธ ๋ฉ๋ด ๋ฑ์ ์กฐํํ ์ ์์ผ๋ฉฐ, ํค์ค์คํฌ์์ ์์ฑ๋ ์ฃผ๋ฌธ ๋ฐ์ดํฐ๊ฐ ๋ฐฑ์๋์ DB์ ์ ์ ๋ฐ์๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ๊ด๋ฆฌ์ ๋ก๊ทธ์ธ
- ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ
- ์ฃผ๋ฌธ ์์ธ ์ ๋ณด ํ์ธ
- ์ฃผ๋ฌธ ์ํ ํ์ธ
- ์ฃผ๋ฌธ ๋ฐ์ดํฐ DB ์ ์ฅ ํ์ธ
- ๊ด๋ฆฌ์ API ๊ธฐ๋ฐ ์ฃผ๋ฌธ ๋ฐ์ดํฐ ์กฐํ
- ์ฃผ๋ฌธ ํต๊ณ ํ์ผ ๋ค์ด๋ก๋
| Java | |
| JavaScript | |
| Python | |
| Spring Boot | |
| PostgreSQL | |
| Redis | |
| FastAPI | |
| LangGraph | |
| OpenAI | |
| Docker | |
| GitHub Actions | |
| Prometheus | |
| Grafana | |
| OpenCV | |
| MediaPipe |
NUNCHI/
โโโ src/main/
โ โโโ java/dgu/capstone/
โ โ โโโ domain/ # ์ํฐํฐ ๋ฐ ๋๋ฉ์ธ ๋ชจ๋ธ
โ โ โโโ repository/ # JPA ๋ ํฌ์งํ ๋ฆฌ
โ โ โโโ service/ # ๋น์ฆ๋์ค ๋ก์ง
โ โ โโโ controller/ # REST API ์ปจํธ๋กค๋ฌ
โ โ โโโ dto/ # ์์ฒญ/์๋ต DTO
โ โ โโโ config/ # Security, Redis ์ค์
โ โ โโโ exception/ # ๊ณตํต ์์ธ ์ฒ๋ฆฌ
โ โโโ resources/
โ โโโ application.yml
โโโ nunchi-vision/ # OpenCV / MediaPipe ๊ธฐ๋ฐ ์์ ์
๋ ฅ ์๋ฒ
โ โโโ main.py # ๋น์ ์์ง ์คํ ์ง์
์
โ โโโ server.py # WebSocket ์๋ฒ
โ โโโ detectors/ # ์ผ๊ตด/ํ์ฑ ๊ฐ์ง
โ โโโ fusion/ # ์์ ์ด๋, ๊น๋นก์, ๋ง์ค์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
โโโ tests/ # ํ๋ก ํธ์๋ ๋จ์ ํ
์คํธ (Node test runner)
โโโ docs/
โ โโโ images/ # โ ์คํฌ๋ฆฐ์ท ์ด๋ฏธ์ง ์ ์ฅ ์์น
โโโ .env.example
โโโ Dockerfile
โโโ build.gradle
Git Flow๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ค์ ๋ธ๋์น๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
mainBranch- ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ์ ์ฝ๋๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ชจ๋ ๋ฐฐํฌ๋ ์ด ๋ธ๋์น์์ ์ด๋ฃจ์ด์ง๋๋ค.
-
devBranch- ๊ฐ๋ฐ ํตํฉ ๋ธ๋์น์ ๋๋ค.
- ๊ธฐ๋ฅ ๊ฐ๋ฐ ์๋ฃ ํ dev๋ก ๋จธ์งํฉ๋๋ค.
-
{name}/{feature}Branch- ํ์ ๊ฐ์์ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ธ๋์น์ ๋๋ค.
- ์:
feat/#82/kakao-payment
// ํด๋์ค: ํ์ค์นผ ์ผ์ด์ค
public class OrderService {}
// ๋ฉ์๋ & ๋ณ์: ์นด๋ฉ ์ผ์ด์ค
public void createOrder() {}
private String orderStatus;
// ์์: ์ดํผ ์ค๋ค์ดํฌ ์ผ์ด์ค
public static final String JWT_SECRET = "...";- REST API: /api/**
- ์๋ต ์ฝ๋: 200, 201, 400, 401, 404, 409, 500 ๋ช
ํํ ๊ตฌ๋ถ
- ๋น์ฆ๋์ค ๋ก์ง์ Controller์ ๋์ง ์๊ณ Service๋ก ๋ถ๋ฆฌ
- ์ธ๋ถ ์ฐ๋์ Adapter/Client ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌ
- ๊ณตํต ์์ธ ์ฒ๋ฆฌ ์ฌ์ฉ
- API Key, JWT Secret ๋ฑ ๋ฏผ๊ฐ ์ ๋ณด๋ ์ฝ๋์ ํ๋์ฝ๋ฉ ๊ธ์ง
- ํ๊ฒฝ ๋ณ์(.env)๋ก ๊ด๋ฆฌ
- ๊ฒฐ์ /์ธ์ฆ ์ ๋ณด๋ ๋ก๊ทธ์ ๊ธฐ๋ก ๊ธ์ง
[Type] ์ค๋ช
[Feat] : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
[Fix] : ๋ฒ๊ทธ ์์
[Refactor]: ์ฝ๋ ๋ฆฌํฉํ ๋ง
[Chore] : ๋น๋, ์ค์ , ํจํค์ง ๋ณ๊ฒฝ
[Docs] : ๋ฌธ์ ์์ฑ / ์์
== ex1
[Feat] ๋ฉ๋ด ์ถ์ฒ API ์ถ๊ฐ
ํ ํ๋ฉด ๋ฉ๋ด ์ถ์ฒ ์๋ํฌ์ธํธ ๋ฐ Specification ๊ธฐ๋ฐ ํํฐ๋ง ๊ตฌํ
== ex2
[Fix] ์ฅ๋ฐ๊ตฌ๋ ๋ถ์ฐ ๋ฝ ํ๋ ์คํจ ์ 409 ์๋ฌ์ฝ๋ ์ถ๊ฐ
== ex3
[Chore] Discord ์นํ
CI/CD ์๋ฆผ ์ถ๊ฐ



