์ด ํ๋ก์ ํธ๋ ๊ดํ๋ฌธ ๊ทผ์ฒ์์ ์ด์๋ ์์์ ๋ค์ ์ํ ๋ฐฐ๋ฌ ๋ฐ ํฌ์ฅ ์์ ์ฃผ๋ฌธ ๊ด๋ฆฌ ํ๋ซํผ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ํ๋ซํผ์ ์์์ ์ ์ฃผ๋ฌธ ๊ด๋ฆฌ, ๊ฒฐ์ ์ฒ๋ฆฌ, ์ฃผ๋ฌธ ๋ด์ญ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํฅํ ๋ฐฐ๋ฌ(๋ผ์ด๋ ํ ๋น, ๋ฐฐ์ก ์ํ ๊ด๋ฆฌ) ๊ธฐ๋ฅ์ ๋ณ๋ ๊ฐ๋ฐ ์์ ์ ๋๋ค.
- ๊ฐ ๋๋ฉ์ธ (์ฌ์ฉ์, ๊ฐ๊ฒ, ์ํ, ์ฃผ๋ฌธ, ๊ฒฐ์ , ๋ฆฌ๋ทฐ/ํ์ , AI ์์ฒญ ๋ก๊ทธ)
- CRUD ๊ตฌํ
- ๊ฒ์ ๊ธฐ๋ฅ ํฌํจ: ๊ธฐ๋ณธ ๊ฒ์ ์กฐ๊ฑด ๋ฐ ์ ๋ ฌ ๊ธฐ๋ฅ (์์ฑ์ผ, ์์ ์ผ ์)
- ํ์ด์ง๋น ๋ ธ์ถ ๊ฑด์: ๊ธฐ๋ณธ 10๊ฑด, ์ต์ ์ผ๋ก 30๊ฑด, 50๊ฑด ์ ํ (๊ทธ ์ธ๋ ๊ธฐ๋ณธ 10๊ฑด์ผ๋ก ๊ณ ์ )
- ์ ๊ทผ ๊ถํ ๊ด๋ฆฌ
- ๊ณ ๊ฐ: ์์ ์ ์ฃผ๋ฌธ ๋ด์ญ๋ง ์กฐํ ๊ฐ๋ฅ
- ๊ฐ๊ฒ ์ฃผ์ธ: ์์ ์ ๊ฐ๊ฒ ์ฃผ๋ฌธ ๋ด์ญ, ๊ฐ๊ฒ ์ ๋ณด, ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ฐ ๋ฉ๋ด ์์ ๊ฐ๋ฅ
- ๊ด๋ฆฌ์: ๋ชจ๋ ๊ฐ๊ฒ ๋ฐ ์ฃผ๋ฌธ์ ๋ํ ์ ์ฒด ๊ถํ ๋ณด์
-
ํ์๊ฐ์ (
POST /api/auth/signup)- username:
์ต์ 4์ ์ด์, 10์ ์ดํ์ด๋ฉฐ์๋ฌธ์(a~z), ์ซ์(0~9)๋ก ๊ตฌ์ฑ - password:
์ต์ 8์ ์ด์, 15์ ์ดํ์ด๋ฉฐ์ํ๋ฒณ ๋์๋ฌธ์, ์ซ์, ํน์๋ฌธ์ํฌํจ - ์ฌ์ฉ์ ๊ถํ:
CUSTOMER,OWNER,MANAGER,MASTER
- username:
-
๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์
- JWT ๊ธฐ๋ฐ ์ธ์ฆ (Access Token, Refresh Token ๋ฐ๊ธ ๋ฐ ๊ด๋ฆฌ)
- API ์๋ํฌ์ธํธ:
POST /api/auth/login,POST /api/auth/logout
- ์นด๋ ๊ฒฐ์ ๋ง ์ง์ (PG์ฌ ์ฐ๋์ ํตํด ๊ฒฐ์ ์ ๋ณด ์ ์ฅ)
- ๊ฒฐ์ ํ ์ด๋ธ ์ด์ (๊ฒฐ์ ๋ด์ญ ๊ด๋ฆฌ)
- ์ฃผ๋ฌธ ์์ฑ ํ 5๋ถ ์ด๋ด ์ทจ์ ๊ฐ๋ฅ
- ์จ๋ผ์ธ ์ฃผ๋ฌธ & ๋๋ฉด ์ฃผ๋ฌธ ์ง์ (๊ฐ๊ฒ์์ ์ง์ ์ฃผ๋ฌธ ๊ฐ๋ฅ)
- ์ฃผ๋ฌธ ์ํ ๊ด๋ฆฌ (์งํ ์ค, ์๋ฃ ๋ฑ ๋จ๊ณ๋ณ ์ํ ์ ๋ฐ์ดํธ)
- ๋ฐฐ์ก์ง ์ ๋ณด (์ฃผ์, ์์ฒญ์ฌํญ) ํ์ ์ ๋ ฅ
- ๋ฐฐ์ก ๊ด๋ จ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ ์์
- ๊ฐ๊ฒ ๊ฒ์ ์ ํ๊ท ํ์ ์ด ํจ๊ป ์ถ๋ ฅ๋๋๋ก ๊ตฌํ
- ์ฃผ๋ฌธ ๊ธฐ๋ฐ ๋ฆฌ๋ทฐ ๋ฐ ํ์ ์ ์ฅ (1~5์ ํ์ ์์คํ ์ด์)
- ๊ฐ๊ฒ ๋ชฉ๋ก ์กฐํ ์ ํ์ ๊ณ์ฐ ๋ฐ ๋ ธ์ถ (N+1 ๋ฌธ์ ๊ณ ๋ ค)
- ์ฃผ๋ฌธ ๊ฒ์ ์ ์์์ ๋ฆฌ๋ทฐ ๋ฆฌ์คํธ ํ์
- ์ํ ์ค๋ช
์๋ ์์ฑ
- Google Cloud Generative Language API ์ฐ๋ (
Gemini-1.5 Flash Latest ๋ชจ๋ธํ์ฉ) - ์์์ ์ฌ์ฅ๋์ด ์ํ ์ค๋ช ์ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ์ง์
- Google Cloud Generative Language API ์ฐ๋ (
- AI ์์ฒญ ๊ธฐ๋ก
- AI API ์์ฒญ๊ณผ ์๋ต ๋ฌธ์ฅ์ DB์ ์ ์ฅ
- ์์ฒญ ๊ธ์ ์ ์ ํ + ์๋ต์ ๊ฐ๊ฒฐํ๊ฒ 50์ ์ดํ๋ก ์์ฒญํ์ฌ ์ต์ ํ
- AWS ํ๋ฆฌ ํฐ์ด ํ์ฉํ์ฌ ์ค์ ์๋น์ค ๋ฐฐํฌ
- ๋ฐฐํฌ ๋ฐฉ์: ํ์ผ ์ ๋ก๋, Docker ์ปจํ ์ด๋ ๋ฑ ๋ค์ํ ๋ฐฉ์ ์ง์
- ๊ด๋ฆฌ์ ๊ถํ ์ค์
- ๊ฐ๊ฒ ์ถ๊ฐ ์
๊ด๋ฆฌ์๊ถํ ์ฌ์ฉ์๋ง ๊ฐ๋ฅ
- ๊ฐ๊ฒ ์ถ๊ฐ ์
- RestDocs์ ํ์ฉํ API ๋ฌธ์ํ
- ๊ฐ ๋๋ฉ์ธ ์ฃผ์ API์ ๋ํด ํตํฉ ํ ์คํธ ์์ฑ (์ฑ๊ณต/์คํจ ์ผ์ด์ค ํฌํจ)
- ์ง์ ๊ฒ์ ์ ์นดํ ๊ณ ๋ฆฌ & ์ง์ ์ด๋ฆ ๋ณตํฉ ํํฐ๋ง
- ์์ ์ญ์ ๋์ ์จ๊น ์ฒ๋ฆฌ ๋ฐฉ์ ์ ์ฉ
- ๊ฐ์ฌ ๋ก๊ทธ ๊ธฐ๋ก (์์ฑ์ผ, ์์ ์ผ, ์ญ์ ์ผ ์ ๋ณด ํฌํจ)
- ์ง์ญ ๋ฐ ์นดํ ๊ณ ๋ฆฌ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ
- Spring Security๋ฅผ ํ์ฉํ ์ ๊ทผ ๊ถํ ๊ด๋ฆฌ
- Java 17
- Spring Boot 3.x
- Gradle
- Docker (์ ํ)
- AWS ํ๋ฆฌ ํฐ์ด (๋ฐฐํฌ ํ๊ฒฝ)
# ํ๋ก์ ํธ ํด๋ก
git clone https://github.com/2ana9/delievery-management.git
cd delivery-management
# ํ๊ฒฝ๋ณ์ ์ค์
cp .env.example .env
# ๋น๋ ๋ฐ ์คํ
./gradlew bootRun
# ๋น๋ ๋ฐ ์คํ
$ ./gradlew build
$ java -jar build/libs/delivery-management-0.0.1-SNAPSHOT.jar- postman UI: postman
- restdocs: restdocs(์์ฑ์ค!)
| ๋ถ์ผ | ๊ธฐ์ |
|---|---|
| Backend | Spring Boot, JPA (ORM ํ๋ ์์ํฌ), OpenFeign, QueryDSL (๋์ ์ฟผ๋ฆฌ ์์ฑ), Specification (JPA์์ ์ ๊ณตํ๋ ๋์ ์ฟผ๋ฆฌ ์์ฑ ์ธํฐํ์ด์ค) Kibana(Elasticsearch ๋ฐ์ดํฐ ์๊ฐํ ๋๊ตฌ) |
| Security | Spring Security, JWT (ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ) |
| Database | PostgreSQL, Elasticsearch (๋ถ์ฐ๊ฒ์ ๋ฐ ๋ถ์์์ง), OpenSearch(์ค์๊ฐ ๊ฒ์ ๋ฐ ๋ก๊ทธ ๋ถ์๋๊ตฌ) |
| Cloud | AWS EC2 (๊ฐ์ ์๋ฒ ํธ์คํ ) |
| Chache | Redis (์บ์ฑ ๋ฐ ์ธ์ ๊ด๋ฆฌ), Spring chache(Spring์ ์บ์ฑ ์ถ์ํ), Jedis(Redis์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) |
| API Docs | RestDocs (API ๋ฌธ์ํ๋๊ตฌ) |
| AI ์ฐ๋ | Google Generative Language API (Gemini-1.5) |
| Test | Spring Boot Test, Spring Security Test, JUnit, Mockito |
| ์ญํ | ๋ด๋น์ | ์ธ๋ถ ์ ๋ฌด |
|---|---|---|
| ๋ฆฌ๋ทฐ ๋ฐ ํ์ ๊ด๋ฆฌ | ํ์๊ท | - ๋ฆฌ๋ทฐ ์์คํ
CRUD ์ค๊ณ ๋ฐ ๊ตฌํ - 1~5์ ๊น์ง์ ํ์ ์ ๊ธฐ๋กํ๋ ๊ธฐ๋ฅ ๊ตฌํ - ์ฃผ๋ฌธ ํ๊ฑด๋น ๋ฆฌ๋ทฐ ํ๊ฑด ์์ฑ๊ฐ๋ฅ - softDelete ๊ตฌํ - ๋ฆฌ๋ทฐ ํํฐ๋ง, ์ ๋ ฌ ๊ธฐ๋ฅ ๊ตฌํ - ์ฃผ๋ฌธ ๊ฒ์ ์ ์์์ ๋ฆฌ๋ทฐ ๋ฆฌ์คํธ ํ์ |
| ์ฃผ๋ฌธ(์จ๋ผ์ธ,์คํ๋ผ์ธ) ๊ด๋ฆฌ | ๊ฐํ์ฃผ | - ์ฃผ๋ฌธ ์์คํ
CRUD ์ค๊ณ ๋ฐ ๊ตฌํ - ์จ๋ผ์ธ/์คํ๋ผ์ธ ์ฃผ๋ฌธ ํ๋ฆ ๊ตฌํ - ์ฃผ๋ฌธ ์์ฑ ํ 5๋ถ ์ด๋ด ์ทจ์ ๊ฐ๋ฅ๊ธฐ๋ฅ ๊ตฌํ - softDelete ๊ตฌํ - ์ฃผ๋ฌธ ์ํ ์ถ์ ๊ด๋ฆฌ - ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ ํํฐ๋ง, ์ ๋ ฌ ๊ธฐ๋ฅ ๊ตฌํ - ๊ฒฐ์ ๋ด์ญ ๊ด๋ฆฌ |
| ํ์์ฃผ์ ๋ฐ ์ง์ญ์ฝ๋ ๊ด๋ฆฌ | ๋ฌธ์ค์ | - ํ์ ๋ฐฐ์ก์ง ์ฃผ์ ๊ด๋ฆฌ ์์คํ
CRUD ์ค๊ณ ๋ฐ ๊ตฌํ - ๋ฐฐ์ก์ง์ญ ํ์ฅ์ฑ์ ๊ณ ๋ คํ Elasticsearch ์ฌ์ฉ |
| ๊ฐ๊ฒ,์์ ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ | ์ ๋ค์ | - ๊ฐ๊ฒ, ์์ ์นดํ
๊ณ ๋ฆฌ ์์คํ
CRUD ์ค๊ณ ๋ฐ ๊ตฌํ - ๊ฐ๊ฒ,์์ ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ ์ ๊ด๋ฆฌ์ ๊ถํ๋ง ์ ๊ทผ๊ฐ๋ฅํ๋๋ก ๊ตฌํ - softDelete ๊ตฌํ - Specification์ ์ฌ์ฉํ ๊ฒ์ ํํฐ๋ง ๊ธฐ๋ฅ ๊ตฌํ |
| ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ ,์์๋ฉ๋ด ๊ด๋ฆฌ | ์ ๋จ๊ท | - ํ์๊ฐ์
, ๋ก๊ทธ์ธ ์ค๊ณ ๋ฐ ๊ตฌํ - ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฑ์ Open API ๋ก๊ทธ์ธ ๊ตฌํ - ํ์์ธ์ฆ์ฒ๋ฆฌ ๋ฐ JWT ์ธ์ฆํ ํฐ ๊ตฌํ |
| DB ์ค๊ณ ๋ฐ ๊ด๋ฆฌ | ๋ชจ๋ | |
| AI API ์ฐ๋ | ์ ๋จ๊ท | - Google Generative Language API (Gemini-1.5) ๋ฅผ ์ฌ์ฉํ ๋ฉ๋ด ์ค๋ช
์๋ํ ๊ตฌํ - AI API ์์ฒญ/์๋ต ๋ก๊ทธ DB ์ ์ฅ |
| ํด๋ผ์ฐ๋ ๋ฐฐํฌ | ํ์๊ท | - EC2 ์ธ์คํด์ค ์์ฑ ๋ฐ ์ด๊ธฐ์ค์ - ๋ณด์ ๊ทธ๋ฃน ์ค์ (ํฌํธ ๊ฐ๋ฐฉ ๋ฑ) - ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น - RDS ์ธ์คํด์ค ์์ฑ ๋ฐ ์ค์ - RDS ๋ณด์ ๊ทธ๋ฃน ์ค์ (EC2์์ ์ฐ๊ฒฐ ํ์ฉ) - ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๊ฒฝ ๋ณ์ ์ค์ (RDS ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด ํฌํจ) - ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ (๋ฐฐํฌ ์๋ํ ์คํฌ๋ฆฝํธ ์ ์ฉ ๋ฑ) |
