# ๐ก๏ธ SCAManager
**GitHub pushยทPR ๋ง๋ค ์ ์ ๋ถ์ + Claude AI ๋ฆฌ๋ทฐ โ ์ ์ํยท์๋ฆผยท๊ฒ์ดํธ.**
[](https://github.com/xzawed/SCAManager/actions/workflows/ci.yml)
[](https://github.com/xzawed/SCAManager/actions/workflows/codeql.yml)
[-brightgreen?style=flat-square&logo=pytest&logoColor=white)](tests/)
[](e2e/)
[](src/)
[](https://fastapi.tiangolo.com/)
[](LICENSE)
[๐บ๐ธ English](README.md)
## ์ด๋ค ๋๊ตฌ์ธ๊ฐ์?
SCAManager ๋ GitHub ์ ์ฅ์๋ฅผ ์ง์ผ๋ด
๋๋ค. ๋๊ตฐ๊ฐ ์ปค๋ฐ์ ํธ์ํ๊ฑฐ๋ Pull Request ๋ฅผ ์ด๋ฉด, ๋ณ๊ฒฝ๋
ํ์ผ์ ์ ์ ๋ถ์๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ Claude ์๊ฒ diff ๋ฆฌ๋ทฐ๋ฅผ ๋งก๊น๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ 100์ ๋ง์ ์ ์ ์
ํ๋๋ก ๋ง๋ค๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์๋ ค ๋๋ฆฝ๋๋ค.
์ํ์ ๋ค๋ฉด ๊ทธ ์ ์์ ๋ฐ๋ผ ์ง์ ํ๋ํ๊ฒ ํ ์๋ ์์ต๋๋ค. PR ์น์ธ, ๋ณ๊ฒฝ ์์ฒญ, squash ๋จธ์ง๊น์ง
๋งก๊ธธ ์ ์์ต๋๋ค.
**์ง์ ์ด์ํ๋ ๋๊ตฌ์
๋๋ค.** ๊ฐ์
ํ ์๋น์ค๋, ๋ง๋ค ๊ณ์ ๋ ์์ต๋๋ค. ๋
ธํธ๋ถ์ด๋ ์๋ฒ๋ ๋ณธ์ธ์
Railway ํ๋ก์ ํธ๋ ์ํ๋ ๊ณณ์์ ๋์๊ฐ๋ฉฐ, GitHub ๊ณผ Anthropic ์๋ **๋ณธ์ธ์ ์๊ฒฉ์ฆ๋ช
**์ผ๋ก
์ ์ํฉ๋๋ค. Claude ์ฌ์ฉ๋ฃ๋ ๋ณธ์ธ Anthropic ๊ณ์ ์ ์ฒญ๊ตฌ๋ฉ๋๋ค.
**์ด๋ฐ ๋ถ๊ป ๋ง์ต๋๋ค.** GitHub ์์ PR ์ ๋ฆฌ๋ทฐํ์๊ณ , ๋ชจ๋ PR ์ ์ผ๊ด๋ 2์ฐจ ์๊ฒฌ์ ๋ฐ๊ณ ์ถ์ง๋ง,
๊ทธ๋ฌ์๊ณ ์ฝ๋๋ฅผ ๋จ์ ํธ์คํ
์๋น์ค์ ๋๊ธฐ๊ณ ์ถ์ง๋ ์์ ๊ฒฝ์ฐ์
๋๋ค.

7์ผ์น ์ด๋ ฅ์ ๋ฏธ๋ฆฌ ๋ฃ์ด ๋ ๋ก์ปฌ ์ธ์คํด์ค์
๋๋ค โ ์ฒ์ ๋์ ์ ๋ ๋ณด์ด๋ ํ๋ฉด์ ์๋๋๋ค.
AI ๋น์ฉ ์นด๋๊ฐ 0 ์ธ ๊ฒ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ค์ API ๋ฅผ ํธ์ถํ์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
## ๋ด ์ ์ฅ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์?
์ค์น ์ ์ ์ฝ์ด ๋์ค ๋งํ ๋ถ๋ถ์
๋๋ค. ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ ์์๋๋ ๋์์ด ์๊ณ , ์ง์ ์ผ๊ธฐ
์ ๊น์ง๋ ๊บผ์ ธ ์๋ ๋์์ด ์์ต๋๋ค.
| | ๋์ | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
| **๋ถ์ยท์ฑ์ ** | ๋ชจ๋ ํธ์์ PR ์ ๋ถ์ํด ์ ์๋ฅผ ๋งค๊น๋๋ค. ๊ฒฐ๊ณผ๋ ์ ์ฅ๋๊ณ ์น UI ์ ํ์๋ฉ๋๋ค. | **์ผ์ง** |
| **AI ๋ฆฌ๋ทฐ** | Claude ๊ฐ diff ๋ฅผ ๋ฆฌ๋ทฐํฉ๋๋ค. ๋ฆฌ๋ทฐ ํ ๋ฒ์ด Claude API ํธ์ถ ํ ๋ฒ์ด๊ณ ์๊ธ์ ๋ณธ์ธ Anthropic ๊ณ์ ์ ์ฒญ๊ตฌ๋ฉ๋๋ค. API ํค๊ฐ ์๊ฑฐ๋ ๊ธฐ๋ฅ์ ๊ป๊ฑฐ๋ diff ๊ฐ ๋น์์ผ๋ฉด ํธ์ถํ์ง ์์ต๋๋ค. | **์ผ์ง** |
| **PR ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ** | ๋ฆฌ๋ทฐ ๋ด์ฉ์ PR ์ฝ๋ฉํธ๋ก ๊ฒ์ํฉ๋๋ค. | **์ผ์ง** |
| **์๋ฆผ** | Telegram ยท Discord ยท Slack ยท Email ยท webhook ยท n8n ยท GitHub ์ปค๋ฐ ์ฝ๋ฉํธ ยท GitHub ์ด์. | ๊บผ์ง โ ๋จ, Telegram ์ ๋ด ํ ํฐ๊ณผ chat ID ๊ฐ ์์ผ๋ฉด ๋ฐ๋ก ํ์ฑํ๋ฉ๋๋ค |
| **์น์ธ / ๋ณ๊ฒฝ ์์ฒญ** | ์ ์์ ๋ฐ๋ผ GitHub ์์ ๋์ ํ๋ํฉ๋๋ค. | **๊บผ์ง** |
| **Squash ๋จธ์ง** | ์ ์๊ฐ ๊ธฐ์ค์ ๋์ผ๋ฉด PR ์ ๋จธ์งํฉ๋๋ค. | **๊บผ์ง** |
๋ถ์ยท์ฑ์ ์ ํญ์ ๋์๊ฐ๋๋ค. ๋๋จธ์ง ํญ๋ชฉ์ ์ ์ฅ์๋ง๋ค ๋ฐ๋ก, ํด๋น ์ ์ฅ์์ **โ๏ธ ์ค์ **
ํ์ด์ง์์ ์ ํฉ๋๋ค.
์ค์ ๊ณผ ๋ฌด๊ดํ๊ฒ, ์ ์ฅ์๋ฅผ ์ถ๊ฐํ ๋ ๋ ๊ฐ์ง๊ฐ ํ ๋ฒ ์ผ์ด๋ฉ๋๋ค. ์ ์ฅ์์ **์นํ
์ด ์ค์น**๋๊ณ ,
**๋น๊ณต๊ฐ ์ ์ฅ์์ ํํด** ์์ `.scamanager/` ๋๋ ํฐ๋ฆฌ(์ค์ ํ์ผ๊ณผ CLI ํ
์คํฌ๋ฆฝํธ)๊ฐ
**์ปค๋ฐ**๋ฉ๋๋ค. ๊ณต๊ฐ ์ ์ฅ์์๋ ์ด ์ปค๋ฐ์ด ๋ค์ด๊ฐ์ง ์์ต๋๋ค.
## GitHub ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋จผ์ ์จ ๋ณด๊ธฐ
๋ฌด์์ ์ฐ๊ฒฐํ๊ธฐ ์ ์, ๊ฐ์ ๋ถ์์ ์์
ํธ๋ฆฌ์ ๋ํด ์ปค๋งจ๋๋ผ์ธ์์ ๋๋ ค ๋ณด์ค ์ ์์ต๋๋ค.
๋ก์ปฌ ํ์ผ๋ง ์ฝ๊ณ GitHub ์ ํธ์ถํ์ง ์์ต๋๋ค.
```bash
cp .env.example .env # ๊ทธ๋ฆฌ๊ณ SESSION_SECRET ์ ์ฑ์๋๋ค โ ์๋ ์ฐธ๊ณ
python -m src.cli review --base main # ํน์ ๋ธ๋์น์ ๋น๊ต
python -m src.cli review --staged # ๋๋ staged ๋ณ๊ฒฝ๋ง
python -m src.cli review --no-ai # Claude ํธ์ถ ์๋ต โ API ํค ์์ด ๋์ํฉ๋๋ค
```
CLI ๋ ์๋ฒ์ ๊ฐ์ `.env` ๊ฐ ํ์ํฉ๋๋ค โ ์ค์ ์ด ์ํฌํธ ์์ ์ ๊ฒ์ฆ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๋์๊ฐ๋
DB ๋, GitHub ์ฑ๋, Anthropic ํค๋ ํ์ ์์ง๋ง, `SESSION_SECRET` ์ด ์์ผ๋ฉด `--help` ์กฐ์ฐจ
๊ฒ์ฆ ์ค๋ฅ๋ก ๋ฉ์ถฅ๋๋ค.
Windows ์์๋ `python` ๋์ `py -3` ์ ์ฐ์๋ฉด ๋ฉ๋๋ค.
## ์๋ฒ ์คํํ๊ธฐ
### ๋จผ์ ์ค๋นํ ๊ฒ
| | |
|---|---|
| **Python 3.12** | CI ๊ฐ ์ฐ๋ ๋ฒ์ ์
๋๋ค. ์์ ๋ฒ์ ๋ ๋๊ฐ ๋์ํ์ง๋ง, ๊ฒ์ฆ๋ ๊ฒ์ 3.12 ์
๋๋ค. |
| **Node.js 20** | CSS ๋ฒ๋ค์ ํ ๋ฒ ๋น๋ํ ๋๋ง ํ์ํฉ๋๋ค. |
| **PostgreSQL** | ์ ์ ๊ฐ๋ฅํ DB ๊ฐ ํ์ํฉ๋๋ค. SQLite ๋ ํ
์คํธ ์ค์ํธ๊ฐ ์ฐ๊ณ , ์ฑ์ PostgreSQL ๋ก ๋๋ฆฌ์ธ์. |
| **GitHub OAuth ์ฑ** | ์น UI ๋ก๊ทธ์ธ์ ํ์ํฉ๋๋ค. ์์ CLI ๋ง ์ฐ์ ๋ค๋ฉด ์์ด๋ ๋ฉ๋๋ค. |
| **Anthropic API ํค** | ์ ํ์ด์ง๋ง, ์์ผ๋ฉด AI ๋ฆฌ๋ทฐ๊ฐ ๋์ง ์์ ์ด๋ค ์ ์๋ 89์ ์ ๋์ง ๋ชปํฉ๋๋ค. |
### ์ค์น์ ์คํ
```bash
git clone https://github.com/xzawed/SCAManager.git && cd SCAManager
make install # pip install -r requirements-dev.txt + npm install
make css-build # Tailwind ๋ฒ๋ค ๋น๋ (gitignore ๋์์ด๋ผ ํ ๋ฒ ๋ง๋ค์ด ๋ก๋๋ค)
cp .env.example .env
make run # uvicorn :8000, ๋ถํ
์ DB ๋ง์ด๊ทธ๋ ์ด์
์คํ
```
Windows ์ฒ๋ผ `make` ๊ฐ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด, ์ ํ๊น์ ๊ฐ๊ฐ ํ๋ ์ค์ง๋ฆฌ ๋ช
๋ น์
๋๋ค.
[Makefile](Makefile) ์ ์ด์ด ๋ค ์ค์ ์์๋๋ก ์คํํ์๊ณ , `python` ์ `py -3` ์ผ๋ก ๋ฐ๊ฟ ์ฃผ์ธ์.
### `.env` ์ฑ์ฐ๊ธฐ
`.env.example` ์๋ ๋๋ถ๋ถ์ ์ค์ ์ ๋์ํ๋ ์์๊ฐ์ด ๋ค์ด ์์ง๋ง, **`SESSION_SECRET` ์ ์ผ๋ถ๋ฌ
๋น์ ๋์๊ณ ์ฑ์ฐ๊ธฐ ์ ๊น์ง๋ ์ฑ์ด ๋จ์ง ์์ต๋๋ค** โ ํ๋ก๋์
๋ง์ด ์๋๋ผ ๋ชจ๋ ํ๊ฒฝ์์ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๊ฒ์ ์ฑ์ฐ๊ณ `DATABASE_URL` ์ ์ค์ DB ๋ก ๋ฐ๊พธ๋ฉด ๋น๋๋ค.
- **`SESSION_SECRET`** โ `openssl rand -hex 32` ๋ก ํ๋ ๋ง๋์ธ์. ์ค์ ํ๊ธฐ ์ ๊น์ง๋
`SESSION_SECRET must be at least 32 characters long` ์ผ๋ก ๊ธฐ๋์ด ์คํจํฉ๋๋ค.
๊ฐ๋ฐ์ฉ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒฝ๋ก๋ ์์ต๋๋ค.
- **`ANTHROPIC_API_KEY`** โ ์์ผ๋ฉด AI ๋ฆฌ๋ทฐ๊ฐ ๋์ง ์์ ์ด๋ค ์ ์๋ 89์ ์ ๋์ง ๋ชปํฉ๋๋ค.
- **`GITHUB_CLIENT_ID` ยท `GITHUB_CLIENT_SECRET`** โ GitHub OAuth ์ฑ์์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
์น UI ๋ก๊ทธ์ธ์ ํ์ํฉ๋๋ค.
๋๋จธ์ง ํญ๋ชฉ์ [docs/reference/env-vars.md](docs/reference/env-vars.md) ์ ์ ๋ฆฌ๋ผ ์์ต๋๋ค.
### ์ฒซ ์ ์ฅ์ ๋ฑ๋กํ๊ธฐ
์ ์ด๊ณ GitHub ์ผ๋ก ๋ก๊ทธ์ธํ ๋ค **+ ๋ฆฌํฌ ์ถ๊ฐ**๋ฅผ ์ ํํ์ธ์. ํด๋น
์ ์ฅ์์ ์นํ
์ด ์ค์น๋๊ณ (๋น๊ณต๊ฐ ์ ์ฅ์๋ผ๋ฉด ์์์ ๋งํ `.scamanager/` ํ์ผ๋ ์ปค๋ฐ๋ฉ๋๋ค),
๊ทธ๋ค์ ํธ์๋ถํฐ ๋ถ์์ด ์์๋ฉ๋๋ค. ์ดํ์๋ ์ ์ฅ์์ **โ๏ธ ์ค์ ** ํ์ด์ง์์ ์ด๋ค ์๋ฆผ ์ฑ๋์
์ธ์ง, ๊ฒ์ดํธ๊ฐ GitHub ์์ ๋์ ํ๋ํด๋ ๋๋์ง๋ฅผ ์ ํ์๋ฉด ๋ฉ๋๋ค.
## ์ ์๋ ์ด๋ป๊ฒ ๋งค๊ฒจ์ง๋์?
์ปค๋ฐ์ 100์ ์์ ์ถ๋ฐํด ๋ค์ฏ ํญ๋ชฉ์ผ๋ก ํ๊ฐ๋ฉ๋๋ค.
| ํญ๋ชฉ | ๋ฐฐ์ | ์ถ์ฒ |
|---|---|---|
| ์ฝ๋ ํ์ง | 25 | ์ ์ ๋ถ์๊ธฐ โ error ํ๋๋น 3์ , warning ํ๋๋น 1์ ๊ฐ์ |
| ๋ณด์ | 20 | ์ ์ ๋ถ์๊ธฐ โ HIGH ํ๋๋น 7์ , LOWยทMEDIUM ํ๋๋น 2์ ๊ฐ์ |
| ์ปค๋ฐ ๋ฉ์์ง | 15 | Claude |
| ๊ตฌํ ๋ฐฉํฅ์ฑ | 25 | Claude โ ๋ณ๊ฒฝ์ด ํ๋ฐฉํ ์ผ์ ์ค์ ๋ก ํ๋์ง, ๊ทธ ๋ฐฉ์์ด ํ๋นํ์ง |
| ํ
์คํธ ์ฝ๋ | 15 | Claude |
๋ฑ๊ธ์ **A** 90์ ์ด์ ยท **B** 75 ยท **C** 60 ยท **D** 45 ์ด๊ณ , ๊ทธ ์๋๋ **F** ์
๋๋ค.
100์ ์ค 55์ ์ Claude ๊ฐ ๋งก์ต๋๋ค. ์ธ ๋งํ AI ๋ฆฌ๋ทฐ๊ฐ ์์ ๋ โ API ํค๊ฐ ์๊ฑฐ๋, ๊ธฐ๋ฅ์ ๊ป๊ฑฐ๋,
diff ๊ฐ ๋น์์ ๋ โ ์ด ์ธ ํญ๋ชฉ์ด 0์ ์ด ๋์ง๋ ์์ต๋๋ค. ๋์ 55์ ์ค 44์ ์ ํด๋นํ๋ ๊ณ ์
์ค๋ฆฝ๊ฐ์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ๊ทธ๋์ ์ ์ ๋ถ์์ด ๋ง์ ์ด์ด๋ ์ด์ ์ **89์ **์์ ๋ฉ์ถฅ๋๋ค. A ๊ฐ ์๋๋ผ
B ์
๋๋ค. ์ด๋ฐ ์คํ์๋ ยซ๊ฒ์ฆ๋์ง ์์ยป ํ์๊ฐ ๋จ์์, AI ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์น ์ ์์ ๊ตฌ๋ถ๋ฉ๋๋ค.
AI ํธ์ถ์ด ์ค์ ๋ก ์คํจํ๋ค๋ฉด โ API ์ค๋ฅ์ด๊ฑฐ๋ ์๋ต์ ํ์ฑํ ์ ์๋ ๊ฒฝ์ฐ โ ์ ์๋ฅผ ์์ ์ ์ฅํ์ง
์์ต๋๋ค.
์ ์ ๋ถ์ ์ชฝ๋ ๊ฐ์ ์์น์
๋๋ค. ๋ฐฐํฌ๋ณธ์๋ ๋ถ์๊ธฐ 16์ข
์ด ๋ฐ๋์ ์ค์น๋๋๋ก ์ ํด์ ธ ์์ต๋๋ค.
๊ทธ์ค ํ๋๊ฐ ์๋๋ฐ ๋ง์นจ ์ด๋ฒ ๋ณ๊ฒฝ์ ์ด๋ค ํ์ผ์ด ๊ทธ ๋ถ์๊ธฐ์ ๋์์ด๋ผ๋ฉด, ํด๋น ๋ถ์์
**๋ฏธ์๋ฃ(incomplete)** ๋ก ํ์ํ๊ณ ๊ฒ์ดํธ๊ฐ ์๋ ์น์ธ๊ณผ ์๋ ๋จธ์ง๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ์ฃผ์ด์ง ์ฝ๋๋ฅผ
์ ๋๋ก ๋ถ์ํ์ง ๋ชปํ ์คํ์ด ์ข์ ์ ์๋ฅผ ๋ฐ์์๋ ์ ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์ธ์ด ์ง์ ๋ฒ์ โ AI ๋ฆฌ๋ทฐ 49๊ฐ, ์ ์ ๋ถ์ 27๊ฐ
Claude ๋ **49๊ฐ ์ธ์ด**๋ฅผ ๊ฐ๊ฐ์ ์ฒดํฌ๋ฆฌ์คํธ๋ก ๋ฆฌ๋ทฐํฉ๋๋ค. ๊ทธ์ค **27๊ฐ**๋ ์ ์ ๋ถ์๊ธฐ๊น์ง ๋ถ์ด
์์ต๋๋ค. ๋ฑ๋ก๋ ๋ถ์๊ธฐ๋ ๋ชจ๋ **24์ข
**์ด๊ณ , ๊ทธ์ค **16์ข
**์ด ์์์ ๋งํ ํ์ ์ค์น๋ถ์
๋๋ค.
๋๋จธ์ง๋ ํด๋น ๋ฐ์ด๋๋ฆฌ๊ฐ `PATH` ์ ์์ ๋๋ง ๋์ํฉ๋๋ค.
๋ก์ปฌ์์ `make run` ํ์๋ฉด 24์ข
์ด ๋ชจ๋ ์์ง๋ ์์ ํ
๋ฐ, ๊ทธ๋๋ ๊ด์ฐฎ์ต๋๋ค. ์ ํ ๋ถ์๊ธฐ๊ฐ ์์ผ๋ฉด
์กฐ์ฉํ ๊ฑด๋๋๋๋ค. ํ์ฌ ์์น๋ [docs/STATE.md](docs/STATE.md) ์ ์์ต๋๋ค.
์ ์ ๋ถ์์ด ์ง์ํ๋ ์ธ์ด:
`c ยท clojure ยท cpp ยท csharp ยท css ยท dart ยท dockerfile ยท elixir ยท go ยท html ยท java ยท javascript ยท
kotlin ยท php ยท powershell ยท protobuf ยท python ยท ruby ยท rust ยท scala ยท shell ยท solidity ยท sql ยท
swift ยท terraform ยท typescript ยท yaml`
## ๊ฒ์ดํธ
๊ฒ์ดํธ๋ GitHub ์์ ๋์ ํ๋ํ๋ ๋ถ๋ถ์
๋๋ค. ์ ์ฅ์๋ฅผ ์ถ๊ฐํ ์์ ์๋ ๊บผ์ ธ ์๊ณ , ์ค์
ํ์ด์ง์์ ์ง์ ์ผ๊ธฐ ์ ๊น์ง ๊ทธ๋๋ก ๊บผ์ ธ ์์ต๋๋ค.
์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ 75์ ์ด์ ์น์ธ ยท 50์ ๋ฏธ๋ง ๋ณ๊ฒฝ ์์ฒญ ยท 75์ ์ด์ squash ๋จธ์ง์
๋๋ค. ์น์ธ์๋ ๋
๊ฐ์ง ๋ฐฉ์์ด ์์ต๋๋ค. `auto` ๋ GitHub ์ ์ฆ์ ๋ฐ์ํ๊ณ , `semi-auto` ๋ Telegram ์ผ๋ก ๋ฒํผ์ด
๋ฌ๋ฆฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
CI ๊ฐ ์์ง ๋๊ณ ์์ด GitHub ์ด ๊ฑฐ์ ํ ๋จธ์ง๋ ๋ฒ๋ฆฌ์ง ์๊ณ ํ์ ๋ฃ์ด ๋ค์ ์๋ํฉ๋๋ค.
์๋ฆผ ์ฑ๋์ ์๋ก ๋
๋ฆฝ์ ์ด๋ผ, ์นํ
ํ๋๊ฐ ์คํจํ๊ธฐ ์์ํด๋ ๋๋จธ์ง ์ฑ๋์ ์ ์์ ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
## ๋ฐฐํฌ
**Railway** โ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๊ณ PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ถ๊ฐํ ๋ค, ์์ ๋ณ์๋ค๊ณผ ํจ๊ป
`ANTHROPIC_API_KEY` ยท `APP_BASE_URL` ์ ์ค์ ํฉ๋๋ค. ์ด URL ์ ๋ฐ๋์ `https://` ์ฌ์ผ ํฉ๋๋ค.
`http://` ๋ก ๋๋ฉด OAuth ๋ฆฌ๋ค์ด๋ ํธ์ GitHub ์นํ
์ ๋ฌ์ด ๋ ๋ค ์คํจํฉ๋๋ค. ์์ธํ ์ ์ฐจ๋
[๋ฐ๋ถ](docs/runbooks/railway.md)์ ์์ต๋๋ค.
**๊ทธ ๋ฐ์ ํ๊ฒฝ** โ ํ๋ฒํ ASGI ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค.
```bash
uvicorn src.main:app --host 0.0.0.0 --port 8000 --proxy-headers
```
## ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ฐ์ผ๋ก ๋๊ฐ๋์?
์ง์ ์ด์ํ๋ค๋ ๊ฒ์ด ๊ณง ๋คํธ์ํฌ ๋ฐ์ผ๋ก ์๋ฌด๊ฒ๋ ๋๊ฐ์ง ์๋๋ค๋ ๋ป์ ์๋๋๋ค. diff ์ ์ ์๋
๋ค์์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- **GitHub** โ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ, ๋น๊ณต๊ฐ ์ ์ฅ์์ `.scamanager/` ์ปค๋ฐ, ๊ทธ๋ฆฌ๊ณ ์ผ ๋์ ๊ฒฝ์ฐ ์น์ธยท๋จธ์ง
- **๋ณธ์ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค** โ ์ ์, diff ์์ ๋ฝ์๋ธ ์ง์ ์ฌํญ, AI ๋ฆฌ๋ทฐ ๋ณธ๋ฌธ
- **Anthropic** โ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ธฐ ์ํ diff ์์ฒด
- **์ผ ๋์ ์๋ฆผ ์ฑ๋** โ ์ ์ ์์ฝ
- **OpenAI** โ ์ ํ ๊ธฐ๋ฅ์ธ 2์ฐจ ๊ฒ์ฆ๊ธฐ๋ฅผ ์ผ์ ๊ฒฝ์ฐ์๋ง
์ ์ฒด ํ์ ๊ฐ๊ฐ์ ๋๋ ๋ฐฉ๋ฒ์ [SECURITY.md](SECURITY.md#data-egress) ์ ์์ต๋๋ค.
## ๋ฌธ์
[์ํคํ
์ฒ](docs/architecture.md) ยท [ํ๊ฒฝ๋ณ์](docs/reference/env-vars.md) ยท
[๋ฐ๋ถ](docs/runbooks/) ยท [๊ธฐ์ฌ ์๋ด](CONTRIBUTING.md) ยท [ํ์ฌ ์์น](docs/STATE.md)
์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์
จ๋ค๋ฉด ๊ณต๊ฐ ์ด์ ๋์
[๋น๊ณต๊ฐ advisory](https://github.com/xzawed/SCAManager/security/advisories/new) ๋ก ์๋ ค ์ฃผ์ธ์.
[MIT](LICENSE) ยฉ xzawed