diff --git a/README.md b/README.md index dee8d3c..9fb1d76 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,114 @@ -# ๐Ÿ› ๏ธ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ทœ์น™ +# ๐Ÿ“Œ ๋ชจ์ผ ๋•Œ ๋งตํ•€, MOPING +### Moping ์„œ๋น„์Šค ๋ฐฐํฌ ์ฃผ์†Œ : https://www.moping.co.kr/ +![๋ชจํ•‘ ๋ฉ”์ธ](https://github.com/user-attachments/assets/a1bd3835-2a42-481f-93c8-e7c6694be1f6) -๋ณธ ๋ฌธ์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ๊ทœ์น™๊ณผ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ํŒ€์ด ํ•จ๊ป˜ ์ค€์ˆ˜ํ•ด์•ผ ํ•  **๊ณตํ†ต ์‚ฌํ•ญ**๊ณผ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€๋งŒ์˜ **ํŠนํ™”๋œ ๊ทœ์น™**์„ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +
---- +# ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆย ํŒ€ ์†Œ๊ฐœ -# ๐Ÿ‘ ๊ณตํ†ต ์‚ฌํ•ญ +### **ํŒ€๋ช… : ํ•‘ํ•‘์ด๋“ค** -- issue ์ƒ์„ฑ ๋ฐ PR์„ ํ†ตํ•ด ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. -- ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ์ž˜ ๋งŒ๋“ค์–ด๋‘๊ธฐ (code, message, data) -- ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 9/30 ~ 11/24 -- ์Šคํ”„๋ฆฐํŠธ (3์ผ๊ฐ„๊ฒฉ) ์ง„ํ–‰ (ํ•ด์˜ฌ ๊ฒƒ์„ ์ •ํ•ด์„œ ํ•ด์˜ค๊ธฐ) +| **๋ถ„์•ผ** | **์ด๋ฆ„** | **ํฌ์ง€์…˜** | **๋‚ด์šฉ** | +| :---: | :---: | --- | --- | +| ๊ธฐํš | ๋ฐ•๊ฐ€์€ | ๐Ÿ“ˆย PM, ์„œ๋น„์Šค ๊ธฐํš | ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ• | +| ๊ธฐํš | ๊น€๊ทœ๋ฆฌ | ๐Ÿ“‹ ์„œ๋น„์Šค ๊ธฐํš | ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ•, ์„œ๋น„์Šค ๋งˆ์ผ€ํŒ… ๋ฆฌ๋“œ | +| ๊ธฐํš | ์•ˆ์žฌํ˜• | ๐Ÿ“Šย ์„œ๋น„์Šค ๊ธฐํš | ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ•, ์„œ๋น„์Šค ๋งˆ์ผ€ํŒ… ๋ฆฌ๋“œ | +| ๋””์ž์ธ | ๊น€์œค์„œ | ๐ŸŽจ ๋””์ž์ธ ๋ฆฌ๋“œ | ux/ui๋””์ž์ธ, gui ๋””์ž์ธ | +| ๋””์ž์ธ | ์ด์–ด๋ น | ๐ŸŽจ ๋””์ž์ธ | ux/ui๋””์ž์ธ, gui ๋””์ž์ธ | +| ๊ฐœ๋ฐœ | ์ตœํ˜ธ | ๐Ÿ“ฑ ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌ๋“œ | ํ™”๋ฉด UI ๊ตฌํ˜„, API ์—ฐ๋™ | +| ๊ฐœ๋ฐœ | ์ตœ์„œํฌ | ๐Ÿ“ฑ ํ”„๋ก ํŠธ์—”๋“œ | ํ™”๋ฉด UI ๊ตฌํ˜„, API ์—ฐ๋™ | +| ๊ฐœ๋ฐœ | ๋ฌธํฌ์ƒ | ๐Ÿ’ป ๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ | API ๊ตฌํ˜„, ERD ์„ค๊ณ„, ์„œ๋ฒ„ ๋ฐฐํฌ | +| ๊ฐœ๋ฐœ | ์œค์†Œ๋ฏผ | ๐Ÿ’ป ๋ฐฑ์—”๋“œ | API ๊ตฌํ˜„, ERD ์„ค๊ณ„, ์„œ๋ฒ„ ๋ฐฐํฌ | -- ์ˆ˜์š”์ผ, ํ† ์š”์ผ +
-- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ(service ๋ฉ”์†Œ๋“œ ๋ณ„๋กœ) : Kotest ์‚ฌ์šฉ -- ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๋„๋ก ์ฃผ์„์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (controller, service ๋ฉ”์„œ๋“œ๋งˆ๋‹ค) - - javadoc ํ˜•์‹ย https://jake-seo-dev.tistory.com/59 -- issue ์ƒ์„ฑ ๋ฐ PR์„ ํ†ตํ•ด ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. -- ํ…Œ์ŠคํŠธ ๋ฐ ์›ํ• ํ•œ ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.(์—๋Ÿฌ๋‚˜ ์šด์˜์— ํ•„์š”ํ•œ ๋กœ๊ทธ. ๊ฒ€์ƒ‰์‹œ ๊ฒ€์ƒ‰์–ด์™€ ๊ฐ™์€ ๋กœ๊ทธ) -- ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ์ž˜ ๋งŒ๋“ค์–ด๋‘๊ธฐ (code, message, data) -- ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 9/30 ~ 11/24 -- ์Šคํ”„๋ฆฐํŠธ (3์ผ๊ฐ„๊ฒฉ) ์ง„ํ–‰ (ํ•ด์˜ฌ ๊ฒƒ์„ ์ •ํ•ด์„œ ํ•ด์˜ค๊ธฐ) - - ์ˆ˜์š”์ผ, ํ† ์š”์ผ +# ๐Ÿค” ์„œ๋น„์Šค ๊ฐœ์š” +![๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”1](https://github.com/user-attachments/assets/c89f733a-3dde-42fd-9233-95a1c8ffb10d) +![๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”2](https://github.com/user-attachments/assets/64cb2a04-8b8d-4fc0-972f-345dac6e4938) +![๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”3](https://github.com/user-attachments/assets/cdc47f2c-5a52-4106-b201-115accc5f56b) + +### **๋ชฉํ‘œ ์‚ฌ์šฉ์ž** +- **๋งˆ์Œ์— ๋“œ๋Š” ๊ณต๊ฐ„์„ ๋„ค์ด๋ฒ„ ์ง€๋„์— ๋ถ๋งˆํฌ**ํ•˜๋Š” 20๋Œ€ ์—ฌ์„ฑ +- `SNS๋ฅผ ํ†ตํ•ด ํŠธ๋ Œ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘ํ•จ` `์ž์‹ ์˜ ํ™•์‹คํ•œ ์ถ”๊ตฌ๋ฏธ๋ฅผ ๊ฐ€์ง` `์ž์‹ ์˜ ์ทจํ–ฅ ๊ณต๊ฐ„์„ ๊ณต์œ ` `์นœ๊ตฌ์™€ ํ•จ๊ป˜ ๊ทธ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ์ฆ๊น€` + +
+ +### **Pain Point** +- **๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฒฐ์ •ํ•  ๋•Œ์˜ ์–ด๋ ค์›€** +- ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ผ์ผ์ด ๊ณต์œ ํ•˜๋Š” ๊ณผ์ •์˜ ์ˆ˜๊ณ ๋กœ์›€ +- ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ ๋ชจ๋‘๊ฐ€ ์ฐฌ์„ฑํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€ + +
+ +### **Needs** +- ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์ •๋ณด์™€ ํšจ์œจ์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ†ตํ•œ ๊ณต๊ฐ„ ์„ ํƒ +- ์ž์‹ ์ด ์‹ ๋ขฐํ•˜๋Š” ์ง‘๋‹จ์ด ๋ถ๋งˆํฌํ•œ ๊ณต๊ฐ„์„ ์‚ดํŽด๋ด„์œผ๋กœ์จ ์‹ ๋ขฐ๋„ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ์Œ +- ์นœ๊ตฌ๋“ค๊ณผ ์•ฝ์† ์žฅ์†Œ๋ฅผ ์ •ํ•  ๋•Œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜๊ณ  ์‹ถ์Œ + +
+ +### **Solution ๋ฐ ๊ธฐ๋Œ€ํšจ๊ณผ** +**(1) ์–‘๋ฐฉํ–ฅ ๊ณต๊ฐ„ ์„ ํƒ** +- MOPING์€ N๋ช…์˜ ๊ณต๊ฐ„์„ ์ง€๋„์ƒ์— ํ•œ๋ฒˆ์— ๋ชจ์Œ์œผ๋กœ์จ, ํƒ์ƒ‰ ๊ณผ์ •์„ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ์— ๋„์›€์„ ์คŒ + +**(2) ๋ชจ์ž„ ๋งํฌ์— ์ถ•์ ๋˜๋Š” ๊ณต๊ฐ„ ์ •๋ณด** +- MOPING์€ ๋ชจ์ž„๋ณ„๋กœ ๊ณต๊ฐ„ ์ •๋ณด๊ฐ€ ์ถ•์ ๋จ. ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋งํฌ ๋ณ„๋กœ ๊ณต๊ฐ„์„ ๋ชจ์•„์ฃผ์–ด ๋ชจ์ž„์˜ ๊ณต๊ฐ„ ํƒ์ƒ‰ ๋ฐ ์„ ํƒ์˜ ์ˆ˜๊ณ ๋กœ์›€์„ ๋œ์–ด์คŒ + +**(3) ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํƒ์ƒ‰์˜ ๊ธฐํšŒ** +- MOPING์„ ํ†ตํ•ด ์ž์‹ ์ด ์‹ ๋ขฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋“ฑ๋กํ•œ ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ. ์ด๋Š” ๊ธฐ์กด์— ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํƒ์ƒ‰ ๊ธฐํšŒ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” MOPING์„ ๊ณ„์† ์ด์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๋™๊ธฐ๊ฐ€ ๋  ๊ฒƒ์ž„ | + +
+ +### **์„œ๋น„์Šค ์ฐจ๋ณ„์„ฑ** +![๋ชจํ•‘ ์ฐจ๋ณ„์„ฑ](https://github.com/user-attachments/assets/c4f91b2c-448d-4dc0-a657-f268fd58a987) + + +**์„ ๋ณ„๋œ ๊ณต๊ฐ„ ์ •๋ณด** + +- ๊ฐ์ž ํƒ์ƒ‰ํ•ด์˜จ ๊ณต๊ฐ„์„ ๋ชจ์•„์คŒ์œผ๋กœ์จ ์ตœ์ข… ํƒ์ƒ‰์„ ๋„์›€ + +**ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ์ง€๋„** + +- ์ง€๋„ ๋ทฐ๋กœ ๋ณด๋Š” ๊ณต์œ ๋œ ๊ณต๊ฐ„/๋ถ๋งˆํฌ ๋ชฉ๋ก + +
+ +# ๐Ÿ“ฑ ์„œ๋น„์Šค ๊ธฐ๋Šฅ +![๋ชจํ•‘ ๊ธฐ๋Šฅ1](https://github.com/user-attachments/assets/925b1d01-71fb-4a44-8fef-2d5d174309dd) + +![๋ชจํ•‘ ๊ธฐ๋Šฅ2](https://github.com/user-attachments/assets/480055d4-cb68-4918-bc68-bcf62bae9fa4) + +![๋ชจํ•‘ ๊ธฐ๋Šฅ3](https://github.com/user-attachments/assets/3c74868c-a653-4114-a34a-29dd17200bdb) + +![๋ชจํ•‘ ๊ธฐ๋Šฅ4](https://github.com/user-attachments/assets/1c8c93b2-a61e-447e-8040-4e5bc43dfaf6) + + +
+ +# ๐Ÿ“œ API ๋ช…์„ธ์„œ +[moping API ๋ช…์„ธ์„œ ๋‹ค์šด๋กœ๋“œ](https://github.com/user-attachments/files/17946614/Moping-Backend.API.Docs.pdf) + +
+ +# ๐Ÿ“ ERD +### MySQL +![image](https://github.com/user-attachments/assets/f1e44e08-739c-4a63-8d58-3fa763f85a66) + +### MongoDB +![image](https://github.com/user-attachments/assets/5dcfc6e4-5371-4538-bdfe-1f819b465bff) ---- -# ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ +
-## Language, Framework, Library +# ๐Ÿ—บ๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ +![image](https://github.com/user-attachments/assets/ef58b9e5-1f48-4a02-9fd8-48a2f9599ce9) +
+ +# ๐Ÿ–ผ๏ธ ํ”„๋ก ํŠธ์—”๋“œ + +## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ + +### Language, Framework, Library - **Next.js**: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)๊ณผ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„ ์ง€์›ํ•˜์—ฌ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์™€ SEO๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **TypeScript**: ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ์ •์  ํƒ€์ž… ์ฒดํ‚น์„ ์ œ๊ณตํ•˜์—ฌ, ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์ „๋ฐ˜์ ์ธ ํ’ˆ์งˆ์„ ๋†’์ž…๋‹ˆ๋‹ค. Next.js์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์กฐ๊ธฐ์— ๊ฐ์ง€ํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. @@ -37,13 +118,17 @@ - **ESLint**์™€ **Prettier**: ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. - **Husky**: Git hooks๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ ํ‘ธ์‹œ ์‹œ ์ž๋™์œผ๋กœ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜‘์—… ์ค‘ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ---- - -## CICD +### CICD - **Vercel**: Vercel์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์€ ์ž๋™ํ™”๋œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฐํฌ๋˜๋ฉฐ, Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ์ตœ์ ํ™”๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ---- +### ๐Ÿ™ ํ˜‘์—… ํˆด + +- **Slack**: ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ˜‘์—… ํˆด. +- **Notion**: ๋ฌธ์„œํ™”, ์ผ์ • ๊ด€๋ฆฌ, ์ž‘์—… ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํˆด. +- **Gather**: ๊ฐ€์ƒ ์˜คํ”ผ์Šค ํ™˜๊ฒฝ์—์„œ ํŒ€์›๋“ค์ด ์‹ค์‹œ๊ฐ„ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด. + +
## Branch Naming Rule @@ -62,7 +147,7 @@ branch๋Š” ์ž‘์—… ๋‹จ์œ„ & ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋œ issue๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ - `docs`: ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - `config`: ์„ค์ • ํŒŒ์ผ ๋˜๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ---- +
## File Naming Rule @@ -80,17 +165,16 @@ branch๋Š” ์ž‘์—… ๋‹จ์œ„ & ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋œ issue๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ - ์Šคํƒ€์ผ ํŒŒ์ผ์€ **kebab-case**๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. - ์˜ˆ์‹œ: `header-styles.scss`, `button.scss` ---- -# Pull Request Naming Rule & Template +
-Pull Request ์ž‘์„ฑ ์‹œ PR ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ ๋ชจ๋‘ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์€ ์ž‘์—…์˜ ๊ฐ„๊ฒฐํ•œ ์„ค๋ช…์„, ๋‚ด์šฉ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…์„ ๋‹ด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. +# PR -## Pull Request Naming Rule +### Pull Request Naming Rule - Pull Request: develop & main branch๋กœ mergeํ•  ๋•Œ์—๋Š” pull request๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์—๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์„ค๋ช…์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - Pull Request Naming Rule: `[] ` ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. -### ์˜ˆ์‹œ: +#### ์˜ˆ์‹œ: 1. ์ƒˆ๋กœ์šด UI ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ - Pull Request Title: `[feat] ์ƒˆ๋กœ์šด ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€` @@ -101,11 +185,26 @@ Pull Request ์ž‘์„ฑ ์‹œ PR ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ ๋ชจ๋‘ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์€ 4. ๋ฌธ์„œ ์ˆ˜์ • ์ž‘์—… - Pull Request Title: `[docs] ํ”„๋กœ์ ํŠธ README ์—…๋ฐ์ดํŠธ` ---- +
+ +### Issue ํ…œํ”Œ๋ฆฟ + +#### ๐Ÿ› Bug Report ํ…œํ”Œ๋ฆฟ + +- **์„ค๋ช…**: ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…. +- **์žฌํ˜„ ๋ฐฉ๋ฒ•**: ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…. +- **์˜ˆ์ƒ ๊ฒฐ๊ณผ**: ๊ธฐ๋Œ€ํ–ˆ๋˜ ๋™์ž‘์„ ๋ช…์‹œ. +- **ํ™˜๊ฒฝ**: OS, ๋ธŒ๋ผ์šฐ์ € ๋“ฑ์˜ ํ™˜๊ฒฝ ์ •๋ณด. + +#### โœจ Feature Request ํ…œํ”Œ๋ฆฟ + +- **์„ค๋ช…**: ์ œ์•ˆํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…. +- **๋™๊ธฐ**: ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ . +- **์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ**: ์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๋™์ž‘ ๋ฐฉ์‹ ์„ค๋ช…. -## Pull Request Template +### Pull Request Template -### ๐Ÿ“„ Pull Request ํ…œํ”Œ๋ฆฟ +#### ๐Ÿ“„ Pull Request ํ…œํ”Œ๋ฆฟ - **๊ด€๋ จ ์ด์Šˆ**: ์ž‘์—…ํ•œ ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. - **์ž‘์—… ๋‚ด์šฉ**: ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. @@ -113,7 +212,7 @@ Pull Request ์ž‘์„ฑ ์‹œ PR ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ ๋ชจ๋‘ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์€ - **์ถ”๊ฐ€ ์‚ฌํ•ญ**: ๋…ผ์˜๊ฐ€ ํ•„์š”ํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. - **๋ฆฌ๋ทฐ ์š”๊ตฌ ์‚ฌํ•ญ(์„ ํƒ)**: ํŠน๋ณ„ํžˆ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์ ์–ด์ฃผ์„ธ์š”. ---- +
## Commit Message Convention @@ -139,27 +238,297 @@ Pull Request ์ž‘์„ฑ ์‹œ PR ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ ๋ชจ๋‘ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์€ - ์˜ˆ์‹œ: `[rename] #22 ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋ช… ์ˆ˜์ •` - **enhancement**: ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๊ฐœ์„  ๋˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ์„ฑ๋Šฅ ๋“ฑ) - ์˜ˆ์‹œ: `[enhancement] #25 ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜์—ฌ ๋ฒ„ํŠผ ๋””์ž์ธ ๊ฐœ์„ ` + +
+ +# ๐Ÿ’ป ๋ฐฑ์—”๋“œ + + +## ๐Ÿ‘ ๊ณตํ†ต ์‚ฌํ•ญ + +- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ(service ๋ฉ”์†Œ๋“œ ๋ณ„๋กœ) : Kotest ์‚ฌ์šฉ +- ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๋„๋ก ์ฃผ์„์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (controller, service ๋ฉ”์„œ๋“œ๋งˆ๋‹ค) + - javadoc ํ˜•์‹ https://jake-seo-dev.tistory.com/59 +- issue ์ƒ์„ฑ ๋ฐ PR์„ ํ†ตํ•ด ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. +- ํ…Œ์ŠคํŠธ ๋ฐ ์›ํ• ํ•œ ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.(์—๋Ÿฌ๋‚˜ ์šด์˜์— ํ•„์š”ํ•œ ๋กœ๊ทธ. ๊ฒ€์ƒ‰์‹œ ๊ฒ€์ƒ‰์–ด์™€ ๊ฐ™์€ ๋กœ๊ทธ) +- ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ์ž˜ ๋งŒ๋“ค์–ด๋‘๊ธฐ (code, message, data) +- ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 9/30 ~ 11/24 +- ์Šคํ”„๋ฆฐํŠธ (3์ผ๊ฐ„๊ฒฉ) ์ง„ํ–‰ (ํ•ด์˜ฌ ๊ฒƒ์„ ์ •ํ•ด์„œ ํ•ด์˜ค๊ธฐ) + - ์ˆ˜์š”์ผ, ํ† ์š”์ผ + +
+ +## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ + +- #### Language, Framework, Library + ![Kotlin](https://img.shields.io/badge/Kotlin-7F52FF?style=flat-square&logo=Kotlin&logoColor=FFFFFF) + ![Springboot](https://img.shields.io/badge/Springboot-6DB33F?style=flat-square&logo=springboot&logoColor=white) + ![Gradle](https://img.shields.io/badge/Gradle-02303A.svg?style=flat-square&logo=Gradle&logoColor=white) + ![Spring Data JPA](https://img.shields.io/badge/Spring%20Data%20JPA-6DB33F?style=flat-square&logo=spring&logoColor=white) + - Kotlin์€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ•์œผ๋กœ ์ฝ”๋“œ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋ฉฐ, Null ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ + - JPA๋ฅผ ํ†ตํ•ด SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์— ์ง‘์ค‘ ๊ฐ€๋Šฅ + +- #### Test + ![JUnit](https://img.shields.io/badge/JUnit-25A162?style=flat-square&logo=JUnit5&logoColor=white) + ![MockK](https://img.shields.io/badge/MockK-FFCA28?style=flat-square&logo=MockK&logoColor=white) + - JUnit์€ ๊ฐ„๋‹จํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์„ค์ •์œผ๋กœ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ๊ณผ ์‹คํ–‰์„ ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ + - MockK๋Š” ์ฝ”ํ‹€๋ฆฐ์— ํŠนํ™”๋œ ๋ชจํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ฝ”๋ฃจํ‹ด๊ณผ ๊ฐ™์€ ์ฝ”ํ‹€๋ฆฐ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๋ชจํ‚นํ•  ์ˆ˜ ์žˆ์–ด ๋น„๋™๊ธฐ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ์— ๊ฐ•์ ์ด ์žˆ์Œ + +- #### CICD + ![Jenkins](https://img.shields.io/badge/Jenkins-D24939?style=flat-square&logo=Jenkins&logoColor=white) + ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=flat-square&logo=docker&logoColor=white) + - Jenkins๋ฅผ ์‚ฌ์šฉํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ + - Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์ผ๊ด€๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ , ๋ฐฐํฌ๋ฅผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ + +- #### Database + ![MySQL](https://img.shields.io/badge/mysql-%2300f.svg?style=flat-square&logo=mysql&logoColor=white) + ![MongoDB](https://img.shields.io/badge/MongoDB-47A248?style=flat-square&logo=MongoDB&logoColor=white) + ![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?style=flat-square&logo=redis&logoColor=white) + - MySQL์€ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ด‘๋ฒ”์œ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›๊ณผ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅ + - MongoDB๋Š” ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๋น ๋ฅธ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ์ œ๊ณต + - Redis๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์ดˆ๊ณ ์† ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์› + +- #### API ํ…Œ์ŠคํŠธ, ๋ช…์„ธ์„œ + ![Notion](https://img.shields.io/badge/Notion-%23000000.svg?style=flat-square&logo=notion&logoColor=white) + ![Postman](https://img.shields.io/badge/Postman-FF6C37?style=flat-square&logo=postman&logoColor=white) + ![Spring REST Docs](https://img.shields.io/badge/Spring%20REST%20Docs-6DB33F?style=flat-square&logo=spring&logoColor=white) + ![Swagger](https://img.shields.io/badge/Swagger-85EA2D?style=flat-square&logo=swagger&logoColor=white) + - RestDocs๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ฌธ์„œ๋ฅผ Swagger UI๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž์™€ ๋น„๊ฐœ๋ฐœ์ž ๋ชจ๋‘๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ API๋ฅผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ + - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ํ•จ๊ป˜ API ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด, ์‹ค์ œ ์ฝ”๋“œ์™€ ๋ฌธ์„œ์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ + - ํ…Œ์ŠคํŠธ ์‹œ์— ๋ฌธ์„œ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์–ด ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž„ + +- #### ๐Ÿ™ ํ˜‘์—… ํˆด + ![Slack](https://img.shields.io/badge/Slack-4A154B.svg?style=flat-square&logo=slack&logoColor=white) + ![Notion](https://img.shields.io/badge/Notion-000000.svg?style=flat-square&logo=notion&logoColor=white) +
+ +## ๐Ÿค™ ๊ฐœ๋ฐœ๊ทœ์น™ + +### โญ Code Convention + --- -## Issue ํ…œํ”Œ๋ฆฟ +
+Naming +
-### ๐Ÿ› Bug Report ํ…œํ”Œ๋ฆฟ +- ํŒจํ‚ค์ง€ : ์–ธ๋”์Šค์ฝ”์–ด(`_`)๋‚˜ ๋Œ€๋ฌธ์ž๋ฅผ ์„ž์ง€ ์•Š๊ณ  ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. +- ํด๋ž˜์Šค : ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ์ ˆ๋กœ ์ง€์œผ๋ฉฐ, ๋Œ€๋ฌธ์ž ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•(Upper camel case)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. +- ๋ฉ”์„œ๋“œ : ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๋™์‚ฌ/์ „์น˜์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์†Œ๋ฌธ์ž ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•(Lower camel case)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜๋„๊ฐ€ ์ „๋‹ฌ๋˜๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. +- ๋ณ€์ˆ˜ : ์†Œ๋ฌธ์ž ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•(Lower camel case)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. +- ENUM, ์ƒ์ˆ˜ : ์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ž๋ฃŒํ˜•์ด๋ฉด์„œ `static final`๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ํ•„๋“œ์ผ ๋•Œ๋ฅผ ์ƒ์ˆ˜๋กœ ๊ฐ„์ฃผํ•˜๋ฉฐ, ๋Œ€๋ฌธ์ž์™€ ์–ธ๋”์Šค์ฝ”์–ด(UPPER_SNAKE_CASE)๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. +- DB ํ…Œ์ด๋ธ”: ์†Œ๋ฌธ์ž์™€ ์–ธ๋”์Šค์ฝ”์–ด๋กœ(lower_snake_case) ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. +- ์ปฌ๋ ‰์…˜(Collection): **๋ณต์ˆ˜ํ˜•**์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ **์ปฌ๋ ‰์…˜์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค**. (Ex. userList, users, userMap) +- LocalDateTime: ์ ‘๋ฏธ์‚ฌ์— *Time**๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. -- **์„ค๋ช…**: ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…. -- **์žฌํ˜„ ๋ฐฉ๋ฒ•**: ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…. -- **์˜ˆ์ƒ ๊ฒฐ๊ณผ**: ๊ธฐ๋Œ€ํ–ˆ๋˜ ๋™์ž‘์„ ๋ช…์‹œ. -- **ํ™˜๊ฒฝ**: OS, ๋ธŒ๋ผ์šฐ์ € ๋“ฑ์˜ ํ™˜๊ฒฝ ์ •๋ณด. +
+
+
+Comment +
-### โœจ Feature Request ํ…œํ”Œ๋ฆฟ +### 1. ํ•œ์ค„ ์ฃผ์„์€ // ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. -- **์„ค๋ช…**: ์ œ์•ˆํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…. -- **๋™๊ธฐ**: ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ . -- **์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ**: ์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๋™์ž‘ ๋ฐฉ์‹ ์„ค๋ช…. +```java +// ํ•˜์ด~ + +``` + +### 2. ํ•œ์ค„ ์ฃผ์„ ์™ธ์— ์„ค๋ช…์„ ์œ„ํ•œ ์ฃผ์„์€ JavaDoc์„ ์‚ฌ์šฉํ•œ๋‹ค. + +```java +/** + * ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค. + * + *

์ด ๋ฉ”์†Œ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

+ * + * @param a ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜ + * @param b ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜ + * @return ๋‘ ์ •์ˆ˜์˜ ํ•ฉ + * @throws ArithmeticException ๋งŒ์•ฝ ๊ณ„์‚ฐ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด + */ + +``` + +
+
+
+Import +
+ +### 1. ์†Œ์ŠคํŒŒ์ผ๋‹น 1๊ฐœ์˜ ํƒ‘๋ ˆ๋ฒจ ํด๋ž˜์Šค๋ฅผ ๋‹ด๊ธฐ + +> ํƒ‘๋ ˆ๋ฒจ ํด๋ž˜์Šค(Top level class)๋Š” ์†Œ์Šค ํŒŒ์ผ์— 1๊ฐœ๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ( ํƒ‘๋ ˆ๋ฒจ ํด๋ž˜์Šค ์„ ์–ธ์˜ ์ปดํŒŒ์ผํƒ€์ž„ ์—๋Ÿฌ ์ฒดํฌ์— ๋Œ€ํ•ด์„œ๋Š” Java Language Specification 7.6 ์ฐธ์กฐ ) +> + +### 2. static import์—๋งŒ ์™€์ผ๋“œ ์นด๋“œ ํ—ˆ์šฉ + +> ํด๋ž˜์Šค๋ฅผ importํ• ๋•Œ๋Š” ์™€์ผ๋“œ์นด๋“œ(*) ์—†์ด ๋ชจ๋“  ํด๋ž˜์Šค๋ช…์„ ๋‹ค ์“ด๋‹ค. static import์—์„œ๋Š” ์™€์ผ๋“œ์นด๋“œ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. +> + +### 3. ์• ๋„ˆํ…Œ์ด์…˜ ์„ ์–ธ ํ›„ ์ƒˆ์ค„ ์‚ฌ์šฉ + +> ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž์— ๋ถ™๋Š” ์• ๋„ˆํ…Œ์ด์…˜์€ ์„ ์–ธ ํ›„ ์ƒˆ์ค„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์œ„์น˜์—์„œ๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ์• ๋„ˆํ…Œ์ด์…˜ 1๊ฐœ๋Š” ๊ฐ™์€ ์ค„์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. +> + +### 4. ๋ฐฐ์—ด์—์„œ ๋Œ€๊ด„ํ˜ธ๋Š” ํƒ€์ž… ๋’ค์— ์„ ์–ธ + +> ๋ฐฐ์—ด ์„ ์–ธ์— ์˜ค๋Š” ๋Œ€๊ด„ํ˜ธ([])๋Š” ํƒ€์ž…์˜ ๋ฐ”๋กœ ๋’ค์— ๋ถ™์ธ๋‹ค. ๋ณ€์ˆ˜๋ช… ๋’ค์— ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. +> + +### 5. `long`ํ˜• ๊ฐ’์˜ ๋งˆ์ง€๋ง‰์— `L`๋ถ™์ด๊ธฐ + +> longํ˜•์˜ ์ˆซ์ž์—๋Š” ๋งˆ์ง€๋ง‰์— ๋Œ€๋ฌธ์ž 'Lโ€™์„ ๋ถ™์ธ๋‹ค. ์†Œ๋ฌธ์ž 'lโ€™๋ณด๋‹ค ์ˆซ์ž '1โ€™๊ณผ์˜ ์ฐจ์ด๊ฐ€ ์ปค์„œ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค. +> + +
+
+
+URL +
+ +### URL + +URL์€ RESTful API ์„ค๊ณ„ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. + +- HTTP Method๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” get, put ๋“ฑ์˜ ํ–‰์œ„๋Š” url์— ํ‘œํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. +- ๋งˆ์ง€๋ง‰์— `/` ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. +- `_` ๋Œ€์‹  ``๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. +- ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. +- ํ™•์žฅ์ž๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +
+
+ +
+ +### โ˜€๏ธ Commit Convention --- -## ๐Ÿ™ ํ˜‘์—… ํˆด +
+Rules +
-- **Slack**: ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ˜‘์—… ํˆด. -- **Notion**: ๋ฌธ์„œํ™”, ์ผ์ • ๊ด€๋ฆฌ, ์ž‘์—… ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํˆด. -- **Gather**: ๊ฐ€์ƒ ์˜คํ”ผ์Šค ํ™˜๊ฒฝ์—์„œ ํŒ€์›๋“ค์ด ์‹ค์‹œ๊ฐ„ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด. +### 1. Git Flow + +์ž‘์—… ์‹œ์ž‘ ์‹œ ์„ ํ–‰๋˜์–ด์•ผ ํ•  ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. + +> issue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.feature branch๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.add โ†’ commit โ†’ push โ†’ pull request ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.pull request๋ฅผ develop branch๋กœ merge ํ•ฉ๋‹ˆ๋‹ค.์ด์ „์— merge๋œ ์ž‘์—…์ด ์žˆ์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ branch์—์„œ ์ง„ํ–‰ํ•˜๋˜ ์ž‘์—…์— merge๋œ ์ž‘์—…์„ pull ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.์ข…๋ฃŒ๋œ issue์™€ pull request์˜ label์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +> + +### 2. IntelliJ + +IntelliJ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ์ž‘์—… ์‹œ์ž‘ ์‹œ ์„ ํ–‰๋˜์–ด์•ผ ํ•  ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. + +> ๊นƒํ—ˆ๋ธŒ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์—์„œ issue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.์ƒ์„ฑํ•œ issue ๋ฒˆํ˜ธ์— ๋งž๋Š” feature branch๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— feature branch๋กœ checkout ํ•ฉ๋‹ˆ๋‹ค.feature branch์—์„œ issue ๋‹จ์œ„ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.์ž‘์—… ์™„๋ฃŒ ํ›„, add โ†’ commit์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.remote develop branch์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด pull ๋ฐ›์€ ์ดํ›„ push๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.๋งŒ์•ฝ ์ฝ”๋“œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค๋ฉด, IntelliJ์—์„œ ์ฝ”๋“œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ณ  add โ†’ commit์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.push โ†’ pull request (feature branch โ†’ develop branch) ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.pull request๊ฐ€ ์ž‘์„ฑ๋˜๋ฉด ์ž‘์„ฑ์ž ์ด์™ธ์˜ ๋‹ค๋ฅธ ํŒ€์›์ด code review๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.์ตœ์†Œ ํ•œ ๋ช… ์ด์ƒ์˜ ํŒ€์›์—๊ฒŒ code review์™€ approve๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ pull request ์ƒ์„ฑ์ž๊ฐ€ merge๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.์ข…๋ฃŒ๋œ issue์™€ pull request์˜ label๊ณผ milestone์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +> + +### 3. Etc + +์ค€์ˆ˜ํ•ด์•ผ ํ•  ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. + +> develop branch์—์„œ์˜ ์ž‘์—…์€ ์›์น™์ ์œผ๋กœ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, README ์ž‘์„ฑ์€ develop branch์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.commit, push, merge, pull request ๋“ฑ ๋ชจ๋“  ์ž‘์—…์€ ์˜ค๋ฅ˜ ์—†์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ง€ ํ™•์ธ ํ›„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. +> + +
+
+ +
+Branch +
+ +### 1. Branch + +branch๋Š” ์ž‘์—… ๋‹จ์œ„ & ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋œ issue๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. + +### 2. Branch Naming Rule + +branch๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „ issue๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. issue ์ž‘์„ฑ ํ›„ ์ƒ์„ฑ๋˜๋Š” ๋ฒˆํ˜ธ์™€ domain ๋ช…์„ ์กฐํ•ฉํ•˜์—ฌ branch์˜ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.ย `/-`ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. + +### 3. Prefix + +- `main`ย : ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ์‚ฐ์ถœ๋ฌผ์ด ์ €์žฅ๋  ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. +- `develop`: feature branch์—์„œ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ๋“ค์ด merge๋  default branch ์ž…๋‹ˆ๋‹ค. +- `feature`: ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” branch ์ž…๋‹ˆ๋‹ค. ์ด์Šˆ ๋ณ„ & ์ž‘์—… ๋ณ„๋กœ branch๋ฅผ ์ƒ์„ฑ ํ›„ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ naming์€ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. + +### 4. Domain + +- `user`, `map`, (`error`, `config`) + +### 5. Etc + +- `feature/7-user`, `feature/5-config` + +
+
+ +
+Issue +
+ +### 1. Issue + +์ž‘์—… ์‹œ์ž‘ ์ „ issue ์ƒ์„ฑ์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. issue ๋Š” ์ž‘์—… ๋‹จ์œ„ & ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ƒ์„ฑํ•˜๋ฉฐ ์ƒ์„ฑ ํ›„ ํ‘œ์‹œ๋˜๋Š” issue number ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ branch ์ด๋ฆ„๊ณผ commit message๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. + +issue ์ œ๋ชฉ์—๋Š” ๊ธฐ๋Šฅ์˜ ๋Œ€ํ‘œ์ ์ธ ์„ค๋ช…์„ ์ ๊ณ  ๋‚ด์šฉ์—๋Š” ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ ๋ฐ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. + +issue ์ƒ์„ฑ ์‹œ github ์˜ค๋ฅธํŽธ์˜ assignee, label์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. assignee๋Š” ํ•ด๋‹น issue ๋‹ด๋‹น์ž, label์€ ์ž‘์—… ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. + +### 2. Issue Naming Rule + +`[] `ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. + +### 3. Etc + + + +--- + +
+
+ +
+Commit +
+ +### 1. Commit Message Convention + +`[] # `ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. + +- **feat**ย : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„ย `[feat] #11 ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ API ๊ธฐ๋Šฅ ๊ตฌํ˜„` +- **fix**ย : ์ฝ”๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ •ย `[fix] #10 ํšŒ์›๊ฐ€์ž… ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์˜ค๋ฅ˜ ์ˆ˜์ •` +- **del**ย : ์“ธ๋ชจ์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œย `[del] #12 ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ` +- **docs**ย : README๋‚˜ wiki ๋“ฑ์˜ ๋ฌธ์„œ ๊ฐœ์ •ย `[docs] #14 ๋ฆฌ๋“œ๋ฏธ ์ˆ˜์ •` +- **refactor**ย : ๋‚ด๋ถ€ ๋กœ์ง์€ ๋ณ€๊ฒฝ ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฆฌํŒฉํ„ฐ๋งย `[refactor] #15 ์ฝ”๋“œ ๋กœ์ง ๊ฐœ์„ ` +- **chore**ย : ์˜์กด์„ฑ ์ถ”๊ฐ€, yml ์ถ”๊ฐ€์™€ ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ํŒŒ์ผ ์ด๋™ `[chore] #21 yml ์ˆ˜์ •`, `[chore] #22 lombok ์˜์กด์„ฑ ์ถ”๊ฐ€` +- **test**: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ, ์ˆ˜์ • `[test] #20 ๋กœ๊ทธ์ธ API ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ` +- **style** : ์ฝ”๋“œ์— ๊ด€๋ จ ์—†๋Š” ์ฃผ์„ ๋‹ฌ๊ธฐ, ์ค„๋ฐ”๊ฟˆ +- **rename** : ํŒŒ์ผ ๋ฐ ํด๋”๋ช… ์ˆ˜์ • + +
+
+ +
+Pull Request +
+ +### 1. Pull Request + +develop & main branch๋กœ mergeํ•  ๋•Œ์—๋Š” pull request๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. pull request์˜ ๋‚ด์šฉ์—๋Š” ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. + +### 2. Pull Request Naming Rule + +`[] `ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. + +### 3. Etc + +[feat] ์•ฝ์† ์žก๊ธฐ API ๊ตฌํ˜„ +
[chore] spring data JPA ์˜์กด์„ฑ ์ถ”๊ฐ€ + +
+
diff --git a/fe/src/app/event-maps/[id]/[nonMemberId]/load-mappin-edit/page.tsx b/fe/src/app/event-maps/[id]/[nonMemberId]/load-mappin-edit/page.tsx index 55b4c03..b62e554 100644 --- a/fe/src/app/event-maps/[id]/[nonMemberId]/load-mappin-edit/page.tsx +++ b/fe/src/app/event-maps/[id]/[nonMemberId]/load-mappin-edit/page.tsx @@ -135,7 +135,7 @@ export default function LinkEditPage() {
{userName && ( -
+
{userName}๋‹˜์˜ ๋งตํ•€ ๋ชจ์Œ์ด์—์š”
)} diff --git a/fe/src/app/eventcreate-page/components/EventNameInput.tsx b/fe/src/app/eventcreate-page/components/EventNameInput.tsx index 8d90214..5e9f979 100644 --- a/fe/src/app/eventcreate-page/components/EventNameInput.tsx +++ b/fe/src/app/eventcreate-page/components/EventNameInput.tsx @@ -24,14 +24,15 @@ export default function EventNameInput({ }: EventNameInputProps) { const [hasUserEdited, setHasUserEdited] = useState(false); const [isTyping, setIsTyping] = useState(false); - const showWarning = hasUserEdited && !isValidLength(cleanString(value), 1); useEffect(() => { - if (!hasUserEdited) { + if (!hasUserEdited && !value) { const newEventName: string = generateDefaultEventName(selectedLocation); - onChange(newEventName); + if (newEventName) { + onChange(newEventName); + } } - }, [selectedLocation, onChange, hasUserEdited]); + }, [selectedLocation, onChange, hasUserEdited, value]); const handleInputChange = useCallback( (e: React.ChangeEvent) => { @@ -51,6 +52,8 @@ export default function EventNameInput({ onChange(""); }, [onChange]); + const showWarning = hasUserEdited && !isValidLength(cleanString(value), 1); + return (