diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6faed1f --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +GOOGLE_API_KEY=YOUR_API_KEY \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..8f24256 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,21 @@ +--- +name: ๐Ÿ› ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ +about: ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š” +title: '[Fix] ' +labels: bug +assignees: '' +--- + +## ๐Ÿ› ๋ฒ„๊ทธ ๊ฐœ์š” + + +## โœ… Todo + + +- [ ] ๋ฒ„๊ทธ ์›์ธ ๋ถ„์„ +- [ ] ์ˆ˜์ • ๋ฐฉ์•ˆ ๊ตฌํ˜„ +- [ ] ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ + +## ๐Ÿ“ Remarks + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..c4e242f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: โœจ ๊ธฐ๋Šฅ ์š”์ฒญ +about: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•  ๋•Œ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š” +title: '[Feat] ' +labels: feature +assignees: '' +--- + +## ๐Ÿ“‹ ๊ธฐ๋Šฅ ๊ฐœ์š” + + +## โœ… Todo + + +- [ ] +- [ ] +- [ ] + +## ๐Ÿ“ Remarks + + + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..598acea --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,20 @@ +## ๊ฐœ์š” + + +> ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ด์ฃผ์„ธ์š” + + +## PR ์œ ํ˜• +์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”? + +- [ ] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ +- [ ] ๋ฒ„๊ทธ ์ˆ˜์ • +- [ ] CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ +- [ ] ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ(์˜คํƒ€ ์ˆ˜์ •, ํƒญ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ, ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ) +- [ ] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง +- [ ] ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ • +- [ ] ๋ฌธ์„œ ์ˆ˜์ • +- [ ] ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช… ์ˆ˜์ • +- [ ] ํŒŒ์ผ ํ˜น์€ ํด๋” ์‚ญ์ œ + +## ์ž‘์—… ์ƒ์„ธ ๋‚ด์šฉ diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 0000000..f784544 --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,46 @@ +name: ๐Ÿš€ CI/CD Pipeline + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main, develop ] + +jobs: + # ๐Ÿ“ ๊ธฐ๋ณธ ๊ฒ€์ฆ + basic-checks: + name: โœ… ๊ธฐ๋ณธ ๊ฒ€์ฆ + runs-on: ubuntu-latest + + steps: + - name: ๐Ÿ“ฅ ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ + uses: actions/checkout@v4 + + - name: ๐Ÿ Python ํ™˜๊ฒฝ ์„ค์ • + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: ๐Ÿ” Python ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ + run: | + find . -name "*.py" -exec python -m py_compile {} \; || echo "Python ํŒŒ์ผ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ ์™„๋ฃŒ" + + - name: ๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํ™•์ธ + run: | + echo "๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ:" + ls -la + echo "โœ… ๊ธฐ๋ณธ ๊ฒ€์ฆ ์™„๋ฃŒ" + + # ๐ŸŽ‰ ์„ฑ๊ณต ์•Œ๋ฆผ + success: + name: ๐ŸŽ‰ ๊ฒ€์ฆ ์™„๋ฃŒ + runs-on: ubuntu-latest + needs: basic-checks + if: success() + + steps: + - name: โœ… ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ + run: | + echo "๐ŸŽ‰ ๋ชจ๋“  ๊ฒ€์ฆ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!" + echo "๐Ÿ“ ์ปค๋ฐ‹: ${{ github.sha }}" + echo "๐ŸŒฟ ๋ธŒ๋žœ์น˜: ${{ github.ref }}" \ No newline at end of file diff --git a/README.md b/README.md index 0c20f0d..521ca26 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,32 @@ ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜์„ธ์š”. +## ํ™˜๊ฒฝ ์„ค์ • + +1. Python 3.13 ์ด์ƒ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. + +2. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”: + + ```shell + pip install -r requirements.txt + ``` + +3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •: + + - `.env.example` ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ `.env` ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”: + + ```shell + cp .env.example .env + ``` + + - `.env` ํŒŒ์ผ์„ ์—ด๊ณ  `GOOGLE_API_KEY`์— ์‹ค์ œ Google Generative AI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. + ## ์‚ฌ์šฉ๋ฒ• -์‚ฌ์šฉ๋ฒ•์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜์„ธ์š”. \ No newline at end of file +`api.py`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Gemini AI์™€ ์ฑ„ํŒ…์„ ์‹œ์ž‘ํ•˜์„ธ์š”: + +```shell +python api.py +``` + +์ฑ„ํŒ… ์ค‘ 'quit'๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. diff --git a/api.py b/api.py new file mode 100644 index 0000000..aa15099 --- /dev/null +++ b/api.py @@ -0,0 +1,27 @@ +# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ +# pip install google-generativeai python-dotenv + +import os +from dotenv import load_dotenv +import google.generativeai as genai + +load_dotenv() + +# API ํ‚ค ์„ค์ • +genai.configure(api_key=os.getenv('GOOGLE_API_KEY')) + +# ๋ชจ๋ธ ์ดˆ๊ธฐํ™” +model = genai.GenerativeModel('gemini-2.0-flash-lite') + +# ๋Œ€ํ™”ํ˜• ์ฑ„ํŒ… ์‹œ์ž‘ +chat = model.start_chat(history=[]) + +print("Gemini AI์™€ ์ฑ„ํŒ…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. 'quit'๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.") + +while True: + user_input = input("You: ") + if user_input.lower() == 'quit': + print("์ฑ„ํŒ…์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.") + break + response = chat.send_message(user_input) + print("Gemini:", response.text) \ No newline at end of file diff --git a/docs/git-workflow.md b/docs/git-workflow.md new file mode 100644 index 0000000..382a161 --- /dev/null +++ b/docs/git-workflow.md @@ -0,0 +1,168 @@ +# ๐ŸŒฟ Git Branch Strategy + +## ๐Ÿ“‹ ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ + +``` +main (ํ”„๋กœ๋•์…˜) +โ”œโ”€โ”€ develop (๊ฐœ๋ฐœ ํ†ตํ•ฉ) + โ”œโ”€โ”€ feat/login-system + โ”œโ”€โ”€ feat/user-dashboard + โ”œโ”€โ”€ feat/ai-integration + โ””โ”€โ”€ feat/data-processing +``` + +## ๐ŸŽฏ ๋ธŒ๋žœ์น˜ ์„ค๋ช… + +### **main** ๐Ÿš€ +- **๋ชฉ์ **: ์•ˆ์ •์ ์ธ ํ”„๋กœ๋•์…˜ ๋ธŒ๋žœ์น˜ +- **ํŠน์ง•**: ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์œ ์ง€ +- **๋ณดํ˜ธ**: ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€, PR์„ ํ†ตํ•ด์„œ๋งŒ ์—…๋ฐ์ดํŠธ +- **์ž๋™ํ™”**: ๋จธ์ง€ ์‹œ ์ž๋™ ๋ฐฐํฌ ์‹คํ–‰ + +### **develop** ๐Ÿ”ง +- **๋ชฉ์ **: ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜ (๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜) +- **ํŠน์ง•**: ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ๋ฒ ์ด์Šค +- **์—ญํ• **: ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋“ค์ด ๋จธ์ง€๋˜๋Š” ์ค‘์‹ฌ์  +- **ํ…Œ์ŠคํŠธ**: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ ํ’ˆ์งˆ ๊ฒ€์‚ฌ ์‹คํ–‰ + +### **feat/*** โœจ +- **๋ชฉ์ **: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋ณ„ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ +- **๋ช…๋ช… ๊ทœ์น™**: `feat/๊ธฐ๋Šฅ๋ช…` (์˜ˆ: `feat/user-authentication`) +- **์ƒ์„ฑ**: develop ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐ +- **๋จธ์ง€**: develop ๋ธŒ๋žœ์น˜๋กœ PR ์ƒ์„ฑ + +## ๐Ÿ”„ ์›Œํฌํ”Œ๋กœ์šฐ + +### 1. **์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์‹œ์ž‘** +```bash +# develop ๋ธŒ๋žœ์น˜์—์„œ ์ตœ์‹  ์ฝ”๋“œ ๋ฐ›๊ธฐ +git checkout develop +git pull origin develop + +# ์ƒˆ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ +git checkout -b feat/new-feature + +# ๊ฐœ๋ฐœ ์ž‘์—…... +git add . +git commit -m "[FEATURE] ์ƒˆ ๊ธฐ๋Šฅ ๊ตฌํ˜„" + +# ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ +git push origin feat/new-feature +``` + +### 2. **Pull Request ์ƒ์„ฑ** +- **From**: `feat/new-feature` +- **To**: `develop` +- **๋ฆฌ๋ทฐ**: ํŒ€์› ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ•„์ˆ˜ +- **์ฒดํฌ**: CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ต๊ณผ ํ•„์ˆ˜ + +### 3. **๋ฆด๋ฆฌ์ฆˆ ํ”„๋กœ์„ธ์Šค** +```bash +# develop โ†’ main PR ์ƒ์„ฑ +# ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ›„ ๋จธ์ง€ +# main ๋ธŒ๋žœ์น˜ ์ž๋™ ๋ฐฐํฌ +``` + +### 4. **๋ธŒ๋žœ์น˜ ์ •๋ฆฌ** +```bash +# ๋จธ์ง€ ์™„๋ฃŒ๋œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ +git branch -d feat/completed-feature +git push origin --delete feat/completed-feature +``` + +## ๐Ÿ“ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™ + +### **ํ˜•์‹** +``` +[TYPE] ์ œ๋ชฉ + +์ƒ์„ธ ์„ค๋ช… (์„ ํƒ์‚ฌํ•ญ) +``` + +### **ํƒ€์ž…** +- `[FEATURE]`: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ +- `[BUG]`: ๋ฒ„๊ทธ ์ˆ˜์ • +- `[DOCS]`: ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ +- `[REFACTOR]`: ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง +- `[TEST]`: ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€/์ˆ˜์ • +- `[STYLE]`: ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ + +### **์˜ˆ์‹œ** +```bash +git commit -m "[FEATURE] ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌํ˜„ + +- JWT ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ +- ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ API ์—”๋“œํฌ์ธํŠธ +- ์‚ฌ์šฉ์ž ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ" +``` + +## ๐Ÿ›ก๏ธ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™ + +### **main ๋ธŒ๋žœ์น˜** +- โœ… PR ๋ฆฌ๋ทฐ ํ•„์ˆ˜ (์ตœ์†Œ 1๋ช…) +- โœ… ์ƒํƒœ ์ฒดํฌ ํ†ต๊ณผ ํ•„์ˆ˜ +- โœ… ์ตœ์‹  ์ƒํƒœ ์œ ์ง€ ํ•„์ˆ˜ +- โŒ ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€ +- โŒ ๊ฐ•์ œ ํ‘ธ์‹œ ๊ธˆ์ง€ + +### **develop ๋ธŒ๋žœ์น˜** +- โœ… PR ๋ฆฌ๋ทฐ ๊ถŒ์žฅ +- โœ… ์ƒํƒœ ์ฒดํฌ ํ†ต๊ณผ ํ•„์ˆ˜ +- โœ… ์ตœ์‹  ์ƒํƒœ ์œ ์ง€ ๊ถŒ์žฅ + +## ๐Ÿš€ ์ž๋™ํ™” ํŠธ๋ฆฌ๊ฑฐ + +### **develop ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ ์‹œ** +- ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ (Black, isort, Flake8) +- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ +- ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹คํ–‰ +- ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ฒดํฌ + +### **main ๋ธŒ๋žœ์น˜ ๋จธ์ง€ ์‹œ** +- ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰ +- ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์ค€๋น„ +- ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ž๋™ ์ƒ์„ฑ +- ํƒœ๊ทธ ์ƒ์„ฑ ๋ฐ GitHub Release + +## ๐Ÿ“Š ๋ธŒ๋žœ์น˜ ํ˜„ํ™ฉ ๋ชจ๋‹ˆํ„ฐ๋ง + +### **ํ™•์ธ ๋ฐฉ๋ฒ•** +```bash +# ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ํ™•์ธ +git branch + +# ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ํฌํ•จ ์ „์ฒด ํ™•์ธ +git branch -a + +# ๋ธŒ๋žœ์น˜ ๊ฐ„ ์ฐจ์ด ํ™•์ธ +git log --oneline --graph --all + +# ๋จธ์ง€๋˜์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜ ํ™•์ธ +git branch --no-merged develop +``` + +### **์ •๋ฆฌ ๋ช…๋ น์–ด** +```bash +# ๋จธ์ง€ ์™„๋ฃŒ๋œ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ +git branch --merged develop | grep -v develop | xargs git branch -d + +# ์›๊ฒฉ์—์„œ ์‚ญ์ œ๋œ ๋ธŒ๋žœ์น˜ ๋กœ์ปฌ์—์„œ ์ •๋ฆฌ +git remote prune origin +``` + +## ๐ŸŽฏ ๋‹ค์Œ ๋‹จ๊ณ„ + +1. **GitHub ์„ค์ •** + - develop์„ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋กœ ์„ค์ • + - ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™ ์„ค์ • + - PR ํ…œํ”Œ๋ฆฟ ํ™œ์„ฑํ™” + +2. **์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ** + - `feat/project-setup` + - `feat/core-ai-module` + - `feat/api-server` + +3. **ํŒ€ ๊ฐ€์ด๋“œ๋ผ์ธ ๊ณต์œ ** + - ๋ธŒ๋žœ์น˜ ์ „๋žต ๋ฌธ์„œ ๊ณต์œ  + - ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™ ๊ต์œก + - PR ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ์ •๋ฆฝ \ No newline at end of file diff --git a/docs/planned-issues.md b/docs/planned-issues.md new file mode 100644 index 0000000..b5f7e98 --- /dev/null +++ b/docs/planned-issues.md @@ -0,0 +1,45 @@ +# ๐Ÿ“‹ ์˜ˆ์ •๋œ GitHub Issues + +## Issue #2: [FEATURE] ํ”„๋กœ์ ํŠธ README ๋ฌธ์„œ ๊ฐœ์„  +- **๋ชฉ์ **: ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ ๋ฐ ์‚ฌ์šฉ๋ฒ• ๋ฌธ์„œํ™” +- **๋ธŒ๋žœ์น˜**: `feat/2` +- **์ž‘์—… ๋‚ด์šฉ**: + - ํ”„๋กœ์ ํŠธ ๊ฐœ์š” ์ž‘์„ฑ + - ์„ค์น˜ ๊ฐ€์ด๋“œ ์ž‘์„ฑ + - ์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ ์ถ”๊ฐ€ + - ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ผ์ธ ์ž‘์„ฑ + +## Issue #3: [FEATURE] AI ์ฝ”์–ด ๋ชจ๋“ˆ ์ดˆ๊ธฐ ๊ตฌ์กฐ ์„ค๊ณ„ +- **๋ชฉ์ **: AI ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ ๋ชจ๋“ˆ ๊ตฌ์กฐ ์„ค๊ณ„ +- **๋ธŒ๋žœ์น˜**: `feat/3` +- **์ž‘์—… ๋‚ด์šฉ**: + - AI ๋ชจ๋ธ ์ถ”์ƒํ™” ํด๋ž˜์Šค ์„ค๊ณ„ + - ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ ์„ค๊ณ„ + - ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ + - ์ดˆ๊ธฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ + +## Issue #4: [FEATURE] API ์„œ๋ฒ„ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ตฌ์ถ• +- **๋ชฉ์ **: REST API ์„œ๋ฒ„ ๊ธฐ๋ณธ ํ‹€ ๊ตฌ์ถ• +- **๋ธŒ๋žœ์น˜**: `feat/4` +- **์ž‘์—… ๋‚ด์šฉ**: + - FastAPI/Flask ์„œ๋ฒ„ ๊ธฐ๋ณธ ์„ค์ • + - ๊ธฐ๋ณธ ์—”๋“œํฌ์ธํŠธ ๊ตฌํ˜„ + - ํ™˜๊ฒฝ ์„ค์ • ๊ด€๋ฆฌ + - ๋กœ๊น… ์‹œ์Šคํ…œ ๊ตฌ์ถ• + +## Issue #5: [BUG] CI/CD ์›Œํฌํ”Œ๋กœ์šฐ ์˜ค๋ฅ˜ ์ˆ˜์ • +- **๋ชฉ์ **: ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • +- **๋ธŒ๋žœ์น˜**: `bug/5` +- **์ž‘์—… ๋‚ด์šฉ**: + - ์˜์กด์„ฑ ์„ค์น˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ + - ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ ์ˆ˜์ • + - ์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™” + +## Issue #6: [DOCS] API ๋ฌธ์„œ ์ž‘์„ฑ +- **๋ชฉ์ **: API ์‚ฌ์šฉ๋ฒ• ๋ฐ ์˜ˆ์‹œ ๋ฌธ์„œํ™” +- **๋ธŒ๋žœ์น˜**: `docs/6` +- **์ž‘์—… ๋‚ด์šฉ**: + - OpenAPI/Swagger ๋ฌธ์„œ ์ƒ์„ฑ + - API ์—”๋“œํฌ์ธํŠธ ์„ค๋ช… + - ์‚ฌ์šฉ ์˜ˆ์‹œ ์ฝ”๋“œ ์ž‘์„ฑ + - ์—๋Ÿฌ ์ฝ”๋“œ ์ •์˜ \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bd7aa8d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +google-generativeai +python-dotenv \ No newline at end of file