|
1 | | -# โจProject Conventionโจ |
2 | | ---- |
| 1 | +# ๐ฑ ์๋ฐํ๋ฌํ
Backend |
3 | 2 |
|
4 | | -<br> |
5 | | - |
6 | | -## โ๏ธ Commit Convention |
| 3 | +์ง์ญ ๋ฐ์ฐฌ ๋งค๋ฌผ์ ๊ธฐ๋ฐ์ผ๋ก **์ฌ์ฉ์ ๋ง์ถคํ ๋ฐ์ฐฌ ์ถ์ฒ๊ณผ ๊ฒฝ๋ก ์ต์ ํ**๋ฅผ ์ ๊ณตํ๋ ๋ฐฑ์๋ ์๋ฒ์
๋๋ค. |
| 4 | +Spring Boot๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฉฐ, **FastAPI ๊ธฐ๋ฐ AI ์ถ์ฒ ์๋ฒ**์ ์ฐ๋๋์ด ๋์ํฉ๋๋ค. |
7 | 5 |
|
8 | | -์ปค๋ฐ ๋ฉ์์ง๋ **Udacity ์คํ์ผ**์ ์ฌ์ฉํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์์ฑ |
| 6 | +--- |
9 | 7 |
|
10 | | -``` |
11 | | -type: Subject (์ ๋ชฉ) |
| 8 | +## ๐ Tech Stack |
| 9 | +<img width="1045" height="844" alt="struct-be" src="https://github.com/user-attachments/assets/a10dd991-3e69-46dc-8eb0-152d27e3c1e4" /> |
12 | 10 |
|
13 | | -body (๋ณธ๋ฌธ) (๊ธด ์ค๋ช
์ด ํ์ํ ๊ฒฝ์ฐ์ ์์ฑ) |
14 | 11 |
|
15 | | -footer (๊ผฌ๋ฆฌ๋ง) (issue tracker ID๋ฅผ ๋ช
์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์์ฑ) |
16 | | -``` |
17 | | -<br> |
| 12 | +### ๐น Backend |
| 13 | +- **Java 21** |
| 14 | +- **Spring Boot 3.5.3** |
| 15 | +- **MySQL** : ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค |
| 16 | +- **Swagger (springdoc-openapi)** : API ๋ฌธ์ํ |
18 | 17 |
|
| 18 | +<img src="https://img.shields.io/badge/Java%2021-007396?style=flat-square&logo=java&logoColor=white" /> <img src="https://img.shields.io/badge/Spring%20Boot%203.5.3-6DB33F?style=flat-square&logo=springboot&logoColor=white" /> <img src="https://img.shields.io/badge/MySQL-4479A1?style=flat-square&logo=mysql&logoColor=white" /> <img src="https://img.shields.io/badge/Swagger-85EA2D?style=flat-square&logo=swagger&logoColor=black" /> |
19 | 19 |
|
20 | | -### ๐ **type**: ์ปค๋ฐ์ ์ ํ |
21 | 20 |
|
22 | | -| ํ์
| ์ค๋ช
| |
23 | | -|------------|------------------------------------------------| |
24 | | -| `feat` | โจ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ | |
25 | | -| `fix` | ๐ ๋ฒ๊ทธ ์์ | |
26 | | -| `docs` | ๐ ๋ฌธ์ ์์ (README, ์ฃผ์ ๋ฑ) | |
27 | | -| `style` | ๐ ์ฝ๋ ํฌ๋งทํ
, ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ ๋ฑ ๊ธฐ๋ฅ ์ํฅ ์๋ ๋ณ๊ฒฝ | |
28 | | -| `refactor` | โป๏ธ ์ฝ๋ ๋ฆฌํฉํ ๋ง (๊ธฐ๋ฅ ๋ณํ ์์) | |
29 | | -| `test` | โ
ํ
์คํธ ์ฝ๋ ์ถ๊ฐ ๋๋ ์์ | |
30 | | -| `chore` | ๐ง ๋น๋ ์ค์ , ํจํค์ง ๋งค๋์ ์ค์ ๋ฑ ๊ธฐํ ์์
| |
31 | | -| `perf` | โก ์ฑ๋ฅ ๊ฐ์ | |
32 | | -| `ci` | ๐ CI ๊ด๋ จ ์ค์ ๋ฐ ์คํฌ๋ฆฝํธ ์์ | |
33 | | -| `revert` | โ๏ธ ์ด์ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ | |
| 21 | +### ๐น AI / Recommendation |
| 22 | +- **FastAPI (Python)** : AI ์ถ์ฒ ์๋ฒ |
| 23 | +- **GPT-4o-mini** |
| 24 | + - ๐ณ **์๋ฆฌ ๋ ์ํผ ์์ฑ** (์ฌ์ฉ์๊ฐ ๊ตฌ๋งคํ ๋ฐ์ฐฌ ๊ธฐ๋ฐ) |
| 25 | + - ๐ฅ **์๋จ ํ
๋ง ๊ธฐ๋ฐ ์ถ์ฒ** (๋ค์ด์ดํธ/ํคํ /์ ์ผ/๋ฒํฌ์
/ํ๋น) |
| 26 | +- **Fine-tuning** |
| 27 | + - GPT-4o-mini๋ฅผ **์์์ฑ๋ถํ ๋ฐ์ดํฐ๋ก ํ์ธํ๋** |
| 28 | + โ ๋งค๋ฌผ์ ์ค์ ์์ ์ฑ๋ถ ๋ถ์ ํ ๋ง์ถคํ ์ถ์ฒ ์ ๊ณต |
34 | 29 |
|
35 | | -<br> |
| 30 | +<img src="https://img.shields.io/badge/FastAPI-009688?style=flat-square&logo=fastapi&logoColor=white" /> <img src="https://img.shields.io/badge/GPT--4o%20mini-412991?style=flat-square&logo=openai&logoColor=white" /> |
36 | 31 |
|
37 | | -### ๐๏ธ **Subject**: ์ ๋ชฉ |
38 | 32 |
|
39 | | -- 50์ ์ด๋ด๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ฑ |
40 | | -- ๋ง์นจํ(`.`) ๊ธ์ง |
41 | | -- ๊ณผ๊ฑฐ ์์ X, ๋ช
๋ น์ด ์ฌ์ฉ |
| 33 | +### ๐น DevOps |
| 34 | +- **Gradle** : ๋น๋ & ์์กด์ฑ ๊ด๋ฆฌ |
| 35 | +- **GitHub Actions** : CI/CD ํ์ดํ๋ผ์ธ |
| 36 | + - Build & Test |
| 37 | + - Docker Build & Push โ DockerHub ์
๋ก๋ |
| 38 | +- **Docker** : ์ปจํ
์ด๋ํ ๋ฐ ๋ฐฐํฌ |
42 | 39 |
|
43 | | -<br> |
| 40 | +<img src="https://img.shields.io/badge/Gradle-023038?style=flat-square&logo=gradle&logoColor=white" /> <img src="https://img.shields.io/badge/GitHub%20Actions-2088FF?style=flat-square&logo=githubactions&logoColor=white" /> <img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" /> |
44 | 41 |
|
45 | | -### ๐ **Body**: ๋ณธ๋ฌธ |
46 | 42 |
|
47 | | -- **์ ํ ์ฌํญ** |
48 | | -- ์ ๋ชฉ์์ ์ค๋ช
ํ ์ ์๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณต |
49 | | -- "๋ฌด์์"๊ณผ "์"๋ฅผ ์ค์ฌ์ผ๋ก ์์ธํ ๊ธฐ์ |
50 | | -- ํ ์ค๋น 72์ ์ด๋ด๋ก ์์ฑ |
51 | | -- ํ์์ Markdown ์ฌ์ฉ ๊ฐ๋ฅ |
| 43 | +--- |
52 | 44 |
|
| 45 | +## ๐ Project Structure |
| 46 | +```text |
| 47 | +๐ฆ src |
| 48 | +โฃ ๐ main |
| 49 | +โ โฃ ๐ java/com/example/Centralthon |
| 50 | +โ โ โฃ ๐ domain # ๋๋ฉ์ธ ๋ก์ง |
| 51 | +โ โ โฃ ๐ global # ๊ณตํต ์ค์ ๋ฐ ์ ํธ |
| 52 | +โ โ โฃ ๐ core/exception # ์ ์ญ ์์ธ ์ฒ๋ฆฌ |
| 53 | +โ โฃ ๐ resources |
| 54 | +โ โ โฃ application.properties # ํ๊ฒฝ ์ค์ |
| 55 | +โฃ ๐ test # ๋จ์/ํตํฉ ํ
์คํธ |
| 56 | +``` |
53 | 57 |
|
54 | 58 | --- |
55 | | -<br> |
56 | 59 |
|
| 60 | +## ๐ ์ฃผ์ ๊ธฐ๋ฅ |
57 | 61 |
|
58 | | -## ๐ฟ Git Flow ๋ธ๋์น ์ ๋ต (with `main`) ๐ฟ |
| 62 | +### 1. ๐ ๋ฐ์ฐฌ ๋งค๋ฌผ ์กฐํ |
| 63 | +- ์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก **๋ฐ๊ฒฝ 2km ์ด๋ด**์ ๋งค๋ฌผ ๋ชฉ๋ก ์กฐํ |
| 64 | +- ๊ฐ๊ฒ ์ ๋ณด, ๋ฉ๋ด ์ ๋ณด, ๊ฐ๊ฒฉ, ํ ์ธ์จ ํฌํจ |
59 | 65 |
|
| 66 | +### 2. ๐ถ ์ต์ ๊ฒฝ๋ก ์ ๊ณต |
| 67 | +- ์ฌ์ฉ์๊ฐ ๋งค๋ฌผ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ณ ํฝ์
์์ฝํ๋ฉด |
| 68 | + ํด๋น ๊ฐ๊ฒ๋ค์ ๊ฒฝ์ ํ๋ **๋๋ณด ์ต์ ๊ฒฝ๋ก(TSP ๊ธฐ๋ฐ)** ์ ๊ณต |
| 69 | +- **Tmap API + ๋ด๋ถ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ ํ์ฉ** |
60 | 70 |
|
61 | | -### ๐ด ๊ธฐ๋ณธ ๋ธ๋์น |
62 | | -| ๋ธ๋์น | ์ญํ | |
63 | | -|--------|------| |
64 | | -| `main` | ์ต์ข
๋ฐฐํฌ์ฉ ๋ธ๋์น (stable) | |
65 | | -| `develop` | ๋ค์ ๋ฐฐํฌ๋ฅผ ์ํ ํตํฉ ๊ฐ๋ฐ ๋ธ๋์น | |
| 71 | +### 3. ๐ณ ์๋ฆฌ ๋ ์ํผ ์ถ์ฒ (AI) |
| 72 | +- ๊ตฌ๋งคํ ๋ฐ์ฐฌ๋ค์ ์กฐํฉํ์ฌ ๋ง๋ค ์ ์๋ **๋ ์ํผ ์๋ ์์ฑ** |
| 73 | +- **GPT-4o-mini ํ์ฉ** |
66 | 74 |
|
67 | | -<br> |
| 75 | +### 4. ๐ฅ ๋ง์ถคํ ์๋จ ์ถ์ฒ (AI Fine-tuning) |
| 76 | +- ๋ค์ฏ ๊ฐ์ง ์๋จ ํ
๋ง ์ ๊ณต: |
| 77 | + - ๋ค์ด์ดํธ / ํคํ / ์ ์ผ / ๋ฒํฌ์
/ ํ๋น ์กฐ์ |
| 78 | +- **GPT-4o-mini Fine-tuning** โ ์ค์ **์์์ฑ๋ถํ ๋ฐ์ดํฐ๋ฅผ ํ์ต**์์ผ, ๋งค๋ฌผ์ ์ฑ๋ถ์ ๊ธฐ๋ฐ์ผ๋ก ํ
๋ง๋ณ ๋ง์ถคํ ์ถ์ฒ ์ ๊ณต |
68 | 79 |
|
69 | | -### ๐ฑ **์์
๋ธ๋์น ๋ค์ด๋ฐ ๊ท์น** |
| 80 | +--- |
70 | 81 |
|
71 | | -``` |
72 | | -type/#issue๋ฒํธ (์์
๋จ์๋ ๊ธฐ๋ฅ/์์ /๋ฆฌํฉํ ๋ง ๋ฑ์ผ๋ก ๊ตฌ๋ถ) |
73 | | -``` |
| 82 | +## โ๏ธ CI/CD Workflow |
74 | 83 |
|
| 84 | +### ๐น CI Pipeline |
| 85 | +1. Gradle ๋น๋ โ Spring Boot JAR ์์ฑ |
| 86 | +2. Docker ์ด๋ฏธ์ง ๋น๋ |
| 87 | +3. DockerHub ํธ์ (latest, commit sha ํ๊ทธ) |
75 | 88 |
|
76 | | -| prefix | ์ค๋ช
| ์์ | |
77 | | -|--------------|------------------------------|-----------------------------------| |
78 | | -| `feature/` | โจ ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ | `feature/#15` | |
79 | | -| `fix/` | ๐ ๋ฒ๊ทธ ์์ | `fix/#42` | |
80 | | -| `refactor/` | โป๏ธ ์ฝ๋ ๋ฆฌํฉํ ๋ง | `refactor/#23` | |
81 | | -| `chore/` | ๐ง ์ค์ ๋ณ๊ฒฝ, ์ก์ผ | `chore/#25` | |
82 | | -| `perf/` | โก ์ฑ๋ฅ ๊ฐ์ | `perf/#94` | |
83 | | -| `hotfix/` | ๐ ๊ธํ ์์ (main์์ ๋ฐ๋ก ๋ถ๊ธฐ) | `hotfix/#102` | |
84 | | -| `test/` | ๐งช ํ
์คํธ ์ฝ๋ ์ถ๊ฐ/์์ | `test/#55` | |
| 89 | +### ๐น CD Pipeline |
| 90 | +1. ๋์ ์๋ฒ์์ DockerHub์์ pull |
| 91 | +2. ์ปจํ
์ด๋ ์ฌ๊ธฐ๋(๊ต์ฒด ๋ฐฐํฌ) |
85 | 92 |
|
86 | | -<br> |
87 | 93 |
|
88 | | -### ๐ ๋ธ๋์น ํ๋ฆ ์์ฝ |
| 94 | +๐ GitHub Actions์์ **`main` ๋ธ๋์น์ push ์ ์๋ ์คํ** |
89 | 95 |
|
90 | | -```text |
91 | | -1. main โ ๋ฐฐํฌ |
92 | | -2. develop โ ํตํฉ ๊ฐ๋ฐ (PR ๋์) |
93 | | -3. develop์์ feature/fix/... ๋ธ๋์น ๋ถ๊ธฐ |
94 | | -4. ๊ธฐ๋ฅ ์๋ฃ ํ develop์ผ๋ก PR & ๋จธ์ง |
95 | | -5. ๋ฐฐํฌ ์ develop โ main ๋จธ์ง |
96 | | -6. ๊ธํ ์์ ์ hotfix์์ main โ develop ๋ณํฉ |
97 | | -``` |
| 96 | +--- |
| 97 | +## ๐ ERD |
| 98 | +<img width="885" height="543" alt="image" src="https://github.com/user-attachments/assets/35bf67e7-59e4-4079-8ff5-2290b61343ed" /> |
| 99 | + |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +## ๐ API ๋ชฉ๋ก (์ฃผ์ ์๋ํฌ์ธํธ) |
| 104 | + |
| 105 | +- `GET /api/menus` โ ์ฌ์ฉ์ ์์น ๊ธฐ๋ฐ ๋ฐ๊ฒฝ 2km ๋ด ๋งค๋ฌผ ์กฐํ |
| 106 | +- `POST /api/routes/directions` โ ํฝ์
์์ฝ ๊ธฐ๋ฐ ์ต์ ๊ฒฝ๋ก ์์ฑ |
| 107 | +- `POST /api/menus/tips` โ ๊ตฌ๋งค ๋ฐ์ฐฌ ๊ธฐ๋ฐ ์๋ฆฌ ๋ ์ํผ ์ถ์ฒ (AI) |
| 108 | +- `POST /api/menus/recommend` โ ์๋จ ํ
๋ง ๊ธฐ๋ฐ ์ถ์ฒ (AI Fine-tuning) |
| 109 | + |
| 110 | +Swagger ๋ฌธ์: |
| 111 | +๐ [https://52.78.244.98.nip.io/api/swagger-ui/index.html](https://52.78.244.98.nip.io/api/swagger-ui/index.html) |
98 | 112 |
|
99 | 113 | --- |
| 114 | + |
| 115 | + |
0 commit comments