Home - stove-smooth/sgs-smooth GitHub Wiki

์ด ๋ฌธ์„œ๋ฅผ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— PMP ๋ž€? ์ฝ์–ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋ณธ ๋ฌธ์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ์— ๋Œ€ํ•˜์—ฌ
1. ๋ณธ ๋ฌธ์„œ๋Š” Smooth ํŒ€์„ ๊ด€๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•œ PMP ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
2. ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ ํฌ๊ฒŒ, ๊ณ„ํš(Plan)๊ณผ ๊ฒฝํ—˜์œผ๋กœ ์ด๋ค„์ ธ ์žˆ์œผ๋ฉฐ, ๊ณ„ํš(Plan)์— ๋”ฐ๋ฅธ ๊ด€๋ฆฌ ๋Œ€์ƒ ๋ฐ ๊ณ„ํš ์ ๊ฒ€์˜ ๋ฐฉ๋ฒ•์€ ์ˆ˜์‹œ๋กœ Update ๋ฉ๋‹ˆ๋‹ค.
3. ๊ฒฝํ—˜์˜ ๊ฒฝ์šฐ Wiki์˜ Footer(e.x. Project Logging)๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ง๋ฉดํ•œ ๋ชจ๋“  ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

Team Smooth

๋ชฉ์ฐจ

  1. ๊ฐœ๋ฐœ ๋ชฉํ‘œ
  2. ํ”„๋กœ์ ํŠธ
  3. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ&๊ณ„ํš

๊ฐœ๋ฐœ ๋ชฉํ‘œ

1. ๊ฐœ์ธ ๋ชฉํ‘œ

๐Ÿ™Žโ€โ™‚๏ธ ๋ฐ•๋ณ‘์ฐฌ(BE)

  • ๋ชฉํ‘œ : MSA ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์„ค๊ณ„ํ•˜๊ธฐ!
ํ˜„์žฌ ๋„์ฐฉ
๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ๋กœ๋งŒ ๊ฐœ๋ฐœ ํ•ด ๋ณธ ์ƒํƒœ.
MSA ๊ตฌ์กฐ๋Š” ์ด๋ก ๋งŒ ์•Œ๊ณ ์žˆ๋‹ค.
MSA ๊ตฌ์กฐ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค์—์„œ
๊ฐ๊ฐ์˜ api๋“ค์ด ์›ํ™œํžˆ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
์ดํ•ด๋„ ์—†์ด ๊ฐ„๋‹จํ•œ ๊ฒฝํ—˜์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ์Šคํƒ ๊ธฐ์ˆ  ์Šคํƒ์— ์ž‘๋™ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๋ฉฐ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ.
๐Ÿ’ฌ (๋„์ฐฉ) ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ

1. ๊ธฐ์กด ๊ธฐ์ˆ  ์Šคํƒ์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜์—ฌ ์ •๋ฆฌํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ธ๋‹ค.
2. MSA ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ฑ…์„ ํ†ตํ•ด ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•œ๋‹ค.(Start DDD)
3. ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ์Šคํƒ์„ ์ ‘ํ•  ๋•Œ๋งˆ๋‹ค ์ž‘๋™ ์›๋ฆฌ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ธ๋‹ค. 

๐Ÿ™Žโ€โ™‚๏ธ ๊น€ํฌ๋™(BE)

  • ๋ชฉํ‘œ : ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ์„ ๊ฒฝํ—˜ํ•˜๊ธฐ!
ํ˜„์žฌ ๋„์ฐฉ
๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœํ•ด๋ณธ ๊ฒฝํ—˜์ด ์—†๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ คํ•œ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ
๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ณ ๋ฏผ ๋ฐ ์ด์œ  ์—†์ด ๋งŒ๋“œ๋Š” ์Šต๊ด€ ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ  ๋ฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๊ธฐ๋Šฅ ๊ฐœ์„ ์— ๋Œ€ํ•œ ์†Œํ™€ํ•จ ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์Šต๊ด€
๐Ÿ’ฌ (๋„์ฐฉ) ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ

1. ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ คํ•œ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ
    - ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค์—์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฐฐ๊ฒฝ์ง€์‹์„ ์Œ“๋Š”๋‹ค. 
       - ์ฑ…์„ ํ†ตํ•ด ์‚ฌ์ „ ๋ฐฐ๊ฒฝ์ง€์‹์„ ์ดํ•ดํ•œ๋‹ค.
           - ์ฑ… (1ํšŒ๋…) : ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ
       - ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์—์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•˜๊ณ  ํ™œ์šฉ ๋ฐ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค.
    - ์„œ๋น„์Šค๊ฐ€ ๋ถ„์‚ฐ๋  ๋•Œ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค. โ†’ MSA๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•œ๋‹ค.
       - ๊ฐ•์˜์™€ ์ฑ…์„ ํ†ตํ•ด MSA์— ๋Œ€ํ•œ ์ดํ•ด์™€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•œ๋‹ค.
           - ๊ฐ•์˜ (์™„๊ฐ•) : Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA)
           - ์ฑ… (1ํšŒ๋…) : ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ

2. ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ  ๋ฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
    - ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•ญ์ƒ ์‚ฌ์šฉ ์ด์œ ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๊ธฐ๋กํ•œ๋‹ค.
    - ์‚ฌ์šฉ ๊ณผ์ •์—์„œ ์„ ํƒ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ๋น„๊ตํ•ด์•ผ ํ•  ์ธก๋ฉด์„ ์„ค์ •ํ•˜๊ณ  ํ•ญ๋ชฉ ๋ณ„ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊ธฐ์ˆ ์„ ์„ ํƒํ•œ๋‹ค. 

3. ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์Šต๊ด€
    - ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋ณ‘๋ชฉ ๋ฐœ์ƒ ๋ฐ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ง€์ ์„ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•˜๊ณ  ์ž‘์„ฑํ•œ๋‹ค.
    - ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•œ ์ดํ›„์—๋Š” ์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•œ๋‹ค.
        - ์ธก์ • ๋„๊ตฌ : nGrinder
    - ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ๋ณ‘๋ชฉ ์ง€์ ์— ๋Œ€ํ•œ ์ƒ๊ฐ๊ณผ ์ธก์ • ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์–ป์€ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
    - ํŒ€์›๊ณผ์˜ ํ˜‘์˜๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ๊ฐœ์„  ํ•ญ๋ชฉ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ  '๊ฐœ์„  ๋ฐฉ๋ฒ•' ๋ฐ '๊ธฐ๋Œ€ ํšจ๊ณผ'๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ธก์ •ํ•œ ํ›„ '์‹ค์ œ ๊ฒฐ๊ณผ'๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

๐Ÿ™โ€โ™€๏ธ ๊น€๋ฏผ์ง€(FE)

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

๐Ÿ’ฌ (๋„์ฐฉ) ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ
- 1์ฃผ์ผ์— ํ•œ ๋ฒˆ ์ž๊ฐ€ ๊ฒ€์ง„ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ๋” ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•œ๋‹ค.
- 2์ฃผ์ผ์— ํ•œ ๋ฒˆ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ๊ฒฝ๋ ฅ์ด ์žˆ๋Š” ๋ณ‘์ฐฌ๋‹˜๊ณผ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฆฌ๋ทฐํ•˜๋ฉฐ ๋ชฉํ‘œ๊ฐ€ ์ž˜ ์ง€์ผœ์ง€๊ณ  ์žˆ๋Š”์ง€ ์ ๊ฒ€ํ•œ๋‹ค.

๐Ÿ™โ€โ™€๏ธ ๊น€๋‘๋ฆฌ(iOS)

  • ๋ชฉํ‘œ : ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ!
ํ˜„์žฌ ๋„์ฐฉ
๋‹จ์ˆœํ•˜๊ฒŒ iOS ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•˜๋Š” ์ˆ˜์ค€์˜ ๊ฒฝํ—˜๋งŒ ์žˆ๋‹ค.
ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ํšจ๊ณผ์ ์ธ ์„ค๊ณ„๋ž€ ๋ฌด์—‡์ผ๊นŒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์˜ ์ˆ˜์ค€์—์„œ ๋ฉˆ์ถฐ์žˆ๋‹ค.
์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ ์‰ฌ์šด ์„ค๊ณ„์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ
๋น„๋™๊ธฐ ๋ฐ ์ด๋ฒคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์€ ์žˆ์œผ๋‚˜, ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๊ฐœ๋ฐœํ•ด๋ณด์ง€ ์•Š์•˜๋‹ค. RxSwift๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ƒํ™ฉ์— ๋งž๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
๐Ÿ’ฌ (๋„์ฐฉ) ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ

1. ์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ ์‰ฌ์šด ์„ค๊ณ„์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ
[์„ค๊ณ„ ๋‹จ]
- ์ฃผ์š” ๊ธฐ๋Šฅ ๋‹จ์œ„ ๊ฐœ๋ฐœ ์‹œ ์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋จผ์ € ์„ค๊ณ„ํ•จ์œผ๋กœ์„œ ์ ์ ˆํ•œ ์„ค๊ณ„์ธ๊ฐ€์— ๋Œ€ํ•ด ์ ๊ฒ€ํ•œ๋‹ค.
- ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฒฝ์šฐ, ์„ ํƒํ•œ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด์„ ๋น„๊ตํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ์ ์ ˆํ•œ ์„ค๊ณ„ํŒจํ„ด์ž„์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

[์ฝ”๋“œ ๋‹จ]
- ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
- ์Šคํ† ๋ฆฌ๋ณด๋“œ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜์—ฌ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ๊ฐœ๋ฐœํ•œ๋‹ค.
- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
- ๊ฐ ๋ชจ๋“ˆ(๋˜๋Š” ๊ธฐ๋Šฅ)๋ณ„๋กœ ํด๋”๋ง์„ ๊ตฌ์„ฑํ•˜์—ฌ, ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค.
- ๊ฐ™์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ, First-party๋กœ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ๋น„๊ตํ•ด๋ณด๊ณ  ์ตœ๋Œ€ํ•œ First-party ์‚ฌ์šฉ์„ ์ง€ํ–ฅํ•œ๋‹ค.
  - ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ์–‘์ด๋‚˜ ํ•™์Šต์˜ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ ์ •

2. RxSwift๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
- ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ๋น„๋™๊ธฐ ํ๋ฆ„์— ๋Œ€ํ•ด ๋จผ์ € ๊ตฌ์ƒํ•œ๋‹ค.
- Rx ๊ด€๋ จ ์ƒˆ๋กœ์šด ์ง€์‹์„ ํ•™์Šตํ•œ ๊ฒฝ์šฐ, notion์— daily๋กœ ์ •๋ฆฌํ•˜๊ณ , ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ…ํ•œ๋‹ค.
- ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ Rx ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋…ธ๋ ฅํ•œ๋‹ค.



2. ํŒ€ ๋ชฉํ‘œ

ํŒ€์›์˜ ๊ณตํ†ต๋œ ๊ฐœ์ธ ๋ชฉํ‘œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŒ€ ๋ชฉํ‘œ๋ฅผ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • 1๋…„ ๋’ค์— ๋ด๋„ ๋ถ€๋„๋Ÿฝ์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž!

โ“ ๋ถ€๋„๋Ÿฝ์ง€ ์•Š์€ ์ฝ”๋“œ
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์žก์•„๋„ ๊ธˆ๋ฐฉ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜์˜ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ  ์Šคํƒ์— ํ•ญ์ƒ '์™œ'๋ผ๊ณ  ๋ฌป๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž

์™œ ์“ฐ๋Š”์ง€ ์•„๋Š” ๊ฒƒ์€ ๊ทธ ๊ธฐ์ˆ  ์Šคํƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•„๋Š” ์ƒํƒœ์ด๋‹ค. ๊ทธ ๊ธฐ์ˆ  ์Šคํƒ์„ ์ž‘๋™ ์›๋ฆฌ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜์—ฌ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.


๐Ÿ’ฌ ํŒ€ ๋ชฉํ‘œ ์„ธ๋ถ€ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ

1. ๋ณ€์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ clearํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ๋…ธ๋ ฅํ•œ๋‹ค.
    - ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” naming์— ์ฐจ์ด๊ฐ€ ์—†๊ฒŒ๋” ํ•œ๋‹ค. ๋ฐฑ์—”๋“œ์˜ naming์„ ๊ธฐ์ค€์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๋งž์ถฐ ์ง“๋Š”๋‹ค. 
2. ํฌ์ง€์…˜(ํ”„๋ก ํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ)์˜ ๊ธฐ๋Šฅ ์„ค๊ณ„ ์‹œ ๋ฏธํŒ…์„ ์—ด์–ด, ์ฐธ์„์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ ์ƒํ˜ธ๊ฐ„ ํฌ์ง€์…˜์˜ ์ดํ•ด๋„๋ฅผ ๋†’์ด๋„๋ก ํ•œ๋‹ค.
    - ๋‹จ, ๋ฏธํŒ…์€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๊ณ  ๋ฌธ์„œ๋กœ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
3. ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค๋ฅผ ๋„์ž… ์‹œ, ๊ด€๋ จํ•ด์„œ ์ ํ•ฉํ•œ ์„ ํƒ์ด์—ˆ๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•˜๊ณ  Wiki์˜ Footer ๋ถ€๋ถ„์— ํ”์ ์„ ๋‚จ๊ธด๋‹ค.
    - ํŒ€์›์—๊ฒŒ ์ง์ ‘ ์„ค๋ช…ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€์–ด ์˜๋ฌธ์„ ๊ฐ–๋Š” ํƒœ๋„๋ฅผ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.




[ํ”„๋กœ์ ํŠธ]

์ฃผ์ œ : Discord Clone



๋ณธ ๋ฌธ์„œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, Discord ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ ์ž ๊น ์ฝ์–ด์ฃผ์„ธ์š”.



1. ์ฃผ์ œ ์„ ์ • ๋™๊ธฐ

1. ์กฐ์› ๋ชจ๋‘ ๋‹ค ํ‰์†Œ์—๋„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋กœ ์• ์ฐฉ์ด ๊นŠ์œผ๋ฉฐ, ์ดํ•ด๋„๊ฐ€ ๋†’๋‹ค.

2. ์ฑ„ํŒ… ์„œ๋ฒ„, ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„, ๋ฏธ๋””์–ด ์„œ๋ฒ„, presense ์„œ๋ฒ„, ์•Œ๋ฆผ ์„œ๋ฒ„ ๋“ฑ MSA ๊ด€์ ์—์„œ ํ™•์žฅ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋กœ ์ ํ•ฉํ•˜๋‹ค.

3. ์Œ์„ฑ, ์˜์ƒ ์ฑ„ํŒ…์˜ ์ฃผ์ œ์—์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ๋“ค์€ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฏ€๋กœ
๊ธฐ์ˆ  ์Šคํƒ์˜ ์ดํ•ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ชฉํ‘œ์™€ ์ ํ•ฉํ•˜๋‹ค.

4. ๋””์Šค์ฝ”๋“œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์กฐ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ์ฑ„๋„, ์Šค๋ ˆ๋“œ๊นŒ์ง€ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ 
ํด๋ฆฐ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ธฐ์— ์•„์ฃผ ์ ํ•ฉํ•œ ์ฃผ์ œ์ด๋‹ค.



2. ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

1. ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค ์„ค๊ณ„

  • ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„์„ ๊ฒฝํ—˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž, ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์˜ ์—ฐ๊ด€ ๊ด€๊ณ„ ์†์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์„œ๋น„์Šค๋˜๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ๊ณ ๋ คํ–ˆ๋‹ค.
  • ๋Œ€์šฉ๋Ÿ‰ ์„œ๋น„์Šค ์„ค๊ณ„ ๊ณผ์ •์—์„œ ๋ฒค์น˜๋งˆํ‚น ๋Œ€์ƒ์œผ๋กœ ์‚ผ์„ ์ˆ˜ ์žˆ๋‹ค.

2. ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‹จ์œ„์˜ ๋ฉ”์‹ ์ € ๊ตฌ์กฐ ์„ค๊ณ„

  • ๋””์Šค์ฝ”๋“œ์˜ ์„œ๋ฒ„์ฒ˜๋Ÿผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์˜์‚ฌ์†Œํ†ตํ•˜๋Š” ํ™˜๊ฒฝ์˜ ๊ฐœ๋ฐœ์„ ๊ฒฝํ—˜ํ•˜๊ณ  ์‹ถ๋‹ค.
  • ํŠนํžˆ ์„œ๋ฒ„์˜ ์ฑ„๋„์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ณต๊ฐ„์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๊ฐ–๊ณ  ์‹ถ๋‹ค.
  • ๋””์Šค์ฝ”๋“œ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ-์นดํ…Œ๊ณ ๋ฆฌ-์ฑ„๋„-์Šค๋ ˆ๋“œ์™€ ๊ฐ™์€ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‚ด ๊ถŒํ•œ, ์•Œ๋ฆผ, ๋ฉค๋ฒ„ ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๋˜ํ•œ ๊ฐ ์ฑ„๋„๋งˆ๋‹ค ๊ตฌ์„ฑ์„ ๋‹ฌ๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์‹ค์‹œ๊ฐ„ ์Œ์„ฑ, ํ™”์ƒ ์ฑ„ํŒ…

  • ๋‹จ์ˆœํžˆ ํ…์ŠคํŠธ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์‹ ์ €๊ฐ€ ์•„๋‹Œ ๋‹ค์–‘ํ•œ ์ˆ˜๋‹จ์„ ํ†ตํ•ด ์˜์‚ฌ์†Œํ†ต์„ ์ง„ํ–‰ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ œ๊ณต ์„œ๋น„์Šค์— ๋”ฐ๋ฅธ ๋‹ค์–‘ํ•œ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์— ๋Œ€ํ•œ ๊ฒฝํ—˜๊ณผ ๋‹ค์–‘ํ•œ ์˜์‚ฌ์†Œํ†ต ๋ฐฉ๋ฒ•์„ ๋งค๋„๋Ÿฝ๊ฒŒ ํ™”๋ฉด์— ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝํ—˜์„ ๊ฐ–๊ณ  ์‹ถ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ฅธ ์†Œ์ผ“ ํ†ต์‹ ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ : ์‹ค์‹œ๊ฐ„ ๋ฏธํŒ…(ํ™”๋ฉด๊ณต์œ , ์Œ์„ฑ ๋“ฑ) ์‹œ
    • ํฌ๊ทธ๋ผ์šด๋“œ : ์—ฌ๋Ÿฌ ์„œ๋ฒ„(๋””์Šค์ฝ”๋“œ์˜ server, ํ™•์žฅ๋œ Room ๊ฐœ๋…)์—์„œ์˜ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง• ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
    • ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ : reconnection์— ๋”ฐ๋ฅธ socket ์ƒํƒœ ์ฒ˜๋ฆฌ




ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ&๊ณ„ํš

1. ์—…๋ฌด๋ถ„๋‹ด

๐Ÿ™Žโ€โ™‚๏ธ ๋ฐ•๋ณ‘์ฐฌ(BE)

  • ๋ชฉํ‘œ : MSA ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์„ค๊ณ„ํ•˜๊ธฐ! (msa ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ kafka message queue๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ)

API Gateway ์„œ๋ฒ„

  • server routing
  • token validation filter ์ฒ˜๋ฆฌ

์ฑ„ํŒ… ์„œ๋ฒ„

  • websocket๋ฅผ ํ†ตํ•ด ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ kafka๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค
  • ์นดํ”„์นด์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์ด๋ฃฌ๋‹ค.

์ธ์ฆ ์„œ๋ฒ„

  • jwt token ๋ฐฉ์‹ ์ธ์ฆ ๊ตฌํ˜„
  • access token ์ธ์ฆ, refresh token + redis ์บ์‹œ ์ €์žฅ

์•Œ๋ฆผ ์„œ๋ฒ„

  • ์ฑ„ํŒ… ์•„ํ‚คํ…์ฒ˜์˜ ํ๋ฆ„์— ๋งž๋Š” ์•Œ๋ฆผ ์„œ๋ฒ„ ๊ตฌํ˜„
  • kafka message queue๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ.
  • fcm ์—ฐ๋™

๐Ÿ™Žโ€โ™‚๏ธ ๊น€ํฌ๋™(BE)

  • ๋ชฉํ‘œ : ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ดํ•ด์™€ ํ•จ๊ป˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๊ฒฝํ—˜ํ•˜์ž!

์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„, ๋ฏธ๋””์–ด ์„œ๋ฒ„ ๊ฐœ๋ฐœ

  • ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์™€ ๋ฏธ๋””์–ด ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ†ตํ•ด ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ ์ „์†ก๊ณผ ๊ด€๋ จํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ์ˆ˜์— ๋”ฐ๋ฅธ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ์™€ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์˜ ๋ถ„๋ฐฐ ๋ฐฉ๋ฒ•์„ ๋‹ฌ๋ฆฌํ•˜๋ฉด์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ํ•œ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋ฒ„, ์ฑ„ํŒ… ๋ฃธ ์„œ๋ฒ„ ๊ฐœ๋ฐœ

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‹จ์œ„์˜ ๋ฉ”์‹ ์ € ๊ตฌ์กฐ์™€ ์‚ฌ์šฉ์ž์˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ์ ์ธ ๋„๋ฉ”์ธ ์„ค๊ณ„๋ฅผ ํ•œ๋‹ค.
  • ํƒ€ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค(์œ ์ € ์„œ๋น„์Šค, ์ƒํƒœ๊ด€๋ฆฌ ์„œ๋ฒ„, etc.) ๊ฐ„์˜ ์—ฐ๋™์„ ํ†ตํ•ด MSA์— ๋Œ€ํ•œ ์ดํ•ด์™€ ๊ฐœ๋ฐœ์„ ํ•œ๋‹ค.

๐Ÿ™โ€โ™€๏ธ ๊น€๋ฏผ์ง€(FE)

  • ๋ชฉํ‘œ : ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ

UI/UX ์„ค๊ณ„, Websocket ์—ฐ๋™, WebRTC ์—ฐ๋™

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

UI/UX ์„ค๊ณ„

  • Figma ์ด์šฉํ•ด์„œ ๊ธฐ์กด ๋””์Šค์ฝ”๋“œ ์›น UI๋ฅผ ์•„์นด์ด๋น™ํ•œ๋‹ค.

Websocket ์—ฐ๋™

  • Websocket์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

WebRTC ์—ฐ๋™

  • websocket๊ณผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•˜์—ฌ ์Œ์„ฑ/์˜์ƒ ํ†ตํ™” ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ์„œ๋น„์Šค

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

๐Ÿ™โ€โ™€๏ธ ๊น€๋‘๋ฆฌ(iOS)

  • ๋ชฉํ‘œ : ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ!

UI/UX ์„ค๊ณ„

  • Figma ์ด์šฉํ•ด์„œ ๊ธฐ์กด ๋””์Šค์ฝ”๋“œ ์•ฑ UI ์•„์นด์ด๋น™
  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ‰์ƒ ๋ฐ ์•„์ด์ฝ˜ ๋“ฑ asset ์ •์˜
    • ๊ธฐ์กด UIKit์„ extension ํ•˜์—ฌ custom

์ฑ„ํŒ… ๊ตฌํ˜„

  • StompClient ๋กœ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง• ์ฒ˜๋ฆฌ
  • ํ†ต์‹  ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ UseCase๋ฅผ ์„ ๋ณ„ํ•˜์—ฌ ViewModel ์„ค๊ณ„

Web RTC ์—ฐ๋™

  • WebRTC client side ๊ตฌํ˜„
    • Starscream ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ (๋‹จ์ˆœ websocket ํ†ต์‹  ์—ฐ๊ฒฐ)
      • URLSession์˜ ๊ฒฝ์šฐ iOS 13์ดํ›„์—์„œ๋ถ€ํ„ฐ ์›น์†Œ์ผ“ ํ†ต์‹  ์ง€์› + ์•ˆ์ •์„ฑ์˜ ๋ฌธ์ œ
  • WebRTC ํ™”๋ฉด publishing

FCM ์—ฐ๋™

  • Appdelegate ๋‹จ์—์„œ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
  • ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ณ„ server/channel ์•Œ๋ฆผ


2. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ, ์—…๋ฌด ๋ถ„๋‹ด ๊ด€๋ฆฌ ๊ณ„ํš

ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ๋‹ฌ์„ฑ์„ ์œ„ํ•ด, ์ •๊ธฐ/๋ฐ์ผ๋ฆฌ ํšŒ์˜๋ฅผ ํ†ตํ•ด ๊ฐ์ž ์—…๋ฌด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๋ณธ ํ”„๋กœ์ ํŠธ์˜ ํšŒ์˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ํšŒ์˜ ์ข…๋ฅ˜
- ์ •๊ธฐ ํšŒ์˜ (๋งค์ฃผ 1ํšŒ)
- ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ(๋งค์ผ 14:00)

2๏ธโƒฃ ์ฃผ์š” ํšŒ์˜ ๋‚ด์šฉ
- ์ •๊ธฐ ํšŒ์˜) 1์ฃผ์ผ๊ฐ„์˜ ์—…๋ฌด ๊ณ„ํš์„ ๊ณต์œ ํ•œ๋‹ค.
    - ๋‹จ, ์˜ˆ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ด์•ผ๊ธฐ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๊ณ ๋ฏผ์‚ฌํ•ญ ๋“ฑ์€ ๊ฐ„๋‹จํžˆ ์–ธ๊ธ‰ ์ •๋„๋งŒ ํ•œ๋‹ค.
- ๋ฐ์ผ๋ฆฌ ํšŒ์˜) ์ „๋‚  ์—…๋ฌด์— ๋Œ€ํ•œ ํšŒ๊ณ  + ๊ธˆ์ผ ์—…๋ฌด ๊ณ„ํš์„ ๊ณต์œ ํ•œ๋‹ค.

3๏ธโƒฃ ๊ทœ์น™
  - ํšŒ์˜๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ํšŒ์˜๋ก์„ ์ž‘์„ฑํ•˜์—ฌ ๊ธฐ๋กํ•œ๋‹ค.
  - ์ •๊ธฐ ํšŒ์˜๋Š” ํŒ€์›์˜ ์š”์ฒญ์ด ์žˆ์„ ์‹œ ์–ธ์ œ๋“ ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  - ์ •๊ธฐ ํšŒ์˜๋Š” 1์‹œ๊ฐ„์„ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
  - ์Šคํฌ๋Ÿผ ํšŒ์˜๋Š” 10~20๋ถ„์„ ๊ฐ€์ง„๋‹ค.




3. ํ”„๋กœ์ ํŠธ ํ˜‘์—…, ์ผ์ • ๊ด€๋ฆฌ

3-1. ํ˜‘์—…

  • ์†Œ์Šค ์ฝ”๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ
    • Github๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๊ฐ ์ธ์› ๋ณ„๋กœ branch๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ develop branch๋กœ pushํ•œ๋‹ค.
    • develop branch์—์„œ main branch๋กœ๋Š” ์กฐ์žฅ์ด ํ™•์ธํ•˜์—ฌ pushํ•œ๋‹ค.
[์†Œ์Šค์ฝ”๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ R&R]
- ๋ฐ•๋ณ‘์ฐฌ, ๊น€ํฌ๋™(BE) : ๊ฐœ์ธ ๋ธŒ๋žœ์น˜์— push / ์ตœ์ข… ๋ณ‘ํ•ฉ์€ ์ƒ๋Œ€๊ฐ€ approve ์‹œ Merge
- ๊น€๋ฏผ์ง€(Web) : ๋ณธ์ธ ํ™•์ธ ๋ฐ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ ๋“ฑ [๋ฐ•๋ณ‘์ฐฌ] ํŒ€์›์—๊ฒŒ PR ํ™•์ธ ์š”์ฒญ(approve ์‹œ Merge) 
- ๊น€๋‘๋ฆฌ(iOS) : ๋ณธ์ธ ํ™•์ธ ๋ฐ Merge  

** ์ตœ์ข… ์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ์ž : ๊น€ํฌ๋™ 
- ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ, branch ๋“ฑ ์ „์ฒด ๊ด€๋ฆฌ

3-2. ์ผ์ • ๊ด€๋ฆฌ




4. ์œ„ํ—˜ ๊ด€๋ฆฌ

(last update) 22.01.07.

์œ„ํ—˜์€ ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ์œ„ํ—˜, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์— ๋”ฐ๋ฅธ ์œ„ํ—˜์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์‹œ ๊ณ„์† ๋ณ€๋™๋œ๋‹ค.

4-1. ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ์œ„ํ—˜ ๊ด€๋ฆฌ ๊ณ„ํš

1๏ธโƒฃ ์œ„ํ—˜ ์š”์†Œ

ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ ์ผ์ •์— ์ฐจ์งˆ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

2๏ธโƒฃ ๊ด€๋ฆฌ ๊ณ„ํš

  • ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ์ฆ‰์‹œ ํšŒ์˜๋ฅผ ์†Œ์ง‘ํ•ด ํ”„๋กœ์ ํŠธ ์ผ์ •์„ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์„ ์กฐ์ •ํ•œ๋‹ค.
  • ์ด๋ฏธ ๋ฐœ์ƒํ•œ ์œ„ํ—˜ ์š”์†Œ๋Š” ์ •๊ธฐ ํšŒ์˜๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ณต์œ ํ•œ๋‹ค.

3๏ธโƒฃ list-up

4-2. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์— ๋”ฐ๋ฅธ ์œ„ํ—˜ ๊ด€๋ฆฌ ๊ณ„ํš

a.
1๏ธโƒฃ ์œ„ํ—˜ ์š”์†Œ

Github์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋ฏธ์ˆ™ํ•˜์—ฌ, ์‹ค์ œ ์—…๋ฌด์™€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌํˆด(Github) ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

2๏ธโƒฃ ๊ด€๋ฆฌ ๊ณ„ํš

  • Github ์‚ฌ์šฉ์ด ๋ฏธ์ˆ™ํ•œ ํŒ€์›์ด ๋„์›€์„ ์š”์ฒญํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒ€์›์ด ์‚ฌ์šฉ์„ ๋•๋Š”๋‹ค.
  • Github ์‚ฌ์šฉ์˜ ๋งค๋‰ด์–ผ์„ ์ž‘์„ฑํ•˜์—ฌ ๊ณต์œ ํ•œ๋‹ค.[์†Œ์Šค์ฝ”๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ R&R]

b.
1๏ธโƒฃ ์œ„ํ—˜ ์š”์†Œ

์ผ์ • ํ…Œ์Šคํฌ ์™„๋ฃŒ ์‹œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ํˆด์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํŒ€์›๋“ค์—๊ฒŒ ํ…Œ์ŠคํŠธ ์™„๋ฃŒ๊ฐ€ ๋˜์—ˆ์Œ์„ ์ „ํŒŒํ•˜๋Š”๋ฐ ์žˆ์–ด ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

2๏ธโƒฃ ๊ด€๋ฆฌ ๊ณ„ํš

  • ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ์„ ํ†ตํ•ด ์™„๋ฃŒํ•œ ์ผ๊ณผ ์˜ค๋Š˜ ํ•ด์•ผํ•  ์ผ์„ ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ๊ณต์œ ํ•œ๋‹ค.
  • ์—…๋ฌด ์ค‘ ํƒœ์Šคํฌ๋ฅผ ์™„๋ฃŒํ•˜์˜€๋‹ค๋ฉด, ์˜คํ”„๋ผ์ธ ์—…๋ฌด ์ค‘์ผ ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ณ  ์˜จ๋ผ์ธ ์—…๋ฌด ์ค‘์ผ ๊ฒฝ์šฐ ๋””์Šค์ฝ”๋“œ์˜ ํƒœ์Šคํฌ-์ฝ”๋“œ ์ฑ„๋„์„ ํ†ตํ•ด ์ด์•ผ๊ธฐํ•œ๋‹ค.




2. ์ผ์ •

3. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

โš ๏ธ **GitHub.com Fallback** โš ๏ธ