Skip to content

๐Ÿ“Œ ๋ชจ์ผ ๋•Œ ๋งตํ•€, MOPING - FrontEnd

Notifications You must be signed in to change notification settings

Team-pingping/pingping-FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“Œ ๋ชจ์ผ ๋•Œ ๋งตํ•€, MOPING

Moping ์„œ๋น„์Šค ๋ฐฐํฌ ์ฃผ์†Œ : https://www.moping.co.kr/

๋ชจํ•‘ ๋ฉ”์ธ


๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆย ํŒ€ ์†Œ๊ฐœ

ํŒ€๋ช… : ํ•‘ํ•‘์ด๋“ค

๋ถ„์•ผ ์ด๋ฆ„ ํฌ์ง€์…˜ ๋‚ด์šฉ
๊ธฐํš ๋ฐ•๊ฐ€์€ ๐Ÿ“ˆย PM, ์„œ๋น„์Šค ๊ธฐํš ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ•
๊ธฐํš ๊น€๊ทœ๋ฆฌ ๐Ÿ“‹ ์„œ๋น„์Šค ๊ธฐํš ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ•, ์„œ๋น„์Šค ๋งˆ์ผ€ํŒ… ๋ฆฌ๋“œ
๊ธฐํš ์•ˆ์žฌํ˜• ๐Ÿ“Šย ์„œ๋น„์Šค ๊ธฐํš ์œ ์ € ๋ฆฌ์„œ์น˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ž‘์„ฑ, ์„œ๋น„์Šค ์ •์ฑ… ํ™•๋ฆฝ,
๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๊ตฌ์ถ•, ์„œ๋น„์Šค ๋งˆ์ผ€ํŒ… ๋ฆฌ๋“œ
๋””์ž์ธ ๊น€์œค์„œ ๐ŸŽจ ๋””์ž์ธ ๋ฆฌ๋“œ ux/ui๋””์ž์ธ, gui ๋””์ž์ธ
๋””์ž์ธ ์ด์–ด๋ น ๐ŸŽจ ๋””์ž์ธ ux/ui๋””์ž์ธ, gui ๋””์ž์ธ
๊ฐœ๋ฐœ ์ตœํ˜ธ ๐Ÿ“ฑ ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌ๋“œ ํ™”๋ฉด UI ๊ตฌํ˜„, API ์—ฐ๋™
๊ฐœ๋ฐœ ์ตœ์„œํฌ ๐Ÿ“ฑ ํ”„๋ก ํŠธ์—”๋“œ ํ™”๋ฉด UI ๊ตฌํ˜„, API ์—ฐ๋™
๊ฐœ๋ฐœ ๋ฌธํฌ์ƒ ๐Ÿ’ป ๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ API ๊ตฌํ˜„, ERD ์„ค๊ณ„, ์„œ๋ฒ„ ๋ฐฐํฌ
๊ฐœ๋ฐœ ์œค์†Œ๋ฏผ ๐Ÿ’ป ๋ฐฑ์—”๋“œ API ๊ตฌํ˜„, ERD ์„ค๊ณ„, ์„œ๋ฒ„ ๋ฐฐํฌ

๐Ÿค” ์„œ๋น„์Šค ๊ฐœ์š”

๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”1 ๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”2 ๋ชจํ•‘ ์„œ๋น„์Šค๊ฐœ์š”3

๋ชฉํ‘œ ์‚ฌ์šฉ์ž

  • ๋งˆ์Œ์— ๋“œ๋Š” ๊ณต๊ฐ„์„ ๋„ค์ด๋ฒ„ ์ง€๋„์— ๋ถ๋งˆํฌํ•˜๋Š” 20๋Œ€ ์—ฌ์„ฑ
  • SNS๋ฅผ ํ†ตํ•ด ํŠธ๋ Œ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘ํ•จ ์ž์‹ ์˜ ํ™•์‹คํ•œ ์ถ”๊ตฌ๋ฏธ๋ฅผ ๊ฐ€์ง ์ž์‹ ์˜ ์ทจํ–ฅ ๊ณต๊ฐ„์„ ๊ณต์œ  ์นœ๊ตฌ์™€ ํ•จ๊ป˜ ๊ทธ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ์ฆ๊น€

Pain Point

  • ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฒฐ์ •ํ•  ๋•Œ์˜ ์–ด๋ ค์›€
  • ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ผ์ผ์ด ๊ณต์œ ํ•˜๋Š” ๊ณผ์ •์˜ ์ˆ˜๊ณ ๋กœ์›€
  • ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ ๋ชจ๋‘๊ฐ€ ์ฐฌ์„ฑํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€

Needs

  • ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์ •๋ณด์™€ ํšจ์œจ์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ†ตํ•œ ๊ณต๊ฐ„ ์„ ํƒ
  • ์ž์‹ ์ด ์‹ ๋ขฐํ•˜๋Š” ์ง‘๋‹จ์ด ๋ถ๋งˆํฌํ•œ ๊ณต๊ฐ„์„ ์‚ดํŽด๋ด„์œผ๋กœ์จ ์‹ ๋ขฐ๋„ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ์Œ
  • ์นœ๊ตฌ๋“ค๊ณผ ์•ฝ์† ์žฅ์†Œ๋ฅผ ์ •ํ•  ๋•Œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜๊ณ  ์‹ถ์Œ

Solution ๋ฐ ๊ธฐ๋Œ€ํšจ๊ณผ

(1) ์–‘๋ฐฉํ–ฅ ๊ณต๊ฐ„ ์„ ํƒ

  • MOPING์€ N๋ช…์˜ ๊ณต๊ฐ„์„ ์ง€๋„์ƒ์— ํ•œ๋ฒˆ์— ๋ชจ์Œ์œผ๋กœ์จ, ํƒ์ƒ‰ ๊ณผ์ •์„ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ์— ๋„์›€์„ ์คŒ

(2) ๋ชจ์ž„ ๋งํฌ์— ์ถ•์ ๋˜๋Š” ๊ณต๊ฐ„ ์ •๋ณด

  • MOPING์€ ๋ชจ์ž„๋ณ„๋กœ ๊ณต๊ฐ„ ์ •๋ณด๊ฐ€ ์ถ•์ ๋จ. ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋งํฌ ๋ณ„๋กœ ๊ณต๊ฐ„์„ ๋ชจ์•„์ฃผ์–ด ๋ชจ์ž„์˜ ๊ณต๊ฐ„ ํƒ์ƒ‰ ๋ฐ ์„ ํƒ์˜ ์ˆ˜๊ณ ๋กœ์›€์„ ๋œ์–ด์คŒ

(3) ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํƒ์ƒ‰์˜ ๊ธฐํšŒ

  • MOPING์„ ํ†ตํ•ด ์ž์‹ ์ด ์‹ ๋ขฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋“ฑ๋กํ•œ ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ. ์ด๋Š” ๊ธฐ์กด์— ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํƒ์ƒ‰ ๊ธฐํšŒ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” MOPING์„ ๊ณ„์† ์ด์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๋™๊ธฐ๊ฐ€ ๋  ๊ฒƒ์ž„ |

์„œ๋น„์Šค ์ฐจ๋ณ„์„ฑ

๋ชจํ•‘ ์ฐจ๋ณ„์„ฑ

์„ ๋ณ„๋œ ๊ณต๊ฐ„ ์ •๋ณด

  • ๊ฐ์ž ํƒ์ƒ‰ํ•ด์˜จ ๊ณต๊ฐ„์„ ๋ชจ์•„์คŒ์œผ๋กœ์จ ์ตœ์ข… ํƒ์ƒ‰์„ ๋„์›€

ํ•จ๊ป˜ ๊ณต๊ฐ„์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ์ง€๋„

  • ์ง€๋„ ๋ทฐ๋กœ ๋ณด๋Š” ๊ณต์œ ๋œ ๊ณต๊ฐ„/๋ถ๋งˆํฌ ๋ชฉ๋ก

๐Ÿ“ฑ ์„œ๋น„์Šค ๊ธฐ๋Šฅ

๋ชจํ•‘ ๊ธฐ๋Šฅ1

๋ชจํ•‘ ๊ธฐ๋Šฅ2

๋ชจํ•‘ ๊ธฐ๋Šฅ3

๋ชจํ•‘ ๊ธฐ๋Šฅ4


๐Ÿ“œ API ๋ช…์„ธ์„œ

moping API ๋ช…์„ธ์„œ ๋‹ค์šด๋กœ๋“œ


๐Ÿ“ ERD

MySQL

image

MongoDB

image


๐Ÿ—บ๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

image

๐Ÿ–ผ๏ธ ํ”„๋ก ํŠธ์—”๋“œ

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

Language, Framework, Library

  • Next.js: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)๊ณผ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„ ์ง€์›ํ•˜์—ฌ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์™€ SEO๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript: ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ์ •์  ํƒ€์ž… ์ฒดํ‚น์„ ์ œ๊ณตํ•˜์—ฌ, ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์ „๋ฐ˜์ ์ธ ํ’ˆ์งˆ์„ ๋†’์ž…๋‹ˆ๋‹ค. Next.js์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์กฐ๊ธฐ์— ๊ฐ์ง€ํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • React: UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Next.js์™€ ํ•จ๊ป˜ ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS/SCSS: ์ฃผ๋กœ Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ๋ง์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด๋‚˜ ํŠน์ˆ˜ํ•œ ์Šคํƒ€์ผ๋ง ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ์ „ํžˆ CSS/SCSS๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Tailwind CSS๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์‹ ์†ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์Šคํƒ€์ผ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ CSS๋‚˜ SCSS๋กœ ๋ณด์™„ํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Tailwind CSS: ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜์˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฏธ๋ฆฌ ์ •์˜๋œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ง๊ด€์ ์ด๊ณ  ๋น ๋ฅธ ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ CSS ํŒŒ์ผ ์—†์ด HTML์—์„œ ์ง์ ‘ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ฉฐ, ํ•„์š” ์‹œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ESLint์™€ Prettier: ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  • Husky: Git hooks๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ ํ‘ธ์‹œ ์‹œ ์ž๋™์œผ๋กœ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜‘์—… ์ค‘ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

CICD

  • Vercel: Vercel์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์€ ์ž๋™ํ™”๋œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฐํฌ๋˜๋ฉฐ, Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ์ตœ์ ํ™”๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ™ ํ˜‘์—… ํˆด

  • Slack: ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ˜‘์—… ํˆด.
  • Notion: ๋ฌธ์„œํ™”, ์ผ์ • ๊ด€๋ฆฌ, ์ž‘์—… ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํˆด.
  • Gather: ๊ฐ€์ƒ ์˜คํ”ผ์Šค ํ™˜๊ฒฝ์—์„œ ํŒ€์›๋“ค์ด ์‹ค์‹œ๊ฐ„ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด.

Branch Naming Rule

branch๋Š” ์ž‘์—… ๋‹จ์œ„ & ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋œ issue๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์€ ์ˆ˜์ • ์ž‘์—…์€ ์ด์Šˆ ์—†์ด๋„ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Branch Naming Rule:

    1. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋˜๋Š” ์ค‘์š”ํ•œ ์ž‘์—…: ์ด์Šˆ๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ ๋ฒˆํ˜ธ์™€ ์ž‘์—…์˜ ๋„๋ฉ”์ธ์„ ์กฐํ•ฉํ•˜์—ฌ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ: feature/25-ui-component
    2. ์ž‘์€ ์ˆ˜์ • ์ž‘์—…: ๋ฌธ์„œ ์ˆ˜์ •, ๊ฐ„๋‹จํ•œ ์Šคํƒ€์ผ๋ง ๋ณ€๊ฒฝ ๋“ฑ ์‚ฌ์†Œํ•œ ์ž‘์—…์€ ์ด์Šˆ ์—†์ด๋„ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์˜ˆ: docs/update-readme, style/update-button-styles

    Prefix ์„ค๋ช…:

    • feature: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • bugfix: ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • docs: ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • config: ์„ค์ • ํŒŒ์ผ ๋˜๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

File Naming Rule

  • ํŒŒ์ผ๋ช… ๊ทœ์น™: ํŒŒ์ผ ๋ฐ ํด๋” ์ด๋ฆ„์€ ์ผ๊ด€๋œ ๋„ค์ด๋ฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ํŒ€์› ๊ฐ„ ํŒŒ์ผ๋ช…์„ ์‰ฝ๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ:
      • ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋ช…์€ PascalCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ: Button.tsx, UserProfile.tsx
    2. ์ผ๋ฐ˜ ํŒŒ์ผ:
      • ์ผ๋ฐ˜์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜, ์„ค์ • ํŒŒ์ผ ๋“ฑ์€ camelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ: formatDate.ts, fetchData.ts
    3. ํด๋” ์ด๋ฆ„:
      • ํด๋” ์ด๋ฆ„์€ kebab-case๋กœ ์ž‘์„ฑํ•˜๋ฉฐ, ์†Œ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ: user-profile/, button-styles/
    4. CSS/SCSS ํŒŒ์ผ:
      • ์Šคํƒ€์ผ ํŒŒ์ผ์€ kebab-case๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ์‹œ: header-styles.scss, button.scss

PR

Pull Request Naming Rule

  • Pull Request: develop & main branch๋กœ mergeํ•  ๋•Œ์—๋Š” pull request๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. PR ์ œ๋ชฉ์—๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์„ค๋ช…์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Pull Request Naming Rule: [<Prefix>] <Description> ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  1. ์ƒˆ๋กœ์šด UI ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
    • Pull Request Title: [feat] ์ƒˆ๋กœ์šด ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
  2. ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •
    • Pull Request Title: [chore] ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ ์—…๋ฐ์ดํŠธ
  3. ๋ฒ„๊ทธ ์ˆ˜์ •
    • Pull Request Title: [fix] ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด ๋ฒ„๊ทธ ์ˆ˜์ •
  4. ๋ฌธ์„œ ์ˆ˜์ • ์ž‘์—…
    • Pull Request Title: [docs] ํ”„๋กœ์ ํŠธ README ์—…๋ฐ์ดํŠธ

Issue ํ…œํ”Œ๋ฆฟ

๐Ÿ› Bug Report ํ…œํ”Œ๋ฆฟ

  • ์„ค๋ช…: ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช….
  • ์žฌํ˜„ ๋ฐฉ๋ฒ•: ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๋ณ„ ์„ค๋ช….
  • ์˜ˆ์ƒ ๊ฒฐ๊ณผ: ๊ธฐ๋Œ€ํ–ˆ๋˜ ๋™์ž‘์„ ๋ช…์‹œ.
  • ํ™˜๊ฒฝ: OS, ๋ธŒ๋ผ์šฐ์ € ๋“ฑ์˜ ํ™˜๊ฒฝ ์ •๋ณด.

โœจ Feature Request ํ…œํ”Œ๋ฆฟ

  • ์„ค๋ช…: ์ œ์•ˆํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช….
  • ๋™๊ธฐ: ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ .
  • ์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ: ์˜ˆ์ƒ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๋™์ž‘ ๋ฐฉ์‹ ์„ค๋ช….

Pull Request Template

๐Ÿ“„ Pull Request ํ…œํ”Œ๋ฆฟ

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

Commit Message Convention

[<Prefix>] #<Issue_Number> <Description> ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • ์˜ˆ์‹œ: [feat] #11 ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  • fix: ๋ฒ„๊ทธ ์ˆ˜์ •
    • ์˜ˆ์‹œ: [fix] #10 UI ๋ Œ๋”๋ง ์˜ค๋ฅ˜ ์ˆ˜์ •
  • docs: ๋ฌธ์„œ ์ˆ˜์ •
    • ์˜ˆ์‹œ: [docs] #14 README ํŒŒ์ผ ์—…๋ฐ์ดํŠธ
  • style: ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ ์Šคํƒ€์ผ ์ˆ˜์ •
    • ์˜ˆ์‹œ: [style] #23 ์ฝ”๋“œ ํฌ๋งทํŒ… ์ ์šฉ
  • refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€ํ™” ์—†์Œ)
    • ์˜ˆ์‹œ: [refactor] #15 ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๊ฐœ์„ 
  • chore: ๊ธฐํƒ€ ์ž์ž˜ํ•œ ์ˆ˜์ • (๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋“ฑ)
    • ์˜ˆ์‹œ: [chore] #21 ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ
  • test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •
    • ์˜ˆ์‹œ: [test] #18 ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  • perf: ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ด€๋ จ ์ž‘์—…
    • ์˜ˆ์‹œ: [perf] #20 ๋ Œ๋”๋ง ์ตœ์ ํ™” ์ž‘์—…
  • rename: ํŒŒ์ผ ๋ฐ ํด๋”๋ช… ์ˆ˜์ •
    • ์˜ˆ์‹œ: [rename] #22 ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋ช… ์ˆ˜์ •
  • enhancement: ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๊ฐœ์„  ๋˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ์„ฑ๋Šฅ ๋“ฑ)
    • ์˜ˆ์‹œ: [enhancement] #25 ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜์—ฌ ๋ฒ„ํŠผ ๋””์ž์ธ ๊ฐœ์„ 

๐Ÿ’ป ๋ฐฑ์—”๋“œ

๐Ÿ‘ ๊ณตํ†ต ์‚ฌํ•ญ

  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ(service ๋ฉ”์†Œ๋“œ ๋ณ„๋กœ) : Kotest ์‚ฌ์šฉ
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๋„๋ก ์ฃผ์„์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (controller, service ๋ฉ”์„œ๋“œ๋งˆ๋‹ค)
  • issue ์ƒ์„ฑ ๋ฐ PR์„ ํ†ตํ•ด ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ฐ ์›ํ• ํ•œ ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.(์—๋Ÿฌ๋‚˜ ์šด์˜์— ํ•„์š”ํ•œ ๋กœ๊ทธ. ๊ฒ€์ƒ‰์‹œ ๊ฒ€์ƒ‰์–ด์™€ ๊ฐ™์€ ๋กœ๊ทธ)
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ์ž˜ ๋งŒ๋“ค์–ด๋‘๊ธฐ (code, message, data)
  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 9/30 ~ 11/24
  • ์Šคํ”„๋ฆฐํŠธ (3์ผ๊ฐ„๊ฒฉ) ์ง„ํ–‰ (ํ•ด์˜ฌ ๊ฒƒ์„ ์ •ํ•ด์„œ ํ•ด์˜ค๊ธฐ)
    • ์ˆ˜์š”์ผ, ํ† ์š”์ผ

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

  • Language, Framework, Library

    Kotlin Springboot Gradle Spring Data JPA

    • Kotlin์€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ•์œผ๋กœ ์ฝ”๋“œ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋ฉฐ, Null ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€
    • JPA๋ฅผ ํ†ตํ•ด SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์— ์ง‘์ค‘ ๊ฐ€๋Šฅ
  • Test

    JUnit MockK

    • JUnit์€ ๊ฐ„๋‹จํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์„ค์ •์œผ๋กœ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ๊ณผ ์‹คํ–‰์„ ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
    • MockK๋Š” ์ฝ”ํ‹€๋ฆฐ์— ํŠนํ™”๋œ ๋ชจํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ฝ”๋ฃจํ‹ด๊ณผ ๊ฐ™์€ ์ฝ”ํ‹€๋ฆฐ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๋ชจํ‚นํ•  ์ˆ˜ ์žˆ์–ด ๋น„๋™๊ธฐ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ์— ๊ฐ•์ ์ด ์žˆ์Œ
  • CICD

    Jenkins Docker

    • Jenkins๋ฅผ ์‚ฌ์šฉํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ
    • Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์ผ๊ด€๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ , ๋ฐฐํฌ๋ฅผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
  • Database

    MySQL MongoDB Redis

    • MySQL์€ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ด‘๋ฒ”์œ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›๊ณผ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅ
    • MongoDB๋Š” ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๋น ๋ฅธ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ์ œ๊ณต
    • Redis๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์ดˆ๊ณ ์† ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›
  • API ํ…Œ์ŠคํŠธ, ๋ช…์„ธ์„œ

    Notion Postman Spring REST Docs Swagger

    • RestDocs๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ฌธ์„œ๋ฅผ Swagger UI๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž์™€ ๋น„๊ฐœ๋ฐœ์ž ๋ชจ๋‘๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ API๋ฅผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ํ•จ๊ป˜ API ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด, ์‹ค์ œ ์ฝ”๋“œ์™€ ๋ฌธ์„œ์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    • ํ…Œ์ŠคํŠธ ์‹œ์— ๋ฌธ์„œ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์–ด ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž„
  • ๐Ÿ™ ํ˜‘์—… ํˆด

    Slack Notion


๐Ÿค™ ๊ฐœ๋ฐœ๊ทœ์น™

โญ Code Convention


Naming
  • ํŒจํ‚ค์ง€ : ์–ธ๋”์Šค์ฝ”์–ด(_)๋‚˜ ๋Œ€๋ฌธ์ž๋ฅผ ์„ž์ง€ ์•Š๊ณ  ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค : ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ์ ˆ๋กœ ์ง€์œผ๋ฉฐ, ๋Œ€๋ฌธ์ž ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•(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**๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
Comment

1. ํ•œ์ค„ ์ฃผ์„์€ // ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

// ํ•˜์ด~

2. ํ•œ์ค„ ์ฃผ์„ ์™ธ์— ์„ค๋ช…์„ ์œ„ํ•œ ์ฃผ์„์€ JavaDoc์„ ์‚ฌ์šฉํ•œ๋‹ค.

/**
 * ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.
 *
 * <p>์ด ๋ฉ”์†Œ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.</p>
 *
 * @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

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์˜ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.ย <Prefix>/<Issue_Number>-<Domain>ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

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>] <Description>ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

3. Etc

[feat] ์•ฝ์† ์žก๊ธฐ API ๊ตฌํ˜„
[chore] spring data JPA ์˜์กด์„ฑ ์ถ”๊ฐ€
Commit

1. Commit Message Convention

[<Prefix>] #<Issue_Number> <Description>ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  • 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>] <Description>ย ์˜ ์–‘์‹์„ ์ค€์ˆ˜ํ•˜๋˜, prefix๋Š” commit message convention์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

3. Etc

[feat] ์•ฝ์† ์žก๊ธฐ API ๊ตฌํ˜„
[chore] spring data JPA ์˜์กด์„ฑ ์ถ”๊ฐ€

About

๐Ÿ“Œ ๋ชจ์ผ ๋•Œ ๋งตํ•€, MOPING - FrontEnd

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •