Skip to content

2ana9/delievery-management

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

531 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋ฐฐ๋‹ฌ ๋ฐ ํฌ์žฅ ์Œ์‹ ์ฃผ๋ฌธ ๊ด€๋ฆฌ ํ”Œ๋žซํผ

๐Ÿ’ก ๊ฐœ์š”

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ด‘ํ™”๋ฌธ ๊ทผ์ฒ˜์—์„œ ์šด์˜๋  ์Œ์‹์ ๋“ค์„ ์œ„ํ•œ ๋ฐฐ๋‹ฌ ๋ฐ ํฌ์žฅ ์Œ์‹ ์ฃผ๋ฌธ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ์Œ์‹์ ์˜ ์ฃผ๋ฌธ ๊ด€๋ฆฌ, ๊ฒฐ์ œ ์ฒ˜๋ฆฌ, ์ฃผ๋ฌธ ๋‚ด์—ญ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ–ฅํ›„ ๋ฐฐ๋‹ฌ(๋ผ์ด๋” ํ• ๋‹น, ๋ฐฐ์†ก ์ƒํƒœ ๊ด€๋ฆฌ) ๊ธฐ๋Šฅ์€ ๋ณ„๋„ ๊ฐœ๋ฐœ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉ์ /์ƒ์„ธ

1. ๋ชจ๋“  ๋„๋ฉ”์ธ์˜ CRUD ๋ฐ Search ๊ธฐ๋Šฅ

  • ๊ฐ ๋„๋ฉ”์ธ (์‚ฌ์šฉ์ž, ๊ฐ€๊ฒŒ, ์ƒํ’ˆ, ์ฃผ๋ฌธ, ๊ฒฐ์ œ, ๋ฆฌ๋ทฐ/ํ‰์ , AI ์š”์ฒญ ๋กœ๊ทธ)
    • CRUD ๊ตฌํ˜„
    • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ํฌํ•จ: ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ์กฐ๊ฑด ๋ฐ ์ •๋ ฌ ๊ธฐ๋Šฅ (์ƒ์„ฑ์ผ, ์ˆ˜์ •์ผ ์ˆœ)
    • ํŽ˜์ด์ง€๋‹น ๋…ธ์ถœ ๊ฑด์ˆ˜: ๊ธฐ๋ณธ 10๊ฑด, ์˜ต์…˜์œผ๋กœ 30๊ฑด, 50๊ฑด ์„ ํƒ (๊ทธ ์™ธ๋Š” ๊ธฐ๋ณธ 10๊ฑด์œผ๋กœ ๊ณ ์ •)
  • ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ
    • ๊ณ ๊ฐ: ์ž์‹ ์˜ ์ฃผ๋ฌธ ๋‚ด์—ญ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ
    • ๊ฐ€๊ฒŒ ์ฃผ์ธ: ์ž์‹ ์˜ ๊ฐ€๊ฒŒ ์ฃผ๋ฌธ ๋‚ด์—ญ, ๊ฐ€๊ฒŒ ์ •๋ณด, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋ฐ ๋ฉ”๋‰ด ์ˆ˜์ • ๊ฐ€๋Šฅ
    • ๊ด€๋ฆฌ์ž: ๋ชจ๋“  ๊ฐ€๊ฒŒ ๋ฐ ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ์ „์ฒด ๊ถŒํ•œ ๋ณด์œ 

2. ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ

  • ํšŒ์›๊ฐ€์ž… (POST /api/auth/signup)

    • username: ์ตœ์†Œ 4์ž ์ด์ƒ, 10์ž ์ดํ•˜์ด๋ฉฐ ์†Œ๋ฌธ์ž(a~z), ์ˆซ์ž(0~9)๋กœ ๊ตฌ์„ฑ
    • password: ์ตœ์†Œ 8์ž ์ด์ƒ, 15์ž ์ดํ•˜์ด๋ฉฐ ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ
    • ์‚ฌ์šฉ์ž ๊ถŒํ•œ: CUSTOMER, OWNER, MANAGER, MASTER
  • ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ

    • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ (Access Token, Refresh Token ๋ฐœ๊ธ‰ ๋ฐ ๊ด€๋ฆฌ)
    • API ์—”๋“œํฌ์ธํŠธ: POST /api/auth/login, POST /api/auth/logout

3. ๊ฒฐ์ œ ์‹œ์Šคํ…œ

  • ์นด๋“œ ๊ฒฐ์ œ๋งŒ ์ง€์› (PG์‚ฌ ์—ฐ๋™์„ ํ†ตํ•ด ๊ฒฐ์ œ ์ •๋ณด ์ €์žฅ)
  • ๊ฒฐ์ œ ํ…Œ์ด๋ธ” ์šด์˜ (๊ฒฐ์ œ ๋‚ด์—ญ ๊ด€๋ฆฌ)

4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ

  • ์ฃผ๋ฌธ ์ƒ์„ฑ ํ›„ 5๋ถ„ ์ด๋‚ด ์ทจ์†Œ ๊ฐ€๋Šฅ
  • ์˜จ๋ผ์ธ ์ฃผ๋ฌธ & ๋Œ€๋ฉด ์ฃผ๋ฌธ ์ง€์› (๊ฐ€๊ฒŒ์—์„œ ์ง์ ‘ ์ฃผ๋ฌธ ๊ฐ€๋Šฅ)
  • ์ฃผ๋ฌธ ์ƒํƒœ ๊ด€๋ฆฌ (์ง„ํ–‰ ์ค‘, ์™„๋ฃŒ ๋“ฑ ๋‹จ๊ณ„๋ณ„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ)

5. ๋ฐฐ์†ก์ง€ ์ •๋ณด ๊ด€๋ฆฌ

  • ๋ฐฐ์†ก์ง€ ์ •๋ณด (์ฃผ์†Œ, ์š”์ฒญ์‚ฌํ•ญ) ํ•„์ˆ˜ ์ž…๋ ฅ
  • ๋ฐฐ์†ก ๊ด€๋ จ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์˜ˆ์ •

6. ๊ฐ€๊ฒŒ ๊ฒ€์ƒ‰ ๊ด€๋ฆฌ

  • ๊ฐ€๊ฒŒ ๊ฒ€์ƒ‰ ์‹œ ํ‰๊ท ํ‰์ ์ด ํ•จ๊ป˜ ์ถœ๋ ฅ๋˜๋„๋ก ๊ตฌํ˜„

7. ๋ฆฌ๋ทฐ ๋ฐ ํ‰์  ๊ธฐ๋Šฅ

  • ์ฃผ๋ฌธ ๊ธฐ๋ฐ˜ ๋ฆฌ๋ทฐ ๋ฐ ํ‰์  ์ €์žฅ (1~5์  ํ‰์  ์‹œ์Šคํ…œ ์šด์˜)
  • ๊ฐ€๊ฒŒ ๋ชฉ๋ก ์กฐํšŒ ์‹œ ํ‰์  ๊ณ„์‚ฐ ๋ฐ ๋…ธ์ถœ (N+1 ๋ฌธ์ œ ๊ณ ๋ ค)
  • ์ฃผ๋ฌธ ๊ฒ€์ƒ‰ ์‹œ ์Œ์‹์  ๋ฆฌ๋ทฐ ๋ฆฌ์ŠคํŠธ ํ‘œ์‹œ

8. AI API ์—ฐ๋™

  • ์ƒํ’ˆ ์„ค๋ช… ์ž๋™ ์ƒ์„ฑ
    • Google Cloud Generative Language API ์—ฐ๋™ (Gemini-1.5 Flash Latest ๋ชจ๋ธ ํ™œ์šฉ)
    • ์Œ์‹์  ์‚ฌ์žฅ๋‹˜์ด ์ƒํ’ˆ ์„ค๋ช…์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›
  • AI ์š”์ฒญ ๊ธฐ๋ก
    • AI API ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ฌธ์žฅ์„ DB์— ์ €์žฅ
    • ์š”์ฒญ ๊ธ€์ž ์ˆ˜ ์ œํ•œ + ์‘๋‹ต์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ 50์ž ์ดํ•˜๋กœ ์š”์ฒญํ•˜์—ฌ ์ตœ์ ํ™”

9. ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋ฐฐํฌ

  • AWS ํ”„๋ฆฌ ํ‹ฐ์–ด ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์„œ๋น„์Šค ๋ฐฐํฌ
  • ๋ฐฐํฌ ๋ฐฉ์‹: ํŒŒ์ผ ์—…๋กœ๋“œ, Docker ์ปจํ…Œ์ด๋„ˆ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹ ์ง€์›

10. Spring Security ๊ณ ๋„ํ™”

  • ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์„ค์ •
    • ๊ฐ€๊ฒŒ ์ถ”๊ฐ€ ์‹œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์‚ฌ์šฉ์ž๋งŒ ๊ฐ€๋Šฅ

11. API ๋ฌธ์„œํ™”

  • RestDocs์„ ํ™œ์šฉํ•œ API ๋ฌธ์„œํ™”

12. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

  • ๊ฐ ๋„๋ฉ”์ธ ์ฃผ์š” API์— ๋Œ€ํ•ด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (์„ฑ๊ณต/์‹คํŒจ ์ผ€์ด์Šค ํฌํ•จ)

13. QueryDSL ๊ตฌํ˜„

  • ์ง€์  ๊ฒ€์ƒ‰ ์‹œ ์นดํ…Œ๊ณ ๋ฆฌ & ์ง€์  ์ด๋ฆ„ ๋ณตํ•ฉ ํ•„ํ„ฐ๋ง

๐Ÿ“Œ ์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ

โœ… ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

  • ์™„์ „ ์‚ญ์ œ ๋Œ€์‹  ์ˆจ๊น€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ ์šฉ
  • ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋ก (์ƒ์„ฑ์ผ, ์ˆ˜์ •์ผ, ์‚ญ์ œ์ผ ์ •๋ณด ํฌํ•จ)

โœ… ํ™•์žฅ์„ฑ ๊ณ ๋ ค

  • ์ง€์—ญ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„

โœ… ๋ณด์•ˆ ๊ฐ•ํ™”

  • Spring Security๋ฅผ ํ™œ์šฉํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ

๐Ÿš€ ์„œ๋น„์Šค ๊ตฌ์„ฑ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•

1. ํ™˜๊ฒฝ ์„ค์ •

  • Java 17
  • Spring Boot 3.x
  • Gradle
  • Docker (์„ ํƒ)
  • AWS ํ”„๋ฆฌ ํ‹ฐ์–ด (๋ฐฐํฌ ํ™˜๊ฒฝ)

2. ์‹คํ–‰ ๋ฐฉ๋ฒ•

2-1. ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ์˜ ์‹คํ–‰๋ฐฉ๋ฒ•

# ํ”„๋กœ์ ํŠธ ํด๋ก 
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

2-2. ๋ฐฐํฌํ™˜๊ฒฝ(AWS EC2)์—์„œ์˜ ์‹คํ–‰๋ฐฉ๋ฒ•

3. API ๋ฌธ์„œ ํ™•์ธ


๐Ÿ— ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„์•ผ ๊ธฐ์ˆ 
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

๐Ÿ“œ ERD

image


๐ŸŽฏ ํŒ€์› ์—ญํ• ๋ถ„๋‹ด

์—ญํ•  ๋‹ด๋‹น์ž ์„ธ๋ถ€ ์—…๋ฌด
๋ฆฌ๋ทฐ ๋ฐ ํ‰์  ๊ด€๋ฆฌ ํ•œ์„๊ทœ - ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ 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 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด ํฌํ•จ)
- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ (๋ฐฐํฌ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ ์šฉ ๋“ฑ)

๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors