Skip to content

kusitms-com/30th_Meetup_TeamB_TheMonitor_Front

Repository files navigation

๐Ÿ”— ๋ฐฐํฌ ๋งํฌ

[The Monitor](https://the-monitor.vercel.app/) โ€”โ€” ์„œ๋น„์Šค ์†Œ๊ฐœ

ํŒ€ ์†Œ๊ฐœ 1

๋ฐฐ๊ฒฝ ๋ฐฐ๊ฒฝ1

๐Ÿ“ย ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์‹ค๋ฌด์ž์˜ ๊ธ€

[[PR/ํ™๋ณด๋Œ€ํ–‰์‚ฌ ์ธํ„ด ์—…๋ฌด_๋ชจ๋‹ˆํ„ฐ๋ง]](https://blog.naver.com/lifefor0/222058462827)

[[PR]๋‰ด์Šค ๋ชจ๋‹ˆํ„ฐ๋งโ€ฆ ๋ฐ˜๋ณต์˜ ์—…๋ฌด ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ˆ˜์˜ ์—ฐ์†](https://blog.naver.com/ggggggggguda/222650339397)

๐Ÿง‘โ€๐Ÿ’ป ํƒ€๊ฒŸ ์ธ์‚ฌ์ดํŠธ

1  ์„œ๋น„์Šคํƒ€๊ฒŸ

์„œ๋น„์Šค ํŠน์„ฑ ์ƒ User ์™€ Customer ๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šคํƒ€๊ฒŸ

2 ๋ฆฌ์„œ์น˜ ๋ฆฌ์„œ์น˜ 2-1๋ฐ์Šคํฌ๋ฆฌ์„œ์น˜ ๋ฐ์Šคํฌ๋ฆฌ์„œ์น˜-1 2-2 ๋ฐ์Šคํฌ๋ฆฌ์„œ์น˜ ๋ฐ์Šคํฌ๋ฆฌ์„œ์น˜-2

3  ์—…๋ฌด์˜์ƒ๋ถ„์„ ์—…๋ฌด์˜์ƒ๋ถ„์„ 4 ์œ ์ €๋ฆฌ์„œ์น˜

๐Ÿ‘ฅย  ์ธํ„ฐ๋ทฐ์ด

์ธํ„ฐ๋ทฐ์ด

๐Ÿ’ก

์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ

  • ๊ฐ€์„ค 1 ํ˜„์žฌ ์‹œ์žฅ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค๋Š” ๋Œ€ํ–‰์‚ฌ์˜ ์ง์›๋“ค์—๊ฒŒ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค
    1. ๋ชจ๋‹ˆํ„ฐ๋ง ์—…๋ฌด ์‹œ ๋ณด์กฐ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”?
    2. โ€™๋‰ด์Šค๋Ÿดโ€˜์ด๋ผ๋Š” ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ์‹ ๊ฐ€์š”?
    3. ๋ชจ๋‹ˆํ„ฐ๋ง ์—…๋ฌด์—์„œ ๊ฐ€์žฅ ์‹œ๊ฐ„์ด ๋งŽ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ์–ด๋Š ๋ถ€๋ถ„์ธ๊ฐ€์š”?
  • ๊ฐ€์„ค 2. ๊ณ ๊ฐ์‚ฌ ๋ณ„๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€ํ–‰์‚ฌ์—์„œ๋Š” ์ˆ˜๊ธฐ ์—…๋ฌด๋ฅผ ์„ ํ˜ธํ•  ๊ฒƒ์ด๋‹ค
    1. ๊ณ ๊ฐ์‚ฌ ๋ณ„๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณด๊ณ ์„œ์˜ ์–‘์‹์ด ๋‹ค๋ฅธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
    2. ๋ณด๊ณ ์„œ์˜ ์–‘์‹์€ ๋Œ€ํ–‰์‚ฌ์™€ ๊ณ ๊ฐ์‚ฌ ์ค‘ ์–ด๋Š ์ชฝ์—์„œ ์ œ๊ณตํ•˜๋‚˜์š”?
    3. ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํšŒ์‚ฌ ๋ฉ”์ผ์ด ์•„๋‹Œ, ์„œ๋น„์Šค์˜ ๋ฉ”์ผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐˆํ…๋ฐ ๊ดœ์ฐฎ๋‚˜์š”?
  • ๊ฐ€์„ค 3. ์„ฑ๊ณผ ๋ณด๊ณ ๋ฅผ ๊ฐ„ํŽธํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ฌ์šฉํ•  ์˜ํ–ฅ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.
    1. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณด๊ณ ์„œ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” 2์ฐจ ์‚ฐ์ถœ๋ฌผ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?
    2. ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ๋ฌผ์„ ํ•ด๋‹น ์‚ฐ์ถœ๋ฌผ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์ˆ˜๊ธฐ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”?
  • ๊ฐ€์„ค 4. ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋งคํ•˜๋Š” customer ๋Š” ์—…๋ฌด ์ž๋™ํ™” ์ด์ƒ์˜ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•ด์•ผ๋งŒ ๊ตฌ๋งคํ•  ๊ฒƒ์ด๋‹ค.
    1. ๋ชจ๋‹ˆํ„ฐ๋ง์— ๋ณด๊ณ  ์ด์™ธ์˜ ๋ชฉ์ ๋„ ์žˆ๋‚˜์š”? (์ €์—ฐ์ฐจ ์ง์›๋“ค์„ ๊ต์œก์‹œํ‚ค๊ธฐ ์œ„ํ•œ)
    2. AI ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์ „๋žต์ œ์•ˆ์— ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณด๊ณ ์„œ์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋น„๋”ฉ๊ณผ์ •์—์„œ ์„ค๋“๋ ฅ์„ ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?
  • ๊ฐ€์„ค ์™ธ์˜ ์งˆ๋ฌธ
    1. ๋ชจ๋‹ˆํ„ฐ๋ง ์™ธ์— ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ์—…๋ฌด๊ฐ€ ์žˆ๋‚˜์š”?
    2. ๋‰ด์Šค๋Ÿด ์‚ฌ์šฉ์„ฑ ํ‰๊ฐ€
    3. ๋Œ€ํ–‰์‚ฌ์—๊ฒŒ ํ•„์š”ํ•œ ๋‰ด์Šค๋ถ„์„์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    4. ์—…๋ฌด๋ณด์กฐ ์„œ๋น„์Šค๋ฅผ ํšŒ์‚ฌ์—์„œ๋Š” ์–ด๋–ค ๊ณผ์ •์œผ๋กœ ๊ตฌ๋งค / ๊ฒฐ์ • ํ•˜๋‚˜์š”?

๐Ÿ–ฅ๏ธย ํ•ต์‹ฌ ๊ธฐ๋Šฅ

ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

Frame 2085665689

ํšŒ์›๊ฐ€์ž…

  • ๋ณด์•ˆ์„ ์œ„ํ•ด ๋ฉ”์ผ ์ธ์ฆ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ
  • ๋Œ€ํ‘œ ๋ฉ”์ผ๋กœ ๋กœ๊ทธ์ธ ํ›„, ๊ด€๋ฆฌ์ž๊ฐ€ ์ถ”ํ›„ ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€์—์„œ ๊ฐ ๊ณ ๊ฐ์‚ฌ ๋ณ„ ๋‹ด๋‹น์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌ

๊ณ ๊ฐ์‚ฌ ๋ฆฌ์ŠคํŠธ

  • ๊ฐ„๋‹จํ•œ ์ •๋ณด ์ž…๋ ฅ์„ ํ†ตํ•ด ๊ณ ๊ฐ์‚ฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ
  • ์ž์‚ฌ/๊ฒฝ์Ÿ์‚ฌ/์—…๊ณ„์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ‚ค์›Œ๋“œ์™€ ์ˆ˜์‹ ์ธ ๋ฉ”์ผ์„ ์‚ฌ์ „์— ๋“ฑ๋ก
  • ์ถ”๊ฐ€ํ•œ ๊ณ ๊ฐ์‚ฌ๋“ค์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ชจ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ธ ํ™”๋ฉด

๋ฐ์ผ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ

  • ํ‚ค์›Œ๋“œ๋ณ„๋กœ ๊ฒ€์ƒ‰๋œ ๊ธฐ์‚ฌ ์ค‘์—์„œ ์›ํ•˜๋Š” ๊ธฐ์‚ฌ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ณด๊ณ ์„œ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ, The Monitor์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋จ

๋ณด๊ณ ์„œ ํŽธ์ง‘ํ•˜๊ธฐ

  • ๋ฐ์ผ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ ์Šคํฌ๋žฉํ•œ ๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ, ํ—ค๋“œ๋ผ์ธ, URL, ๊ธฐ์ž๋ช… ๋“ฑ์ด ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ๋ณด๊ณ ์„œ ํ˜•์‹์— ๋ฐ˜์˜๋จ
  • ๋กœ๊ณ , ์ œ๋ชฉ, ์ƒ‰์ƒ, ์นดํ…Œ๊ณ ๋ฆฌ ๋“ฑ์„ ์ปค์Šคํ…€ ํ•˜์—ฌ ํ†ต์ผ๋œ ๋ณด๊ณ ์„œ ํ˜•์‹์—์„œ ๋ฒ ๋ฆฌ์—์ด์…˜์„ ์ถ”๊ฐ€
  • ๋ณด๊ณ ์„œ ํŽธ์ง‘ ํ›„ ๊ณ ๊ฐ์‚ฌ ๋‹ด๋‹น์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ๋ฉ”์ผ ์ „์†ก ๊ฐ€๋Šฅ

๋ณด๊ณ ์„œ ๊ด€๋ฆฌํ•˜๊ธฐ

  • ์ตœ๋Œ€ 1๋…„ ๊ฐ„์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณด๊ณ ์„œ๋ฅผ ๋ชจ์•„๋ณด๋Š” ๊ธฐ๋Šฅ
  • ์ด์ „์— ์ž‘์—…ํ•œ ๋ณด๊ณ ์„œ๋„ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์Šคํฌ๋žฉํ•œ ๋‚ด์—ญ๋„ ํ•จ๊ป˜ ์ €์žฅ๋จ

๐Ÿ’พย ๊ฐœ๋ฐœ

WEB / APP ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ • ์ด์œ 

  • Vite: ๋น ๋ฅธ ๋ฒˆ๋“ค๋ง๊ณผ ํ•ซ ๋ฆฌ๋กœ๋”ฉ์„ ์ œ๊ณตํ•˜๋Š” ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ด๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • React: ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ๋ณต์žกํ•œ UI๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript: JavaScript์— ์ •์  ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Tailwind CSS: ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋น ๋ฅด๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์˜ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

SERVER ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ • ์ด์œ 

๊ธฐ์ˆ  ์Šคํƒ

  • Java - version 21
  • Spring boot JPA
  • JWT
    • ์ธ์ฆ ์ธ๊ฐ€ (๋กœ๊ทธ์ธ ํšŒ์›๊ฐ€์ž…)
  • Restful API
  • Redis
    • ์ด๋ฉ”์ผ ์ธ์ฆ๋ฒˆํ˜ธ ๋ฐœ๊ธ‰
  • S3
    • ๋ณด๊ณ ์„œ ์ €์žฅ
  • Docker
    • Docker Image
    • JIB
  • Nginx
    • ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ
    • HTTP โ†’ HTTPS
  • AWS EC2 - ์„œ๋ฒ„
    • ํƒ„๋ ฅ์  IP
  • RDS

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Apache Poi - MS ๋ฌธ์„œํ™”

Open API

  • Google Custom Search API

ERD

themonitor-erd

System Architecture

themonitorsa

Ground Rule

  • ์ฝ”๋“œ ์ˆ˜์ • ์•Œ๋ฆผ: ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋งํ•ด์ค๋‹ˆ๋‹ค.
  • ๋จธ์ง€ ์•Œ๋ฆผ: ๋ธŒ๋žœ์น˜๋ฅผ ๋จธ์ง€ํ•˜๊ธฐ ์ „์— ํŒ€์›๋“ค์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  • ์ปจ๋ฒค์…˜ ์ค€์ˆ˜: ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜์„ ์ž˜ ์ง€ํ‚ต๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ ํ•ด๊ฒฐ: ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ–ˆ์„ ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ˜ผ์ž ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ์ž์™€ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

public/
src/
  โ”œโ”€โ”€ main.tsx
  โ”œโ”€โ”€ App.tsx
  โ”œโ”€โ”€ TYPES/
  โ”œโ”€โ”€ API/
  โ”œโ”€โ”€ CONSTANTS/
  โ”œโ”€โ”€ UTILS/
  โ”œโ”€โ”€ STYLES/
  โ”œโ”€โ”€ COMPONENTS/
  โ”œโ”€โ”€ HOOKS/
  โ”œโ”€โ”€ ASSETS/
  โ”œโ”€โ”€ PAGES/
  โ”‚   โ””โ”€โ”€ PageName/
  โ”‚        โ””โ”€โ”€ index.tsx
  โ”‚        โ””โ”€โ”€ components/
  • ์ •ํ•ด์ง„ ํด๋”๋ช…(components, pages) ์™ธ์—๋Š” ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘
  • ํŠน์ • ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋งŒ ์“ฐ์ด๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€ ํด๋” ๋‚ด๋ถ€์— components ํด๋” ์†์— ์ €์žฅ
  • public/: ๋ฒˆ๋“ค๋ง๋˜์ง€ ์•Š๊ณ  ๋นŒ๋“œ ์‹œ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋˜๋Š” ์ •์  ์ž์‚ฐ๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ๋“ค(์˜ˆ: favicon, ๋กœ๊ณ , ์ „์—ญ ํฐํŠธ ๋“ฑ)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • src/assets/: ์ฝ”๋“œ์—์„œ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Vite์— ์˜ํ•ด ๋ฒˆ๋“ค๋ง๋˜๊ณ  ์ตœ์ ํ™”๋˜๋ฉฐ, ์ฃผ๋กœ ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ์•ฑ ๋‚ด๋ถ€์—์„œ ์ฐธ์กฐ๋˜๋Š” ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

์ปค๋ฐ‹ ์œ ํ˜• ์˜๋ฏธ
build ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋˜๋Š” ์™ธ๋ถ€ ์ข…์†์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ (์˜ˆ: webpack, npm)
chore ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •, ๊ทธ ์™ธ ๊ธฐํƒ€ ์ˆ˜์ • ex) .gitignore
ci CI ์„ค์ • ํŒŒ์ผ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •
docs ๋ฌธ์„œ ์ˆ˜์ •
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix ๋ฒ„๊ทธ ์ˆ˜์ •
perf ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ
refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
revert ์ด์ „ ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ
style ์Šคํƒ€์ผ ์ฝ”๋“œ ๋ณ€๊ฒฝ
asset svg, ์ด๋ฏธ์ง€ ๋“ฑ ๋””์ž์ธ ํŒŒ์ผ ์ถ”๊ฐ€
test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŒฉํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
type ํƒ€์ž… ์ˆ˜์ •
rename ํŒŒ์ผ ๋˜๋Š” ํด๋” ๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ
remove ํŒŒ์ผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ
hotfix ๊ธ‰ํ•˜๊ฒŒ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

์ฝ”๋“œ ์ปจ๋ฒค์…˜

01 ํด๋”๋ช…

๐Ÿ“ ํด๋”๋ช…์˜ ๊ฒฝ์šฐ ์†Œ๋ฌธ์ž ์ž‘์„ฑ

02 ํŒŒ์ผ๋ช… / ์ปดํฌ๋„ŒํŠธ๋ช…(ํ•จ์ˆ˜ํ˜•)

๐Ÿ“„ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋ช…์€ PascalCase๋กœ ํ†ต์ผ

๐Ÿ“„ ๊ทธ ์™ธ ํŒŒ์ผ๋ช…์€ ์†Œ๋ฌธ์ž ์ž‘์„ฑ

ex) Home.tsx

ex) index.d.ts

03 ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ ๋ฐฉ์‹

โžฐ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

const Welcome: React.FC<WelcomeProps> = ({ name }) => {
  return <div>Welcome, {name}</div>;
};
  • ์ปดํฌ๋„ŒํŠธ์˜ props ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ, ํƒ€์ž…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  React.FC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • props๋Š” ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

04 ํ•จ์ˆ˜๋ช…(๋ฉ”์†Œ๋“œ๋ช…) / ๋ณ€์ˆ˜๋ช…

โžฐ ํ•จ์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ช…์€ camelCase๋กœ ์ž‘์„ฑ

  • ์ด๋ฆ„์„ ํ†ตํ•ด ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ
  • ๋”•์…”๋„ˆ๋ฆฌ, ๋ฐฐ์—ด ๋“ฑ์˜ ๋ณต์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ช… s ๋ถ™์ด๊ธฐ ex) heights
  • ๋กœ๋”ฉ์ด๋‚˜ ๋ชจ๋‹ฌ์ฐฝ ๋“ฑ์˜ ๋ณด์—ฌ์ง ์—ฌ๋ถ€์— ๋Œ€ํ•œ boolean state์˜ ๊ฒฝ์šฐ is ๋ถ™์ด๊ธฐ ex) isModalOpen, isLoading
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ get์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ex) getUserData
  • ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ํ•จ์ˆ˜๋Š” on์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ด ํ•จ์ˆ˜๋Š” ์ฃผ๋กœ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์ ์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค ex) onClick, onClose
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋‹ด๋Š” ํ•จ์ˆ˜๋Š” handle๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ฃผ๋กœ on ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค ex) handleClick, handleModalOpen
ํ•จ์ˆ˜๋ช… ๋™์‚ฌ๊ตฌ ex) getUserData
๋ณ€์ˆ˜๋ช… ๋ช…์‚ฌ๊ตฌ ex) userData

05 ์ฃผ์„

1๏ธโƒฃ ์ธ๋ผ์ธ ์ฃผ์„

  • ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ line by line ์ฃผ์„์€ ์ง€์–‘
  • if๋ฌธ, for๋ฌธ, switch๋ฌธ ๊ทธ๋Ÿฐ ๊ตฌ๋ฌธ ์„ ์–ธ ๋ถ€๋ถ„ ์œ„์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…
  • ์„ค๋ช…์— ๋Œ€ํ•œ ์ฃผ์„์€ ํ•œ๊ธ€๋กœ ์ž‘์„ฑ

2๏ธโƒฃ ํ•จ์ˆ˜ ์ฃผ์„

/**
 * ํ•จ์ˆ˜ ์„ค๋ช…
 * @param a: ๋ง์…ˆ์„ ์œ„ํ•œ ์ฒซ๋ฒˆ์งธ ์ธ์ž
 * @param b: ๋ง์…ˆ์„ ์œ„ํ•œ ๋‘๋ฒˆ์งธ ์ธ์ž
 * @return: ์ธ์ž๋กœ ๋ฐ›์€ ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ด
 */
const filterDescription = (a, b) => {
  return { a, b };
};

์ด์Šˆ ์ปจ๋ฒค์…˜

ํŒ€์›๋“ค์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์ด์Šˆ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋‹ค์Œ์˜ ์ด์Šˆ ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ด์Šˆ ์ œ๋ชฉ ๊ทœ์น™

  1. ์นดํ…Œ๊ณ ๋ฆฌ์™€ ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•œ ํ˜•์‹: ์ด์Šˆ ์ œ๋ชฉ์€ ์ด์Šˆ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ณ , ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ๊ด€๋ จ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ํ˜•์‹: [์นดํ…Œ๊ณ ๋ฆฌ] ์ด์Šˆ ๋‚ด์šฉ
    • ์˜ˆ: [Chore] gitignore ํŒŒ์ผ ์ˆ˜์ •
  2. ์นดํ…Œ๊ณ ๋ฆฌ ๊ทœ์น™:

    • Feature: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€์™€ ๊ด€๋ จ๋œ ์ด์Šˆ.
    • Bugfix: ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ.
    • Refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ.
    • Docs: ๋ฌธ์„œ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ.
    • Chore: ์„ค์ • ๋ณ€๊ฒฝ, ํŒŒ์ผ ๊ด€๋ฆฌ ๋“ฑ ๊ธฐํƒ€ ์ž์ž˜ํ•œ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ.
    • Hotfix: ๊ธด๊ธ‰ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ.

์ด์Šˆ ์ž‘์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ

์ด์Šˆ ๋‚ด์šฉ

  • ์ด์Šˆ์˜ ๋ชฉ์ ๊ณผ ํ•„์š”์„ฑ์„ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๊ฒฝ ์„ค๋ช…์ด๋‚˜ ์ด์Šˆ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ์ƒ์„ธ ๋‚ด์šฉ

  • ์ด์Šˆ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•ด์•ผ ํ•  ์ž‘์—…์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ

  • ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋‚˜ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๊ฒ€ํ† ํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ๊ธฐ์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฌธ์„œ๋‚˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฒจ๋ถ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์Šˆ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค

  1. ์ด์Šˆ ์ œ๋ชฉ ์ž‘์„ฑ: ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ด์Šˆ ์ œ๋ชฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด์Šˆ ๋‚ด์šฉ ์ž‘์„ฑ: ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด์Šˆ์˜ ๋ชฉ์ ๊ณผ ์ž‘์—… ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์ด์Šˆ ๊ด€๋ฆฌ: ์ด์Šˆ๊ฐ€ ์ง„ํ–‰๋˜๋ฉด์„œ ์ž‘์—… ๋‚ด์šฉ์„ ์ฒดํฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด์Šˆ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜ ์ „๋žต

Github Flow

Github Flow๋Š” ๋‹จ์ˆœํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ๋ธŒ๋žœ์น˜ ์ „๋žต์œผ๋กœ, ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ „๋žต์€ ์ตœ์‹  ๊ธฐ๋Šฅ์ด ํ•ญ์ƒ ๋ฐฐํฌ๋˜์–ด๋„ ๋˜๋Š” ํ™˜๊ฒฝ๊ณผ CI/CD๊ฐ€ ์ž˜ ๊ฐ–์ถฐ์ ธ ์žˆ์–ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๋Œ€๋น„๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • main ๋ธŒ๋žœ์น˜: ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ธŒ๋žœ์น˜์— ๋จธ์ง€๋œ ์ฝ”๋“œ๋Š” ๊ณง๋ฐ”๋กœ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • feature ๋ธŒ๋žœ์น˜: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด main ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜ ๊ทœ์น™

  • main์— ๋จธ์ง€๋œ ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค

  • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค

    • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ๋ธŒ๋žœ์น˜์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์†Œ๋ฌธ์ž์™€ ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: 'feature/#100'
    • ๋ช…๋ช… ๊ทœ์น™:
      1. feature: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      2. bugfix: ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      3. hotfix: ๊ธด๊ธ‰ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      4. refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      5. release: ๋ฐฐํฌ ์ค€๋น„๋ฅผ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ:
      6. experiment: ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๋‚˜ ๊ธฐ์ˆ  ์‹คํ—˜์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      7. docs: ๋ฌธ์„œ ์ž‘์—…์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      8. chore: ์ž์ž˜ํ•œ ์ˆ˜์ •์ด๋‚˜ ์„ค์ • ๋ณ€๊ฒฝ ๋“ฑ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜์—์„œ๋Š” ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ํ•ฉ๋‹ˆ๋‹ค

PR ์ปจ๋ฒค์…˜

ํŒ€์›๋“ค์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋‹ค์Œ์˜ PR ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

PR ์ œ๋ชฉ

  • PR ์ œ๋ชฉ์€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด๋‹น PR์˜ ๋ชฉ์ ์„ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • PR ์ œ๋ชฉ ํ˜•์‹์€ ์ด์Šˆ ์ œ๋ชฉ๊ณผ ์œ ์‚ฌํ•œ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ํ˜•์‹: [์นดํ…Œ๊ณ ๋ฆฌ/#์ด์Šˆ๋ฒˆํ˜ธ] PR ์ œ๋ชฉ
    • ์˜ˆ์‹œ: [Feature/#101] ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„

PR ์ž‘์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ

  • PR์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์•„๋ž˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ์ด์Šˆ

  • ์ด PR๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: close #4

์ž‘์—… ๋‚ด์šฉ

  • ํ•ด๋‹น PR์—์„œ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ, ์ˆ˜์ •๋œ ๋ฒ„๊ทธ, ๋˜๋Š” ๊ธฐํƒ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ

  • ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ฆฌ๋ทฐํ•  ๋•Œ ์œ ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด๋‚˜ ์ƒ๊ฐํ•ด๋ณผ ๋ฌธ์ œ๋ฅผ ๊ธฐ์žฌํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์Šคํฌ๋ฆฐ์ƒท, GIF, ๋˜๋Š” ๋ผ์ด๋ธŒ ๋ฐ๋ชจ ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฐ์ƒท์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • PR์„ ์ œ์ถœํ•˜๊ธฐ ์ „์— ์•„๋ž˜ ํ•ญ๋ชฉ๋“ค์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”:

  • Reviewers๋ฅผ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Assignees๋กœ ๋ณธ์ธ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ ์ ˆํ•œ label์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.


PR ํ”„๋กœ์„ธ์Šค

  1. PR ์ƒ์„ฑ: ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•˜๋Š” PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์š”์ฒญ: PR์ด ์ƒ์„ฑ๋˜๋ฉด ํŒ€์›๋“ค์—๊ฒŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ง„ํ–‰: ๋ฆฌ๋ทฐ์–ด๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  4. ํ”ผ๋“œ๋ฐฑ ๋Œ€์‘: PR ์ž‘์„ฑ์ž๋Š” ๋ฆฌ๋ทฐ์–ด์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฆฌ๋ทฐ์–ด ๋™์˜: ๋ฆฌ๋ทฐ์–ด๋Š” ์ˆ˜์ •๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜๊ณ  ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
  6. PR ๋ณ‘ํ•ฉ: ํ•„์š”ํ•œ ์Šน์ธ ์ˆ˜๊ฐ€ ์ถฉ์กฑ๋˜๋ฉด, PR์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๊ตฌ์„ฑ

๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ๋ง๋จธ๋ฆฌ๋ฅผ ์ ์–ด ๊ตฌ์ฒด์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • [๋ณ€๊ฒฝ ์š”์ฒญ]: ๋ฐ˜๋“œ์‹œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„
  • [์งˆ๋ฌธ]: ์ฝ”๋“œ์˜ ์˜๋„๋‚˜ ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์งˆ๋ฌธ
  • [์ œ์•ˆ]: ์ฝ”๋“œ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ

์Šน์ธ ๊ธฐ์ค€

  • Required number of approvals before merging: 1
    • PR์ด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 1๋ช…์˜ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ฆฌ๋ทฐ ํŒ

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

ํ”ผ๋“œ๋ฐฑ ์˜ˆ์‹œ

[๋ณ€๊ฒฝ ์š”์ฒญ] ์ด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. ์˜ˆ: `calculateTotal` ๋Œ€์‹  `computeOrderTotal`.

[์งˆ๋ฌธ] ์ด ๋ถ€๋ถ„์—์„œ ์™œ ์ด ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์…จ๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”? ๋‹ค๋ฅธ ์ ‘๊ทผ๋ฒ•์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ์…จ๋‚˜์š”?

[์ œ์•ˆ] ์ด ๋กœ์ง์„ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published