diff --git a/docs/week02.md b/docs/week02.md new file mode 100644 index 000000000..eda9d8cfd --- /dev/null +++ b/docs/week02.md @@ -0,0 +1,296 @@ +# ๐Ÿงญ ๋ฃจํ”„ํŒฉ BE L2 - Round 2 + +> ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค๊ณ„๋กœ ์˜ฎ๊ธฐ๋Š” ํž˜, ๋„๋ฉ”์ธ์„ ํ•ด์„ํ•˜๋Š” ํž˜์„ ๊ธฐ๋ฅธ๋‹ค. +> + + + +- ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์„ **๋„๋ฉ”์ธ ๋ชจ๋ธ**, **์‹œ์Šคํ…œ ์„ค๊ณ„**๋กœ ์ „ํ™˜ํ•˜๋Š” ํ๋ฆ„์„ ์ฒดํ—˜ํ•œ๋‹ค. +- ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ, ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ, ERD ๋“ฑ์„ ํ™œ์šฉํ•ด **ํ˜‘๋ ฅ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ**๋ฅผ ์‹œ๊ฐํ™”ํ•œ๋‹ค. +- ์ƒํ’ˆ/์ฃผ๋ฌธ/๋ธŒ๋žœ๋“œ/์ข‹์•„์š” ๋“ฑ ๋„๋ฉ”์ธ์„ ์ค‘์‹ฌ์œผ๋กœ ์‹ค์Šตํ•ด๋ณธ๋‹ค. +- ์„ค๊ณ„ํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ์ค€๋น„๋ฅผ ๋งˆ์นœ๋‹ค. + + + +- ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ / ๊ธฐ๋Šฅ ๋ช…์„ธ +- ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ +- ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ +- ERD (Entity Relationship Diagram) +- ๋„๋ฉ”์ธ ๋ชจ๋ธ / ์—”ํ‹ฐํ‹ฐ / VO +- ์„ค๊ณ„ ๋ฌธ์„œํ™” + + + +## ๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ + +> **์‚ฌ์šฉ์ž ๋‹ˆ์ฆˆ**๋ฅผ **๊ธฐ๋Šฅ ๋ช…์„ธ๋กœ ์ „ํ™˜**ํ•˜๋Š” ๋ถ„์„ ๊ณผ์ •์ด์˜ˆ์š”. +> + +### ๐Ÿ’ก ์‹ค๋ฌด์—์„œ ์™œ ์ค‘์š”ํ• ๊นŒ? + +- ๊ตฌํ˜„ ํ›„ **โ€œ์ด๊ฑด ์ œ๊ฐ€ ์›ํ•œ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ์—์š”โ€** ๋ผ๋Š” ๋ง์„ ๋“ฃ์ง€ ๋ง์ž +- ๊ธฐํš/๋””์ž์ธ/๊ฐœ๋ฐœ ๊ฐ„ **์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์–ธ์–ด์  ๊ธฐ์ค€์ ** +- ์š”๊ตฌ์‚ฌํ•ญ์„ **๊ฐ์ฒด, ํ…Œ์ด๋ธ”, API ์„ค๊ณ„๋กœ ์—ฐ๊ฒฐ**ํ•˜๊ธฐ ์œ„ํ•œ ์ถœ๋ฐœ์  + +### ๐Ÿ›  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ• ๊นŒ? + +1. ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค ๋„์ถœ โ†’ ์ž์—ฐ์–ด ์„ค๋ช… +2. ํ–‰์œ„ ์ค‘์‹ฌ ๊ธฐ๋Šฅ ๋ชฉ๋ก ์ •๋ฆฌ (์˜ˆ: ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ์˜ ๊ธฐ๋Œ€ ๋™์ž‘) +3. **์œ ์Šค์ผ€์ด์Šค ํ๋ฆ„** ์ž‘์„ฑ (Main / Alternate / Exception Flow) +4. ๊ฐ ํ๋ฆ„์— ์˜ˆ์™ธ, ์กฐ๊ฑด ๋ถ„๊ธฐ, ํ›„์† ๋™์ž‘ ํฌํ•จ + +### ๐Ÿ’ฌ ์˜ˆ์‹œ + +```markdown +[์œ ์ € ์Šคํ† ๋ฆฌ] +- ์‚ฌ์šฉ์ž๋Š” ์ƒํ’ˆ์„ ์ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. +- ์ด๋ฏธ ์ฐœํ•œ ์ƒํ’ˆ์„ ๋‹ค์‹œ ๋ˆ„๋ฅด๋ฉด ์ฐœ์ด ์ทจ์†Œ๋œ๋‹ค. + +[๊ธฐ๋Šฅ ํ๋ฆ„] +1. ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋งŒ ๊ฐ€๋Šฅ +2. ์ข‹์•„์š” ๋ˆ„๋ฅด๋ฉด ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋‹จ +3. ์—†์œผ๋ฉด ์ €์žฅ, ์žˆ์œผ๋ฉด ์‚ญ์ œ +4. ์ข‹์•„์š” ์ˆ˜ ๋ฐ˜์˜ +``` + +### โš  ์ž์ฃผ ๊ฒช๋Š” ์‹ค์ˆ˜ + +- ๊ธฐ๋Šฅ ์ค‘์‹ฌ๋งŒ ์žˆ๊ณ  ์˜ˆ์™ธ/์กฐ๊ฑด์ด ์—†์Œ (ex. ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ๊ณ ๋ ค ์•ˆํ•จ) +- ์œ ์Šค์ผ€์ด์Šค ํ๋ฆ„์„ ๋„ˆ๋ฌด **์ถ”์ƒ์ **์œผ๋กœ ์ž‘์„ฑ +- ์‹ค์ œ ํ๋ฆ„๊ณผ ๋ช…์„ธ๊ฐ€ ์ ์ฐจ ์ด๊ฒฉ์ด ๋ฐœ์ƒ + +--- + +## ๐Ÿ“‹ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด + +> ๋ชจ๋“  ํ˜‘์—…์ž๊ฐ€ **๋™์ผํ•œ ์–ธ์–ด๋กœ ๋„๋ฉ”์ธ์„ ์ดํ•ดํ•˜๊ณ  ์†Œํ†ต**ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์  ์šฉ์–ด ์ฒด๊ณ„๋ฅผ ๋งํ•ด์š”. +> + +### ๐Ÿ’ก ์‹ค๋ฌด์—์„œ ์™œ ์ค‘์š”ํ• ๊นŒ? + +- ์šฉ์–ด ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ์„ค๊ณ„ ์˜ค๋ฅ˜๋ฅผ ์ค„์ž„ (์˜ˆ: '์ƒํ’ˆ' vs '์•„์ดํ…œ' ํ˜ผ์šฉ) +- ๊ธฐํš์ž, ๋””์ž์ด๋„ˆ, ๊ฐœ๋ฐœ์ž, QA๊ฐ€ ๊ฐ™์€ ๋‹จ์–ด๋กœ ๊ฐ™์€ ๊ฐœ๋…์„ ์ดํ•ด +- ์ฝ”๋“œ์™€ ๋ฌธ์„œ ๊ฐ„ ์šฉ์–ด ์ •ํ•ฉ์„ฑ ์œ ์ง€ (์ฝ”๋“œ = ๋ชจ๋ธ, ๋ฌธ์„œ = ๋ช…์„ธ) + +### ๐Ÿ›  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ• ๊นŒ? + +1. ๋„๋ฉ”์ธ ์šฉ์–ด๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋ฌธ์„œ๋กœ ๊ณต์œ  +2. ๊ธฐ๋Šฅ/์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ, ERD, API ๋ช…์„ธ์„œ, ํด๋ž˜์Šค ๋ช…์— ๋™์ผํ•œ ๋‹จ์–ด ์‚ฌ์šฉ +3. ์ƒˆ๋กœ์šด ์šฉ์–ด ๋„์ž… ์ „์—” ๋ฐ˜๋“œ์‹œ ์ •์˜์™€ ๋งฅ๋ฝ ๊ณต์œ  + +### ๐Ÿ’ฌ ์˜ˆ์‹œ + +``` +์ƒํ’ˆ โ†’ Product +๋ธŒ๋žœ๋“œ โ†’ Brand +์ข‹์•„์š” โ†’ Like +์ฃผ๋ฌธ โ†’ Order +``` + +### โš  ์ž์ฃผ ๊ฒช๋Š” ์‹ค์ˆ˜ + +- ๋„๋ฉ”์ธ๋งˆ๋‹ค ํ‘œํ˜„์ด ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ฐ™์ด ํ†ต์ผ ์—†์ด ์‚ฌ์šฉ +- ์ฝ”๋“œ์—์„œ๋Š” ์˜๋ฌธ/์ถ•์•ฝ์–ด, ๊ธฐํš์„œ์—์„œ๋Š” ํ•œ๊ธ€/๋‹ค๋ฅธ ๋‹จ์–ด +- enum, ์ƒํƒœ ๊ฐ’ ๋“ฑ์—์„œ ์˜๋ฏธ ์—†๋Š” ์šฉ์–ด ์‚ฌ์šฉ (ex. ์ƒํƒœ1, ์ƒํƒœ2) + +--- + +## ๐Ÿ“‹ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ + +> **๊ฐ์ฒด ๊ฐ„ ๋ฉ”์‹œ์ง€ ํ๋ฆ„์„ ์‹œ๊ฐํ™”**ํ•˜์—ฌ ์ฑ…์ž„๊ณผ ํ˜‘๋ ฅ์„ ํ‘œํ˜„ํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”. +> + +### ๐Ÿ’ก ์‹ค๋ฌด์—์„œ ์™œ ์ค‘์š”ํ• ๊นŒ? + +- "๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ์ฑ…์ž„์ง€๋Š”๊ฐ€"๋ฅผ ๋ช…ํ™•ํžˆ ํŒŒ์•… ๊ฐ€๋Šฅ +- ์ฝ”๋“œ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ๋ฆ„ ๊ตฌ์กฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ +- ํŒ€ ๋‚ด ํ˜‘์—…(ํŠนํžˆ ํ”„๋ก ํŠธ โ†” ๋ฐฑ์—”๋“œ โ†” ๊ธฐํš ๊ฐ„)์—์„œ ์„ค๊ณ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ธฐ๋ฐ˜์ด ๋จ + +### ๐Ÿ›  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ• ๊นŒ? + +1. ๊ธฐ๋Šฅ ํ•˜๋‚˜๋‹น ํ•˜๋‚˜์˜ ์‹œํ€€์Šค๋ฅผ ๋งŒ๋“ฆ + 1. **e.g.** ์‚ฌ์šฉ์ž โ†’ Controller โ†’ Application โ†’ Domain โ†’ Infra +2. ํ๋ฆ„์˜ ์ˆœ์„œ, ์กฐ๊ฑด ๋ถ„๊ธฐ, ์ด๋ฒคํŠธ ๋ฐœํ–‰ ๋“ฑ์„ ํ‘œํ˜„ +3. ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ์ด๋ฅผ ์‹œ๊ฐํ™” + +### ๐Ÿ’ฌ Mermaid ์˜ˆ์ œ + +```mermaid +sequenceDiagram + participant User + participant LikeController + participant LikeService + participant ProductReader + participant LikeRepository + + User->>LikeController: POST /products/{id}/like + LikeController->>LikeService: toggleLike(userId, productId) + LikeService->>ProductReader: get(productId) + LikeService->>LikeRepository: exists(userId, productId) + + alt ์ข‹์•„์š”๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ + LikeService->>LikeRepository: save() + + else ์ด๋ฏธ ์ข‹์•„์š”ํ•œ ๊ฒฝ์šฐ + LikeService->>LikeRepository: delete() + +end +``` + +### โš  ์ž์ฃผ ๊ฒช๋Š” ์‹ค์ˆ˜ + +- ๋„ˆ๋ฌด ๋งŽ์€ ์„ธ๋ถ€ ํ๋ฆ„์„ ๋‹ค ๋„ฃ์–ด์„œ ์‹œํ€€์Šค๊ฐ€ ๋ณต์žกํ•จ +- ๋„๋ฉ”์ธ ๊ฐ์ฒด ๊ฐ„ ๋ฉ”์‹œ์ง€ ์—†์ด Service๋งŒ ํ˜ธ์ถœ +- ์‹œํ€€์Šค์™€ ์‹ค์ œ ๊ตฌํ˜„์ด ๋”ฐ๋กœ ๋†€์•„ ์œ ์ง€๋ณด์ˆ˜ ๋ถˆ๊ฐ€๋Šฅ + +--- + +## ๐Ÿ“‹ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ & ๋„๋ฉ”์ธ ๋ชจ๋ธ + +> **์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๊ฐ์ฒด** ๊ฐ„ ๊ตฌ์กฐ์™€ ์ฑ…์ž„์„ ์‹œ๊ฐํ™”ํ•œ ์„ค๊ณ„ ๋„๊ตฌ์˜ˆ์š”. +> + +### ๐Ÿ’ก ์‹ค๋ฌด์—์„œ ์™œ ์ค‘์š”ํ• ๊นŒ? + +- ๋„๋ฉ”์ธ ๊ฐœ๋… ๊ฐ„ ์ฑ…์ž„๊ณผ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•จ +- ์„ค๊ณ„ โ†’ ์ฝ”๋“œ ์ „ํ™˜ ์‹œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐ๋จ +- ํŒจํ‚ค์ง€ ๊ตฌ์กฐ, ์˜์กด์„ฑ ๊ตฌ์กฐ ์„ค๊ณ„์— ๊ธฐ์ค€์ด ๋จ + +### ๐Ÿ›  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ• ๊นŒ? + +1. ์—”ํ‹ฐํ‹ฐ/VO ๋ถ„๋ฆฌ ๊ธฐ์ค€: ID ์กด์žฌ ์—ฌ๋ถ€, ์ƒ๋ช… ์ฃผ๊ธฐ +2. ์—ฐ๊ด€ ๊ด€๊ณ„: ๋‹จ๋ฐฉํ–ฅ ๊ธฐ๋ณธ, ์–‘๋ฐฉํ–ฅ ์ตœ์†Œํ™” +3. ๋น„์ฆˆ๋‹ˆ์Šค ์ฑ…์ž„์€ ๋„๋ฉ”์ธ ๊ฐ์ฒด์— ํฌํ•จ์‹œํ‚ค๊ธฐ +4. ์„ค๊ณ„ ํ›„, "ํ•œ ๊ฐ์ฒด์— ์ฑ…์ž„์ด ๋ชฐ๋ฆฌ์ง€ ์•Š์•˜๋Š”๊ฐ€?" ์ ๊ฒ€ + +### ๐Ÿ’ฌ Mermaid ์˜ˆ์ œ + +```mermaid +classDiagram + class Product { + Long id + String name + Price price + } + class Brand { + Long id + String name + } + class Like { + Member member + Product product + } + class Member { + Long id + String name + } + + Product --> Brand + Like --> Member + Like --> Product +``` + +### โš  ์ž์ฃผ ๊ฒช๋Š” ์‹ค์ˆ˜ + +- ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋ ค๋‹ค ์ง€๋‚˜์นœ ๋ณต์žก๋„ +- ๋„๋ฉ”์ธ ์ฑ…์ž„ ์—†์ด Service์— ๋ชจ๋“  ๋กœ์ง ์ง‘์ค‘ +- VO๋ฅผ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋ ค๋Š” ์‹œ๋„ (ex. Price๋ฅผ ๋ณ„๋„ DB๋กœ ์„ค๊ณ„) + +--- + +## ๐Ÿ“‹ ERD ์„ค๊ณ„ + +> **๋ฐ์ดํ„ฐ ๊ฐ„ ๊ด€๊ณ„**๋ฅผ ์ •์˜ํ•˜์—ฌ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ์ œ์•ฝ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ชจ๋ธ์ด์˜ˆ์š”. +> + +### ๐Ÿ’ก ์‹ค๋ฌด์—์„œ ์™œ ์ค‘์š”ํ• ๊นŒ? + +- ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ๋ฌผ๋ฆฌ์  ๊ตฌํ˜„ ๊ธฐ๋ฐ˜ +- ์„ฑ๋Šฅ ์ด์Šˆ(์กฐํšŒ ์ฟผ๋ฆฌ, ์ธ๋ฑ์Šค ๋“ฑ)์™€ ์ง๊ฒฐ +- API, ๋„๋ฉ”์ธ, DB ๊ฐ„ ๊ตฌ์กฐ ์ผ๊ด€์„ฑ ์œ ์ง€์— ํ•ต์‹ฌ ์—ญํ•  + +### ๐Ÿ›  ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ• ๊นŒ? + +1. 1:N โ†’ ์™ธ๋ž˜ํ‚ค, N:M โ†’ ์กฐ์ธ ํ…Œ์ด๋ธ”๋กœ ์„ค๊ณ„ +2. enum โ†’ VARCHAR ๋˜๋Š” ์ฝ”๋“œ ํ…Œ์ด๋ธ” +3. soft delete โ†’ `deleted_at` or `is_deleted` ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹ +4. ์ƒํƒœ ๊ด€๋ฆฌ: `status` ์ปฌ๋Ÿผ ํ™œ์šฉํ•˜์—ฌ ๋ช…ํ™•ํ•œ ์ƒํƒœ ์ „์ด ํ‘œํ˜„ + +### ๐Ÿ’ฌ Mermaid ์˜ˆ์ œ + +```mermaid +erDiagram + products { + bigint id PK + varchar name + bigint brand_id FK + } + brands { + bigint id PK + varchar name + } + likes { + bigint member_id PK, FK + bigint product_id PK, FK + timestamp created_at + } + members { + bigint id PK + varchar name + } + + products ||--o{ likes : "" + members ||--o{ likes : "" + brands ||--o{ products : "" +``` + +### โš  ์ž์ฃผ ๊ฒช๋Š” ์‹ค์ˆ˜ + +- ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ์ •๊ทœํ™”๋งŒ ์ถ”๊ตฌ +- ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ๋งŒ ์ง‘์ค‘ํ•ด ์กฐํšŒ JOIN์ด ๊ณผ๋„ํ•ด์ง +- ์ƒํƒœ ์ปฌ๋Ÿผ ์—†์Œ โ†’ ์ฝ”๋“œ์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ํ•ด๊ฒฐํ•จ + + + +| ๊ตฌ๋ถ„ | ๋งํฌ | +| --- | --- | +| ๐Ÿ“š ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ | https://www.msaschool.io/operation/design/design-two/ | +| ๐ŸŽฌ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ | https://www.ibm.com/docs/ko/rsas/7.5.0?topic=uml-sequence-diagrams | +| ๐Ÿ—ƒ ERD | https://www.lucidchart.com/pages/er-diagrams | +| ๐Ÿงฉ ๋จธ๋ฉ”์ด๋“œ | https://mermaid.js.org/ | + +> ์›ํ™œํ•œ ์‹ค์Šต ์ง„ํ–‰์„ ์œ„ํ•ด ๋‹ค์Œ ๋„๊ตฌ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. +* `mermaid` : https://mermaid.live +* `excalidraw` : https://excalidraw.com/ +* `lucid chart` : https://www.lucidchart.com/ +> + + + +> ๋‹ค์Œ ์ฃผ์—๋Š” ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐ ํ•„์š” ๊ฐ์ฒด๋“ค์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์•ˆ์ •์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. +> \ No newline at end of file diff --git a/docs/week02_quests.md b/docs/week02_quests.md new file mode 100644 index 000000000..15776eb66 --- /dev/null +++ b/docs/week02_quests.md @@ -0,0 +1,101 @@ + + +# ๐Ÿ“ Round 2 Quests + +--- + +## โœ๏ธ Design Quest + +> **์ด์ปค๋จธ์Šค ๋„๋ฉ”์ธ(์ƒํ’ˆ, ๋ธŒ๋žœ๋“œ, ์ข‹์•„์š”, ์ฃผ๋ฌธ ๋“ฑ)์— ๋Œ€ํ•œ ์„ค๊ณ„**๋ฅผ ์™„๋ฃŒํ•˜๊ณ , ๋‹ค์Œ ์ฃผ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ ์„ค๊ณ„ ๋ฌธ์„œ๋ฅผ ์ •๋ฆฌํ•˜์—ฌ PR๋กœ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. +> + +### ๐Ÿ“‹ ๊ณผ์ œ ์ •๋ณด + +- **์„ค๊ณ„ ๋ฒ”์œ„** + - ์ƒํ’ˆ ๋ชฉ๋ก / ์ƒํ’ˆ ์ƒ์„ธ / ๋ธŒ๋žœ๋“œ ์กฐํšŒ + - ์ƒํ’ˆ ์ข‹์•„์š” ๋“ฑ๋ก/์ทจ์†Œ (๋ฉฑ๋“ฑ ๋™์ž‘) + - ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ๊ฒฐ์ œ ํ๋ฆ„ (์žฌ๊ณ  ์ฐจ๊ฐ, ํฌ์ธํŠธ ์ฐจ๊ฐ, ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™) +- **์ œ์™ธ ๋„๋ฉ”์ธ** + - ํšŒ์›๊ฐ€์ž…, ํฌ์ธํŠธ ์ถฉ์ „ (1์ฃผ์ฐจ ๊ตฌํ˜„ ์™„๋ฃŒ ๊ธฐ์ค€) +- **์š”๊ตฌ์‚ฌํ•ญ ๊ธฐ๋ฐ˜** + - ๋ฃจํ”„ํŒฉ ์ด์ปค๋จธ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ๋Šฅ/์ œ์•ฝ์‚ฌํ•ญ์„ ์„ค๊ณ„์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. +- **์ œ์ถœ ๋ฐฉ์‹** + 1. ์•„๋ž˜ ํŒŒ์ผ๋“ค์„ ํ”„๋กœ์ ํŠธ ๋‚ด `docs/week2/` ํด๋”์— `.md`๋กœ ์ €์žฅ + 2. Github PR๋กœ ์ œ์ถœ + - PR ์ œ๋ชฉ: `[2์ฃผ์ฐจ] ์„ค๊ณ„ ๋ฌธ์„œ ์ œ์ถœ - ํ™๊ธธ๋™` + - PR ๋ณธ๋ฌธ์— ๋ฆฌ๋ทฐ ํฌ์ธํŠธ ํฌํ•จ (์˜ˆ: ๊ณ ๋ฏผํ•œ ์ง€์  ๋“ฑ) + +### โœ… ์ œ์ถœ ํŒŒ์ผ ๋ชฉ๋ก (.docs/design ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด) + +| ํŒŒ์ผ๋ช… | ๋‚ด์šฉ | +| --- | --- | +| `01-requirements.md` | ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ ์ •์˜, ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ | +| `02-sequence-diagrams.md` | ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์ตœ์†Œ 2๊ฐœ ์ด์ƒ (Mermaid ๊ธฐ๋ฐ˜ ์ž‘์„ฑ ๊ถŒ์žฅ) | +| `03-class-diagram.md` | ๋„๋ฉ”์ธ ๊ฐ์ฒด ์„ค๊ณ„ (ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ or ์„ค๋ช… ์ค‘์‹ฌ) | +| `04-erd.md` | ์ „์ฒด ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ฐ ๊ด€๊ณ„ ์ •๋ฆฌ (ERD Mermaid ์ž‘์„ฑ ๊ฐ€๋Šฅ) | + +## โœ… Checklist + +- [ ] ์ƒํ’ˆ/๋ธŒ๋žœ๋“œ/์ข‹์•„์š”/์ฃผ๋ฌธ ๋„๋ฉ”์ธ์ด ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ๋Š”๊ฐ€? +- [ ] ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์ด ์œ ์ € ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š”๊ฐ€? +- [ ] ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ฑ…์ž„ ๊ฐ์ฒด๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋Š”๊ฐ€? +- [ ] ํด๋ž˜์Šค ๊ตฌ์กฐ๊ฐ€ ๋„๋ฉ”์ธ ์„ค๊ณ„๋ฅผ ์ž˜ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? +- [ ] ERD ์„ค๊ณ„ ์‹œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌ์„ฑํ•˜์˜€๋Š”๊ฐ€? + +--- + +## โœ๏ธ Technical Writing Quest + +> ์ด๋ฒˆ ์ฃผ์— ํ•™์Šตํ•œ ๋‚ด์šฉ, ๊ณผ์ œ ์ง„ํ–‰์„ ๋˜๋Œ์•„๋ณด๋ฉฐ +**"๋‚ด๊ฐ€ ์–ด๋–ค ํŒ๋‹จ์„ ํ•˜๊ณ  ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€"** ๋ฅผ ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค. +> +> +> **์ข‹์€ ๋ธ”๋กœ๊ทธ ๊ธ€์€ ๋‚ด๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ๋ฅผ, ํƒ€์ธ๋„ ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.** +> +> ์ด ๊ธ€์€ ๋‹จ์ˆœ ๊ณผ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ, **ํ–ฅํ›„ ์ด์ง์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ํฌํŠธํด๋ฆฌ์˜ค** ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”. +> + +### ๐Ÿ“š Technical Writing Guide + +### โœ… ์ž‘์„ฑ ๊ธฐ์ค€ + +| ํ•ญ๋ชฉ | ์„ค๋ช… | +| --- | --- | +| **ํ˜•์‹** | ๋ธ”๋กœ๊ทธ | +| **๊ธธ์ด** | ์ œํ•œ ์—†์Œ, ๋‹จ ๊ผญ **1์ค„ ์š”์•ฝ (TL;DR)** ์„ ํฌํ•จํ•ด ์ฃผ์„ธ์š” | +| **ํฌ์ธํŠธ** | โ€œ๋ฌด์—‡์„ ํ–ˆ๋‹คโ€ ๋ณด๋‹ค **โ€œ์™œ ๊ทธ๋ ‡๊ฒŒ ํŒ๋‹จํ–ˆ๋Š”๊ฐ€โ€** ์ค‘์‹ฌ | +| **์˜ˆ์‹œ ํฌํ•จ** | ์ฝ”๋“œ ๋น„๊ต, ํ๋ฆ„๋„, ๋ฆฌํŒฉํ† ๋ง ์ „ํ›„ ์˜ˆ์‹œ ๋“ฑ ์ž์œ ๋กญ๊ฒŒ | +| **ํ†ค** | ์‹ค๋ ฅ์€ ๋ณด์ด์ง€๋งŒ, ์ž๋งŒํ•˜์ง€ ์•Š๊ณ , **๊ณ ๋ฏผ์ด ์ฝํžˆ๋Š” ๊ธ€**์˜ˆ: โ€œ์ฒ˜์Œ์—” mock์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๋‚˜์ค‘์— fake๋กœ ๊ต์ฒดํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š”โ€ฆโ€ | + +--- + +### โœจ ์ข‹์€ ํ†ค์€ ์ด๋Ÿฐ ๋А๋‚Œ์ด์—์š” + +> ๋‚ด๊ฐ€ ๊ฒช์€ ์‹ค์ „์  ๊ณ ๋ฏผ์„ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋„ ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ’€์–ด๋‚ด์ž +> + +| ํŠน์ง• | ์˜ˆ์‹œ | +| --- | --- | +| ๐Ÿค” ๋‚ด ์–ธ์–ด๋กœ ์„ค๋ช…ํ•œ ๊ฐœ๋… | Stub๊ณผ Mock์˜ ์ฐจ์ด๋ฅผ ์ด๋ฒˆ ์ฃผ๋ฌธ ํ…Œ์ŠคํŠธ์—์„œ ์ฒ˜์Œ ์‹ค๊ฐํ–ˆ๋‹ค | +| ๐Ÿ’ญ ํŒ๋‹จ ํ๋ฆ„์ด ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ธ€ | ์ฒ˜์Œ์—” ๋„๋ฉ”์ธ์„ ๋‚˜๋ˆ„์ง€ ์•Š์•˜๋Š”๋ฐ, ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›Œ์ง€๋ฉฐ ๋ถ„๋ฆฌํ–ˆ๋‹ค | +| ๐Ÿ“ ์ •๋ณด ๋‚˜์—ด๋ณด๋‹ค ์ธ์‚ฌ์ดํŠธ ์ค‘์‹ฌ | ํ…Œ์ŠคํŠธ๋Š” ์ž‘์„ฑํ–ˆ์ง€๋งŒ, ๊ตฌ์กฐ๋Š” ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š๋‹ค. ๋‹ค์Œ์—”โ€ฆ | + +### โŒ ํ”ผํ•ด์•ผ ํ•  ์Šคํƒ€์ผ + +| ์˜ˆ์‹œ | ์ด์œ  | +| --- | --- | +| ๋งŽ์ด ๋ถ€์กฑํ–ˆ๊ณ , ๋ฐ˜์„ฑํ•ฉ๋‹ˆ๋‹คโ€ฆ | ํšŒ๊ณ ๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค | +| Stub์€ ์‘๋‹ต์„ ์ง€์ •ํ•˜๊ณ โ€ฆ | ๋‚ด ์ƒ๊ฐ์ด ์•„๋‹Œ ์š”์•ฝ๋ฌธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค | +| ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„๋ฆฌ๋‹ค | ๋„ˆ๋ฌด ๋‹จ์ •์ ์ด๊ฑฐ๋‚˜ ์˜ค๋งŒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค | + +### ๐ŸŽฏ Feature Suggestions + +- ์ข‹์•„์š” ๊ธฐ๋Šฅ์˜ ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์„๊นŒ? +- ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ ์žฌ๊ณ /ํฌ์ธํŠธ ์ฐจ๊ฐ์„ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ–ˆ๋Š”๊ฐ€? +- ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๊ณ  ์ฑ…์ž„์„ ์œ„์ž„ํ–ˆ๋Š”๊ฐ€? +- ERD ์„ค๊ณ„ ์‹œ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๋Š”๊ฐ€? \ No newline at end of file diff --git a/docs/week2/01-requirements.md b/docs/week2/01-requirements.md new file mode 100644 index 000000000..208fa39d3 --- /dev/null +++ b/docs/week2/01-requirements.md @@ -0,0 +1,175 @@ +# ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ - ๋ฃจํ”„ํŒฉ ๊ฐ์„ฑ ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ +## ๊ฐœ์š” +์ด ๋ฌธ์„œ๋Š” ๋ฃจํ”„ํŒฉ ์ด์ปค๋จธ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ฐ์„ฑ ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์œ ์ € ์ค‘์‹ฌ์œผ๋กœ ๋ช…์„ธํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง๊ด€์ ์ด๊ณ  ๊ฐ์„ฑ์ ์ธ ์‡ผํ•‘ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ƒํ’ˆ ํƒ์ƒ‰๋ถ€ํ„ฐ ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ œ๊นŒ์ง€์˜ ํ•ต์‹ฌ ํ๋ฆ„์„ ์ค‘์ ์œผ๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์˜ ๊ธฐ์ค€์ ์ด ๋˜๋ฉฐ, ์œ ์ € ์Šคํ† ๋ฆฌ์™€ ๊ธฐ๋Šฅ ํ๋ฆ„์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋‹ˆ์ฆˆ๋ฅผ ๋ช…ํ™•ํžˆ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. + +- ์„ค๊ณ„ ๋ฒ”์œ„: ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ, ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ, ๋ธŒ๋žœ๋“œ ์กฐํšŒ, ์ƒํ’ˆ ์ข‹์•„์š” ๋“ฑ๋ก/์ทจ์†Œ (๋ฉฑ๋“ฑ ๋™์ž‘ ์ง€์›), ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ๊ฒฐ์ œ ํ๋ฆ„ (์žฌ๊ณ  ์ฐจ๊ฐ, ํฌ์ธํŠธ ์ฐจ๊ฐ, ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™). +- ์ œ์™ธ ๋„๋ฉ”์ธ: ํšŒ์›๊ฐ€์ž…, ํฌ์ธํŠธ ์ถฉ์ „ (1์ฃผ์ฐจ ๊ตฌํ˜„ ์™„๋ฃŒ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ •: ํšŒ์› ์ •๋ณด์™€ ํฌ์ธํŠธ ์ž”์•ก์€ ์ด๋ฏธ ๊ด€๋ฆฌ๋จ). +- ์š”๊ตฌ์‚ฌํ•ญ ๊ธฐ๋ฐ˜: ์‚ฌ์šฉ์ž ์ค‘์‹ฌ์œผ๋กœ ์ƒํ’ˆ ํƒ์ƒ‰, ์ฐœ ๊ธฐ๋Šฅ, ์ฃผ๋ฌธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์กฐํ•˜๋ฉฐ, ๊ฐ์„ฑ์ ์ธ UI/UX๋ฅผ ๊ณ ๋ คํ•˜๋‚˜ ์ด๋ฒˆ ๋ช…์„ธ์—์„œ๋Š” ๊ธฐ๋Šฅ์  ์ธก๋ฉด์— ์ดˆ์ . +- ์ „์ œ ์กฐ๊ฑด: ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์ธ์ฆ๋œ ํšŒ์›(๋กœ๊ทธ์ธ ์ƒํƒœ)์„ ๊ธฐ๋ณธ์œผ๋กœ ๊ฐ€์ •ํ•˜๋‚˜, ์ƒํ’ˆ/๋ธŒ๋žœ๋“œ ์กฐํšŒ๋Š” ๋น„ํšŒ์›๋„ ๊ฐ€๋Šฅ. + +์ด ๋ช…์„ธ๋Š” ์œ ์ € ์Šคํ† ๋ฆฌ โ†’ ๊ธฐ๋Šฅ ํ๋ฆ„ โ†’ ์š”๊ตฌ์‚ฌํ•ญ(๊ธฐ๋ณธ/์ถ”๊ฐ€(TBD)/์ œ์•ฝ) ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. + +## ์šฉ์–ด ์‚ฌ์ „ (์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด) +๋ชจ๋“  ๋ฌธ์„œ์™€ ์ฝ”๋“œ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ. + +- ์ƒํ’ˆ (Product): ํŒ๋งค๋˜๋Š” ์•„์ดํ…œ +- ๋ธŒ๋žœ๋“œ (Brand): ์ƒํ’ˆ์„ ์ƒ์‚ฐ/ํŒ๋งคํ•˜๋Š” ํšŒ์‚ฌ ๋˜๋Š” ๋ผ๋ฒจ +- ์ข‹์•„์š” (Like): ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์— ์ฐœํ•˜๋Š” ๊ธฐ๋Šฅ +- ์ฃผ๋ฌธ (Order): ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š” ํ–‰์œ„ ๋ฐ ๊ธฐ๋ก +- ํฌ์ธํŠธ (Point): ์‚ฌ์šฉ์ž ๋ณด์œ  ํ™”ํ. ๋‹จ์œ„๋Š” ์› +- ์žฌ๊ณ  (Stock): ์ƒํ’ˆ์˜ ๋‚จ์€ ์ˆ˜๋Ÿ‰ + + +## 1. ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ +### ์œ ์ € ์Šคํ† ๋ฆฌ +> ์‚ฌ์šฉ์ž๋กœ์„œ, ๋‹ค์–‘ํ•œ ์ƒํ’ˆ์„ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค. +> - ๊ธฐ๋ณธ ์ˆœ์œผ๋กœ ์ถ”์ฒœ๋œ ๋ชฉ๋ก์ด ๋‚˜์˜จ๋‹ค +> - ์‚ฌ์šฉ์ž๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋‚˜ ๋ธŒ๋žœ๋“œ๋กœ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. +> - ์ •๋ ฌ ๊ธฐ๋Šฅ์œผ๋กœ ์›ํ•˜๋Š” ์ƒํ’ˆ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. +> + +### ๊ธฐ๋Šฅ ํ๋ฆ„ +1. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ๋‹ค (ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๊ฐ€๋Šฅ). +2. ์‹œ์Šคํ…œ์ด ์นดํ…Œ๊ณ ๋ฆฌ, ๋ธŒ๋žœ๋“œ, ๊ฐ€๊ฒฉ๋“ฑ์˜ ํ•„ํ„ฐ์™€ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ ์šฉํ•˜์—ฌ ์ƒํ’ˆ ๋ชฉ๋ก์„ ์กฐํšŒํ•œ๋‹ค. +3. ์กฐํšŒ๋œ ์ƒํ’ˆ ๋ชฉ๋ก(๊ธฐ๋ณธ ์ •๋ณด ํฌํ•จ)์„ ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. +4. ํ›„์†: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ƒํ’ˆ์„ ์„ ํƒํ•˜๋ฉด ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ๋กœ ์ด๋™. ๋ธŒ๋žœ๋“œ ์˜์—ญ์„ ์„ ํƒํ•˜๋ฉด ๋ธŒ๋žœ๋“œ ์กฐํšŒ๋กœ ์ด๋™. + +### ์š”๊ตฌ์‚ฌํ•ญ +#### ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ + +- ์‹œ์Šคํ…œ์€ ํšŒ์› ๋ฐ ๋น„ํšŒ์›์—๊ฒŒ ์ƒํ’ˆ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. +- ์ƒํ’ˆ ๋ชฉ๋ก์€ ํŽ˜์ด์ง€๋„ค์ด์…˜(ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ, ์‚ฌ์ด์ฆˆ)์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. +- ๊ฐ ์ƒํ’ˆ ํ•ญ๋ชฉ์€ ์ด๋ฆ„, ๊ฐ€๊ฒฉ, ๋Œ€ํ‘œ ์ด๋ฏธ์ง€, ์ข‹์•„์š” ์ˆ˜, ์žฌ๊ณ  ์ƒํƒœ(์žฌ๊ณ  ์žˆ์Œ/ํ’ˆ์ ˆ)๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. +- ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. + - ์นดํ…Œ๊ณ ๋ฆฌ: ๋””์ง€ํ„ธ๊ธฐ๊ธฐ, ๊ฐ€๊ตฌ/์ธํ…Œ๋ฆฌ์–ด, ์œ ์•„๋™, ์—ฌ์„ฑ์˜๋ฅ˜, ์—ฌ์„ฑ์žกํ™”, ๋‚จ์„ฑํŒจ์…˜/์žกํ™”, ์ƒํ™œ๊ฐ€์ „, ์ƒํ™œ/์ฃผ๋ฐฉ, ์Šคํฌ์ธ /๋ ˆ์ €, ์ทจ๋ฏธ/๊ฒŒ์ž„/์Œ๋ฐ˜, ๋ทฐํ‹ฐ/๋ฏธ์šฉ, ์‹๋ฌผ. ๊ฐ€๊ณต์‹ํ’ˆ, ๊ฑด๊ฐ•๊ธฐ๋Šฅ์‹ํ’ˆ, ๋ฐ˜๋ ค๋™๋ฌผ์šฉํ’ˆ, ํ‹ฐ์ผ“/๊ตํ™˜๊ถŒ, ๋„์„œ/์Œ๋ฐ˜/DVD + - ๋ธŒ๋žœ๋“œ + - ๊ฐ€๊ฒฉ: ์ตœ์†Œ๊ฐ€, ์ตœ๋Œ€๊ฐ€ +- ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. + - ๊ธฐ๋ณธ, ์ธ๊ธฐ์ˆœ: ์ข‹์•„์š” ์ˆ˜ ๊ธฐ์ค€, ์ตœ์‹ ์ˆœ: ๋“ฑ๋ก์‹œ๊ฐ„ ๊ธฐ์ค€, ๊ฐ€๊ฒฉ์ˆœ(์˜ค๋ฆ„,๋‚ด๋ฆผ) +- ์กฐํšŒ ์‹œ ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํ’ˆ์ ˆ ์ƒํ’ˆ์„ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค. + +#### TBD: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ + +- ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ: ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ƒํ’ˆ ๊ฒ€์ƒ‰์„ ์ง€์› (๋ถ€๋ถ„ ์ผ์น˜, ๋ธŒ๋žœ๋“œ/์ƒํ’ˆ๋ช… ํฌํ•จ). +- ํ• ์ธ ์ •๋ณด ๋ฐ˜์˜: ์กฐํšŒ ์‹œ์ ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํ• ์ธ(์„ธ์ผ, ์ฟ ํฐ)์„ ๊ฐ€๊ฒฉ์— ๋ฐ˜์˜ํ•˜์—ฌ ํ‘œ์‹œ. +- ์‚ฌ์šฉ์ž ํ–‰๋™ ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๊ฐœ์ธํ™” ์ถ”์ฒœ (์˜ˆ: ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ, ์ข‹์•„์š” ํŒจํ„ด). + +#### ์ œ์•ฝ์‚ฌํ•ญ + +์ตœ๋Œ€ ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ๋Š” 100์œผ๋กœ ์ œํ•œํ•œ๋‹ค. +์žฌ๊ณ ๊ฐ€ 0์ธ ์ƒํ’ˆ์€ ๋ชฉ๋ก์—์„œ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ํ‘œ์‹œํ•œ๋‹ค.(ํ•„ํ„ฐ์—์„œ ์„ ํƒ ๊ฐ€๋Šฅ) + +## 2. ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ +### ์œ ์ € ์Šคํ† ๋ฆฌ +> ์‚ฌ์šฉ์ž๋กœ์„œ, ์ƒํ’ˆ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ตฌ๋งค ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์‹ถ๋‹ค. +> - ์ด๋ฏธ์ง€, ์„ค๋ช…, ๊ฐ€๊ฒฉ, ์„ค๋ช… ๋“ฑ์„ ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. +> - ๋ธŒ๋žœ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ๋ธŒ๋žœ๋“œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. +> - ํšŒ์›์œผ๋กœ์„œ, ์ƒํ’ˆ ์ƒ์„ธ์—์„œ ์ข‹์•„์š”๋กœ ๋‚˜์ค‘์— ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. +> - ํšŒ์›์œผ๋กœ์„œ, ์ฃผ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค +> + +### ๊ธฐ๋Šฅ ํ๋ฆ„ +1. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ ID๋ฅผ ํ†ตํ•ด ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ๋‹ค. +2. ์‹œ์Šคํ…œ์ด ํ•ด๋‹น ์ƒํ’ˆ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ DB์—์„œ ์กฐํšŒํ•œ๋‹ค. +3. ์ƒ์„ธ ์ •๋ณด(์ด๋ฏธ์ง€, ์„ค๋ช…, ๊ฐ€๊ฒฉ, ์žฌ๊ณ , ์ข‹์•„์š” ์ˆ˜ ๋“ฑ)๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. +4. ํ›„์†: ์ข‹์•„์š” ๋“ฑ๋ก/ํ•ด์ œ ๋˜๋Š” ์ฃผ๋ฌธ ์ƒ์„ฑ์œผ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ. + +### ์š”๊ตฌ์‚ฌํ•ญ +#### ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ +- ์‹œ์Šคํ…œ์€ ์ƒํ’ˆ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค (ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๊ฐ€๋Šฅ). +- ์ƒ์„ธ ์ •๋ณด๋Š” ์ด๋ฆ„, ๊ฐ€๊ฒฉ, ์ƒ์„ธ ์„ค๋ช…, ๋‹ค์ค‘ ์ด๋ฏธ์ง€, ์žฌ๊ณ  ์ˆ˜๋Ÿ‰, ๋ธŒ๋žœ๋“œ ์ •๋ณด, ์ข‹์•„์š” ์ˆ˜๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. +- ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ 'ํ’ˆ์ ˆ' ํ‘œ์‹œ ๋˜๋Š” ๊ตฌ๋งค ๋ถˆ๊ฐ€ ์ฒ˜๋ฆฌ. +- ์กฐํšŒ ์‹œ ํ• ์ธ ์ ์šฉ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ํ‘œ์‹œ. + +#### TBD: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ +- ๋ฆฌ๋ทฐ: ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋ชฉ๋ก๊ณผ ํ‰์  ํ‘œ์‹œ +- ๋ฆฌ๋ทฐ ์š”์•ฝ: ํ‰๊ท  ํ‰์ ๊ณผ ๋ฆฌ๋ทฐ ์ˆ˜๋ฅผ ํฌํ•จ +- ๊ด€๋ จ ๋ธŒ๋žœ๋“œ ๋งํฌ: ๋ธŒ๋žœ๋“œ ์กฐํšŒ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต +- ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ (์ถ”ํ›„ ์„ค๊ณ„ ์‹œ์ ์— ๋ฐ˜์˜) +- ๊ด€๋ จ ์ƒํ’ˆ ์ถ”์ฒœ (์œ ์‚ฌ ์นดํ…Œ๊ณ ๋ฆฌ ๋˜๋Š” ๋ธŒ๋žœ๋“œ ๊ธฐ๋ฐ˜). + +#### ์ œ์•ฝ์‚ฌํ•ญ + +์ƒํ’ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ญ์ œ๋œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜. + +## 3. ๋ธŒ๋žœ๋“œ ์กฐํšŒ +### ์œ ์ € ์Šคํ† ๋ฆฌ +> ์‚ฌ์šฉ์ž๋กœ์„œ, ํŠน์ • ๋ธŒ๋žœ๋“œ์˜ ์ƒํ’ˆ์„ ํ•œ๋ˆˆ์— ๋ณด๊ณ  ์‹ถ๋‹ค. +> - ํŠน์ • ๋ธŒ๋žœ๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ๋“œ์˜ ์ƒ์„ธ ์ •๋ณด(์ด๋ฆ„, ๋กœ๊ณ , ์†Œ๊ฐœ)๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. +> - ๋ธŒ๋žœ๋“œ์˜ ์ƒํ’ˆ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค (ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๊ฐ€๋Šฅ). + +### ๊ธฐ๋Šฅ ํ๋ฆ„ - ๋ธŒ๋žœ๋“œ ์กฐํšŒ +1. ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ธŒ๋žœ๋“œ ID๋กœ ์ ‘๊ทผํ•œ๋‹ค. +2. ์‹œ์Šคํ…œ์ด ๋ธŒ๋žœ๋“œ ์ •๋ณด์™€, ์—ฐ๊ด€ ์ƒํ’ˆ์„ ์กฐํšŒํ•œ๋‹ค. +3. ๋ธŒ๋žœ๋“œ ์ƒ์„ธ ์ •๋ณด ๋ฐ ๋ธŒ๋žœ๋“œ์˜ ์ƒํ’ˆ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. +4. ํ›„์†: ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ. + +### ์š”๊ตฌ์‚ฌํ•ญ +#### ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ +- ์‹œ์Šคํ…œ์€ ๋ธŒ๋žœ๋“œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค (ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๊ฐ€๋Šฅ). +- ๋ธŒ๋žœ๋“œ ์ •๋ณด๋Š” ์ด๋ฆ„, ๋กœ๊ณ  URL, ์„ค๋ช…์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. +- ๋ธŒ๋žœ๋“œ์˜ ์—ฐ๊ด€ ์ƒํ’ˆ ๋ชฉ๋ก์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. + +#### TBD: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ +- ๋ธŒ๋žœ๋“œ ๋ชฉ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ +- ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ: ๋ธŒ๋žœ๋“œ ์ด๋ฆ„ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ +- ๋ธŒ๋žœ๋“œ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ๋งž์ถค ์•Œ๋ฆผ. + +#### ์ œ์•ฝ์‚ฌํ•ญ +์˜ˆ์™ธ: ๋ธŒ๋žœ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 404 ์—๋Ÿฌ. + +## 4. ์ƒํ’ˆ ์ข‹์•„์š” ๋“ฑ๋ก/์ทจ์†Œ +### ์œ ์ € ์Šคํ† ๋ฆฌ +> ํšŒ์›์œผ๋กœ์„œ, ๊ด€์‹ฌ ์ƒํ’ˆ์„ ์ฐœํ•˜์—ฌ ๋‚˜์ค‘์— ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ์‹ถ๋‹ค. +> - ์‚ฌ์šฉ์ž๋Š” ์ƒํ’ˆ์„ ์ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. +> - ์ด๋ฏธ ์ฐœํ•œ ์ƒํ’ˆ์„ ๋‹ค์‹œ ๋ˆ„๋ฅด๋ฉด ์ฐœ์ด ์ทจ์†Œ๋œ๋‹ค. + +### ๊ธฐ๋Šฅ ํ๋ฆ„ +1. ํšŒ์›์ด ์ƒํ’ˆ ID์™€ ํ•จ๊ป˜ ์ข‹์•„์š”/์ทจ์†Œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. +2. ์‹œ์Šคํ…œ์€ ์š”์ฒญ์ด ์ข‹์•„์š”๋ฉด ํ•ด๋‹น ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ข‹์•„์š”๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ทจ์†Œ๋ฉด ์ข‹์•„์š”๋ฅผ ์‚ญ์ œํ•œ๋‹ค. +3. ์‹œ์Šคํ…œ์€ ์ƒํ’ˆ์˜ ์ข‹์•„์š” ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. + +### ์š”๊ตฌ์‚ฌํ•ญ +#### ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ +- ํšŒ์› ์‚ฌ์šฉ์ž ํ•œ์ • +- ์‹œ์Šคํ…œ์€ ์š”์ฒญ์ด ์ข‹์•„์š”๋ฉด ํ•ด๋‹น ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ข‹์•„์š”๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ทจ์†Œ๋ฉด ์ข‹์•„์š”๋ฅผ ์‚ญ์ œํ•œ๋‹ค. +- ์‹œ์Šคํ…œ์€ ์ƒํ’ˆ์˜ ์ข‹์•„์š” ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. + +#### TBD: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ + +- ๋‚ด ์ข‹์•„์š” ๋ชฉ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต. +- ๋ธŒ๋žœ๋“œ ์ข‹์•„์š” ๊ธฐ๋Šฅ +- ์ข‹์•„์š” ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์‹œ์Šคํ…œ ์—ฐ๋™. + +#### ์ œ์•ฝ์‚ฌํ•ญ +์ข‹์•„์š”๋Š” ์ƒํ’ˆ๋ณ„๋กœ๋งŒ, ๋ธŒ๋žœ๋“œ ์ข‹์•„์š”๋Š” ์ œ์™ธ. +์ตœ๋Œ€ ์ข‹์•„์š” ์ˆ˜ ์ œํ•œ ์—†์Œ + +## 5. ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ๊ฒฐ์ œ ํ๋ฆ„ +### ์œ ์ € ์Šคํ† ๋ฆฌ +> ํšŒ์›์œผ๋กœ์„œ, ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๊ณ  ์‹ถ๋‹ค. +> - ์—ฌ๋Ÿฌ ์ƒํ’ˆ์„ ํ•œ ๋ฒˆ์— ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค. +> - ์žฌ๊ณ ์™€ ํฌ์ธํŠธ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋ฉด ๊ฒฐ์ œ๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค. +> - ๊ฒฐ์ œ ์‹คํŒจ ์‹œ ๋ช…ํ™•ํ•œ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ์–ด ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +> + +### ๊ธฐ๋Šฅ ํ๋ฆ„ +1. ํšŒ์›์ด ์ฃผ๋ฌธ ์š”์ฒญ(์ƒํ’ˆ ID, ์ˆ˜๋Ÿ‰, ํฌ์ธํŠธ ์‚ฌ์šฉ ์—ฌ๋ถ€)์„ ๋ณด๋‚ธ๋‹ค. +2. ์‹œ์Šคํ…œ์ด ๊ฐ ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ด ๊ฒฐ์ œ ๊ธˆ์•ก์„ ์‚ฐ์ถœํ•œ๋‹ค. +3. ์‹œ์Šคํ…œ์ด ์žฌ๊ณ  ํ™•์ธ ๋ฐ ์ฐจ๊ฐ (๋ถ€์กฑ ์‹œ ์‹คํŒจ). +4. ์‹œ์Šคํ…œ์ด ํฌ์ธํŠธ ์ž”์•ก์„ ํ™•์ธํ•˜๊ณ  ์ด ๊ฒฐ์ œ ๊ธˆ์•ก๋งŒํผ ์ฐจ๊ฐํ•œ๋‹ค (๋ถ€์กฑ ์‹œ ์‹คํŒจ). +5. ์„ฑ๊ณต ์‹œ ์ฃผ๋ฌธ ์ƒ์„ฑ, ์‹คํŒจ ์‹œ ๋กค๋ฐฑ (์žฌ๊ณ /ํฌ์ธํŠธ ๋ณต๊ตฌ). +6. ์˜ˆ์™ธ: ์žฌ๊ณ /ํฌ์ธํŠธ ๋ถ€์กฑ ์‹œ ์—๋Ÿฌ ๋ฐ˜ํ™˜. + +### ์š”๊ตฌ์‚ฌํ•ญ +#### ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ +- ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ ์žฌ๊ณ  ์ฐจ๊ฐ +- ํฌ์ธํŠธ ์ฐจ๊ฐ: ์ด ๊ฒฐ์ œ ๊ธˆ์•ก ํ™•์ธ ํ›„ ์ž”์•ก ์ฐจ๊ฐ +- ๋‹ค์ค‘ ์ƒํ’ˆ ์ฃผ๋ฌธ ์ง€์› (items ๋ฐฐ์—ด ๊ธฐ๋ฐ˜). + +#### TBD: ํ˜„์žฌ ๊ณ ๋ ค ์ค‘์ธ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ +๊ฒฐ์ œ ์ˆ˜๋‹จ ๋‹ค์–‘ํ™” (๊ณ„์ขŒ์ด์ฒด, ๊ฐ„ํŽธ๊ฒฐ์ œ). + +#### ์ œ์•ฝ์‚ฌํ•ญ +ํ™˜๋ถˆ ํ๋ฆ„์€ ์ด๋ฒˆ ์„ค๊ณ„ ์ œ์™ธ. +๊ฒฐ์ œ ์ˆ˜๋‹จ์€ ํฌ์ธํŠธ๋งŒ ๊ฐ€์ • (์ถ”ํ›„ ํ™•์žฅ). diff --git a/docs/week2/02-sequence-diagrams.md b/docs/week2/02-sequence-diagrams.md new file mode 100644 index 000000000..1cb760a68 --- /dev/null +++ b/docs/week2/02-sequence-diagrams.md @@ -0,0 +1,94 @@ +# ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ + + + +### ์ƒํ’ˆ ์ข‹์•„์š” ๋“ฑ๋ก +```mermaid +sequenceDiagram + participant User as ํšŒ์› + participant Controller as LikeController + participant Service as LikeService + participant LikeRepo as LikeRepository + participant ProductRepo as ProductRepository + + User->>Controller: POST /api/v1/like/products/{productId} + Controller->>Service: addLike(userId, productId) + Service->>LikeRepo: existsByUserAndProduct(userId, productId) + LikeRepo-->>Service: ์กด์žฌ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜ (์ด๋ฏธ ์กด์žฌ ์‹œ ๋ฌด์‹œ ๋˜๋Š” ์—๋Ÿฌ) + + alt ์กด์žฌํ•˜์ง€ ์•Š์Œ (๋“ฑ๋ก ๊ฐ€๋Šฅ) + Service->>LikeRepo: save(Like(userId, productId)) + Service->>ProductRepo: incrementLikeCount(productId) + ProductRepo-->>Service: ์ข‹์•„์š” ์ˆ˜ ์ฆ๊ฐ€ + end + + Service-->>Controller: ์„ฑ๊ณต ์‘๋‹ต (๋ฉฑ๋“ฑ: ์ด๋ฏธ ๋“ฑ๋ก ์‹œ ๋ฌด์‹œ) + Controller-->>User: ์‘๋‹ต +``` + +### ์ƒํ’ˆ ์ข‹์•„์š” ํ•ด์ œ +```mermaid +sequenceDiagram + participant User as ํšŒ์› + participant Controller as LikeController + participant Service as LikeService + participant LikeRepo as LikeRepository + participant ProductRepo as ProductRepository + + User->>Controller: DELETE /api/v1/like/products/{productId} + Controller->>Service: removeLike(userId, productId) + Service->>LikeRepo: existsByUserAndProduct(userId, productId) + LikeRepo-->>Service: ์กด์žฌ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜ (์—†์„ ์‹œ ๋ฌด์‹œ ๋˜๋Š” ์—๋Ÿฌ) + + alt ์กด์žฌํ•จ (์ทจ์†Œ ๊ฐ€๋Šฅ) + Service->>LikeRepo: deleteByUserAndProduct(userId, productId) + Service->>ProductRepo: decrementLikeCount(productId) + ProductRepo-->>Service: ์ข‹์•„์š” ์ˆ˜ ๊ฐ์†Œ + end + + Service-->>Controller: ์„ฑ๊ณต ์‘๋‹ต (๋ฉฑ๋“ฑ: ์ด๋ฏธ ์ทจ์†Œ ์‹œ ๋ฌด์‹œ) + Controller-->>User: ์‘๋‹ต +``` + +### ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ๊ฒฐ์ œ ํ๋ฆ„ +```mermaid +sequenceDiagram + participant User as ํšŒ์› + participant Controller as OrderController + participant Facade as OrderFacade + participant ProductService as ProductService + participant PointService as PointService + participant OrderService as OrderService + participant Repository as Repository + + User->>Controller: POST /api/v1/orders (items: [{productId, quantity}, ...]) + Controller->>Facade: createOrder(command) + Note over Facade: @Transactional ์‹œ์ž‘ - ์ „์ฒด ์กฐ์œจ + Facade->>ProductService: calculateTotalAmount(items) + ProductService-->>Facade: ์ด ๊ฐ€๊ฒฉ ๋ฐ˜ํ™˜ + loop over items + Facade->>ProductService: checkAndDecreaseStock(productId, quantity) + ProductService->>Repository: getStockForUpdate(productId) // ๋™์‹œ์„ฑ ๋ฝ + Repository-->>ProductService: ์žฌ๊ณ  ๋ฐ˜ํ™˜ + alt ์žฌ๊ณ  ๋ถ€์กฑ + ProductService-->>Facade: ์‹คํŒจ + Facade-->>Controller: ์‹คํŒจ (๋กค๋ฐฑ) + else ์žฌ๊ณ  ์ถฉ๋ถ„ + ProductService->>Repository: decreaseStock(productId, quantity) + end + end + Facade->>PointService: checkAndDeductPoint(userId, totalAmount) + PointService->>Repository: getPoint(userId) + Repository-->>PointService: ํฌ์ธํŠธ ์ž”์•ก ๋ฐ˜ํ™˜ + alt ํฌ์ธํŠธ ๋ถ€์กฑ + PointService-->>Facade: ์‹คํŒจ + Facade-->>Controller: ์‹คํŒจ (๋กค๋ฐฑ: ์žฌ๊ณ  ๋ณต๊ตฌ) + else ํฌ์ธํŠธ ์ถฉ๋ถ„ + PointService->>Repository: deductPoint(userId, totalAmount) + Facade->>OrderService: createOrder(userId, items) + OrderService->>Repository: save(Order(status=๊ฒฐ์ œ์™„๋ฃŒ)) + Repository-->>OrderService: ์ฃผ๋ฌธ ์ƒ์„ฑ + end + Facade-->>Controller: ์„ฑ๊ณต/์‹คํŒจ ์‘๋‹ต (์‹คํŒจ ์‹œ ์ „์ฒด ๋กค๋ฐฑ: ์žฌ๊ณ /ํฌ์ธํŠธ ๋ณต๊ตฌ) + Controller-->>User: ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ์‘๋‹ต +``` diff --git a/docs/week2/03-class-diagram.md b/docs/week2/03-class-diagram.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/week2/04-erd.md b/docs/week2/04-erd.md new file mode 100644 index 000000000..e69de29bb