diff --git a/README.md b/README.md index 3e20804..ce9e64c 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,115 @@ -# โœจProject Conventionโœจ ---- +# ๐Ÿฑ ์ž”๋ฐ˜ํ”Œ๋ŸฌํŒ… Backend -
- -## โœ‰๏ธ Commit Convention +์ง€์—ญ ๋ฐ˜์ฐฌ ๋งค๋ฌผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ **์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ๋ฐ˜์ฐฌ ์ถ”์ฒœ๊ณผ ๊ฒฝ๋กœ ์ตœ์ ํ™”**๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. +Spring Boot๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, **FastAPI ๊ธฐ๋ฐ˜ AI ์ถ”์ฒœ ์„œ๋ฒ„**์™€ ์—ฐ๋™๋˜์–ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. -์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” **Udacity ์Šคํƒ€์ผ**์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ž‘์„ฑ +--- -``` -type: Subject (์ œ๋ชฉ) +## ๐Ÿš€ Tech Stack +struct-be -body (๋ณธ๋ฌธ) (๊ธด ์„ค๋ช…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ž‘์„ฑ) -footer (๊ผฌ๋ฆฌ๋ง) (issue tracker ID๋ฅผ ๋ช…์‹œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์ž‘์„ฑ) -``` -
+### ๐Ÿ”น Backend +- **Java 21** +- **Spring Boot 3.5.3** +- **MySQL** : ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค +- **Swagger (springdoc-openapi)** : API ๋ฌธ์„œํ™” + -### ๐Ÿ›  **type**: ์ปค๋ฐ‹์˜ ์œ ํ˜• -| ํƒ€์ž… | ์„ค๋ช… | -|------------|------------------------------------------------| -| `feat` | โœจ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ | -| `fix` | ๐Ÿ› ๋ฒ„๊ทธ ์ˆ˜์ • | -| `docs` | ๐Ÿ“ ๋ฌธ์„œ ์ˆ˜์ • (README, ์ฃผ์„ ๋“ฑ) | -| `style` | ๐Ÿ’„ ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ ๊ธฐ๋Šฅ ์˜ํ–ฅ ์—†๋Š” ๋ณ€๊ฒฝ | -| `refactor` | โ™ป๏ธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€ํ™” ์—†์Œ) | -| `test` | โœ… ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ • | -| `chore` | ๐Ÿ”ง ๋นŒ๋“œ ์„ค์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์„ค์ • ๋“ฑ ๊ธฐํƒ€ ์ž‘์—… | -| `perf` | โšก ์„ฑ๋Šฅ ๊ฐœ์„  | -| `ci` | ๐Ÿ”„ CI ๊ด€๋ จ ์„ค์ • ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • | -| `revert` | โš™๏ธ ์ด์ „ ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ | +### ๐Ÿ”น AI / Recommendation +- **FastAPI (Python)** : AI ์ถ”์ฒœ ์„œ๋ฒ„ +- **GPT-4o-mini** + - ๐Ÿณ **์š”๋ฆฌ ๋ ˆ์‹œํ”ผ ์ƒ์„ฑ** (์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋ฐ˜์ฐฌ ๊ธฐ๋ฐ˜) + - ๐Ÿฅ— **์‹๋‹จ ํ…Œ๋งˆ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ** (๋‹ค์ด์–ดํŠธ/ํ‚คํ† /์ €์—ผ/๋ฒŒํฌ์—…/ํ˜ˆ๋‹น) +- **Fine-tuning** + - GPT-4o-mini๋ฅผ **์˜์–‘์„ฑ๋ถ„ํ‘œ ๋ฐ์ดํ„ฐ๋กœ ํŒŒ์ธํŠœ๋‹** + โ†’ ๋งค๋ฌผ์˜ ์‹ค์ œ ์˜์–‘ ์„ฑ๋ถ„ ๋ถ„์„ ํ›„ ๋งž์ถคํ˜• ์ถ”์ฒœ ์ œ๊ณต -
+ -### ๐Ÿ–Š๏ธ **Subject**: ์ œ๋ชฉ -- 50์ž ์ด๋‚ด๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑ -- ๋งˆ์นจํ‘œ(`.`) ๊ธˆ์ง€ -- ๊ณผ๊ฑฐ ์‹œ์ œ X, ๋ช…๋ น์–ด ์‚ฌ์šฉ +### ๐Ÿ”น DevOps +- **Gradle** : ๋นŒ๋“œ & ์˜์กด์„ฑ ๊ด€๋ฆฌ +- **GitHub Actions** : CI/CD ํŒŒ์ดํ”„๋ผ์ธ + - Build & Test + - Docker Build & Push โ†’ DockerHub ์—…๋กœ๋“œ +- **Docker** : ์ปจํ…Œ์ด๋„ˆํ™” ๋ฐ ๋ฐฐํฌ -
+ -### ๐Ÿ“ **Body**: ๋ณธ๋ฌธ -- **์„ ํƒ ์‚ฌํ•ญ** -- ์ œ๋ชฉ์—์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์—†๋Š” ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณต -- "๋ฌด์—‡์„"๊ณผ "์™œ"๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ์„ธํžˆ ๊ธฐ์ˆ  -- ํ•œ ์ค„๋‹น 72์ž ์ด๋‚ด๋กœ ์ž‘์„ฑ -- ํ•„์š”์‹œ Markdown ์‚ฌ์šฉ ๊ฐ€๋Šฅ +--- +## ๐Ÿ“‚ Project Structure +```text +๐Ÿ“ฆ src +โ”ฃ ๐Ÿ“‚ main +โ”ƒ โ”ฃ ๐Ÿ“‚ java/com/example/Centralthon +โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ domain # ๋„๋ฉ”์ธ ๋กœ์ง +โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ global # ๊ณตํ†ต ์„ค์ • ๋ฐ ์œ ํ‹ธ +โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ core/exception # ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ +โ”ƒ โ”ฃ ๐Ÿ“‚ resources +โ”ƒ โ”ƒ โ”ฃ application.properties # ํ™˜๊ฒฝ ์„ค์ • +โ”ฃ ๐Ÿ“‚ test # ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ +``` --- -
+## ๐Ÿ›  ์ฃผ์š” ๊ธฐ๋Šฅ -## ๐ŸŒฟ Git Flow ๋ธŒ๋žœ์น˜ ์ „๋žต (with `main`) ๐ŸŒฟ +### 1. ๐Ÿ“ ๋ฐ˜์ฐฌ ๋งค๋ฌผ ์กฐํšŒ +- ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ **๋ฐ˜๊ฒฝ 2km ์ด๋‚ด**์˜ ๋งค๋ฌผ ๋ชฉ๋ก ์กฐํšŒ +- ๊ฐ€๊ฒŒ ์ •๋ณด, ๋ฉ”๋‰ด ์ •๋ณด, ๊ฐ€๊ฒฉ, ํ• ์ธ์œจ ํฌํ•จ +### 2. ๐Ÿšถ ์ตœ์  ๊ฒฝ๋กœ ์ œ๊ณต +- ์‚ฌ์šฉ์ž๊ฐ€ ๋งค๋ฌผ์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ณ  ํ”ฝ์—… ์˜ˆ์•ฝํ•˜๋ฉด + ํ•ด๋‹น ๊ฐ€๊ฒŒ๋“ค์„ ๊ฒฝ์œ ํ•˜๋Š” **๋„๋ณด ์ตœ์  ๊ฒฝ๋กœ(TSP ๊ธฐ๋ฐ˜)** ์ œ๊ณต +- **Tmap API + ๋‚ด๋ถ€ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™œ์šฉ** -### ๐ŸŒด ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜ -| ๋ธŒ๋žœ์น˜ | ์—ญํ•  | -|--------|------| -| `main` | ์ตœ์ข… ๋ฐฐํฌ์šฉ ๋ธŒ๋žœ์น˜ (stable) | -| `develop` | ๋‹ค์Œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ | +### 3. ๐Ÿณ ์š”๋ฆฌ ๋ ˆ์‹œํ”ผ ์ถ”์ฒœ (AI) +- ๊ตฌ๋งคํ•œ ๋ฐ˜์ฐฌ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” **๋ ˆ์‹œํ”ผ ์ž๋™ ์ƒ์„ฑ** +- **GPT-4o-mini ํ™œ์šฉ** -
+### 4. ๐Ÿฅ— ๋งž์ถคํ˜• ์‹๋‹จ ์ถ”์ฒœ (AI Fine-tuning) +- ๋‹ค์„ฏ ๊ฐ€์ง€ ์‹๋‹จ ํ…Œ๋งˆ ์ œ๊ณต: + - ๋‹ค์ด์–ดํŠธ / ํ‚คํ†  / ์ €์—ผ / ๋ฒŒํฌ์—… / ํ˜ˆ๋‹น ์กฐ์ ˆ +- **GPT-4o-mini Fine-tuning** โ†’ ์‹ค์ œ **์˜์–‘์„ฑ๋ถ„ํ‘œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต**์‹œ์ผœ, ๋งค๋ฌผ์˜ ์„ฑ๋ถ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ๋งˆ๋ณ„ ๋งž์ถคํ˜• ์ถ”์ฒœ ์ œ๊ณต -### ๐ŸŒฑ **์ž‘์—… ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ ๊ทœ์น™** +--- -``` -type/#issue๋ฒˆํ˜ธ (์ž‘์—… ๋‹จ์œ„๋Š” ๊ธฐ๋Šฅ/์ˆ˜์ •/๋ฆฌํŒฉํ† ๋ง ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„) -``` +## โš™๏ธ CI/CD Workflow +### ๐Ÿ”น CI Pipeline +1. Gradle ๋นŒ๋“œ โ†’ Spring Boot JAR ์ƒ์„ฑ +2. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ +3. DockerHub ํ‘ธ์‹œ (latest, commit sha ํƒœ๊ทธ) -| prefix | ์„ค๋ช… | ์˜ˆ์‹œ | -|--------------|------------------------------|-----------------------------------| -| `feature/` | โœจ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ | `feature/#15` | -| `fix/` | ๐Ÿ› ๋ฒ„๊ทธ ์ˆ˜์ • | `fix/#42` | -| `refactor/` | โ™ป๏ธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง | `refactor/#23` | -| `chore/` | ๐Ÿ”ง ์„ค์ • ๋ณ€๊ฒฝ, ์žก์ผ | `chore/#25` | -| `perf/` | โšก ์„ฑ๋Šฅ ๊ฐœ์„  | `perf/#94` | -| `hotfix/` | ๐Ÿš‘ ๊ธ‰ํ•œ ์ˆ˜์ • (main์—์„œ ๋ฐ”๋กœ ๋ถ„๊ธฐ) | `hotfix/#102` | -| `test/` | ๐Ÿงช ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€/์ˆ˜์ • | `test/#55` | +### ๐Ÿ”น CD Pipeline +1. ๋Œ€์ƒ ์„œ๋ฒ„์—์„œ DockerHub์—์„œ pull +2. ์ปจํ…Œ์ด๋„ˆ ์žฌ๊ธฐ๋™(๊ต์ฒด ๋ฐฐํฌ) -
-### ๐Ÿš€ ๋ธŒ๋žœ์น˜ ํ๋ฆ„ ์š”์•ฝ +๐Ÿ‘‰ GitHub Actions์—์„œ **`main` ๋ธŒ๋žœ์น˜์— push ์‹œ ์ž๋™ ์‹คํ–‰** -```text -1. main โ† ๋ฐฐํฌ -2. develop โ† ํ†ตํ•ฉ ๊ฐœ๋ฐœ (PR ๋Œ€์ƒ) -3. develop์—์„œ feature/fix/... ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ -4. ๊ธฐ๋Šฅ ์™„๋ฃŒ ํ›„ develop์œผ๋กœ PR & ๋จธ์ง€ -5. ๋ฐฐํฌ ์‹œ develop โ†’ main ๋จธ์ง€ -6. ๊ธ‰ํ•œ ์ˆ˜์ •์€ hotfix์—์„œ main โ†’ develop ๋ณ‘ํ•ฉ -``` +--- +## ๐Ÿ“Š ERD +image + + +--- + +## ๐Ÿ“Œ API ๋ชฉ๋ก (์ฃผ์š” ์—”๋“œํฌ์ธํŠธ) + +- `GET /api/menus` โ†’ ์‚ฌ์šฉ์ž ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ฐ˜๊ฒฝ 2km ๋‚ด ๋งค๋ฌผ ์กฐํšŒ +- `POST /api/routes/directions` โ†’ ํ”ฝ์—… ์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ์ตœ์  ๊ฒฝ๋กœ ์ƒ์„ฑ +- `POST /api/menus/tips` โ†’ ๊ตฌ๋งค ๋ฐ˜์ฐฌ ๊ธฐ๋ฐ˜ ์š”๋ฆฌ ๋ ˆ์‹œํ”ผ ์ถ”์ฒœ (AI) +- `POST /api/menus/recommend` โ†’ ์‹๋‹จ ํ…Œ๋งˆ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ (AI Fine-tuning) + +Swagger ๋ฌธ์„œ: +๐Ÿ‘‰ [https://52.78.244.98.nip.io/api/swagger-ui/index.html](https://52.78.244.98.nip.io/api/swagger-ui/index.html) --- + + diff --git a/docs/images/server.png b/docs/images/server.png new file mode 100644 index 0000000..653369b Binary files /dev/null and b/docs/images/server.png differ