๐Ÿ““ 12์žฅ. ์ฑ„ํŒ… ์‹œ์Šคํ…œ ์„ค๊ณ„

onyยท2022๋…„ 12์›” 22์ผ
1

๐Ÿ“š book

๋ชฉ๋ก ๋ณด๊ธฐ
6/10
post-thumbnail

1๋‹จ๊ณ„. ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ •

ํŽ˜์ด์Šค๋ถ ๋ฉ”์‹ ์ €, ์œ„์ฑ—(WeChat), ์™“์ธ ์•ฑ(WhatsApp) ์ฒ˜๋Ÿผ 1:1 ์ฑ„ํŒ…์— ์ง‘์ค‘ํ•˜๋Š” ์•ฑ, ์Šฌ๋ž™(Slack) ๊ฐ™์€ ๊ทธ๋ฃน ์ฑ„ํŒ…์— ์ค‘์ ์„ ๋‘” ์—…๋ฌด์šฉ ์•ฑ, ๊ฒŒ์ž„ ์ฑ„ํŒ…์— ์“ฐ์ด๋Š” ๋””์Šค์ฝ”๋“œ(Discord) ๊ฐ™์ด ๋Œ€๊ทœ๋ชจ ๊ทธ๋ฃน์˜ ์†Œํ†ต๊ณผ ์‘๋‹ต์ง€์—ฐ(latency)์ด ๋‚ฎ์€ ์Œ์„ฑ ์ฑ„ํŒ…์— ์ง‘์ค‘ํ•˜๋Š” ์•ฑ

์š”๊ตฌ์‚ฌํ•ญ

1. ์‘๋‹ต์ง€์—ฐ์ด ๋‚ฎ์€ 1:1 ์ฑ„ํŒ… ๊ธฐ๋Šฅ
2. ์ตœ๋Œ€ 100๋ช…๊นŒ์ง€ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน ์ฑ„ํŒ… ๊ธฐ๋Šฅ
3. ์‚ฌ์šฉ์ž์˜ ์ ‘์† ์ƒํƒœ ํ‘œ์‹œ ๊ธฐ๋Šฅ
4. ๋‹ค์–‘ํ•œ ๋‹จ๋ง ์ง€์›. ํ•˜๋‚˜์˜ ๊ณ„์ •์œผ๋กœ ์—ฌ๋Ÿฌ ๋‹จ๋ง์— ๋™์‹œ ์ ‘์† ์ง€์›
5. ํ‘ธ์‹œ ์•Œ๋ฆผ
6. 5,000๋งŒ DAU(Daily Active User: ์ผ๋ณ„ ๋Šฅ๋™ ์‚ฌ์šฉ์ž ์ˆ˜) ์ฒ˜๋ฆฌ

2๋‹จ๊ณ„. ๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐ

์ด ์ฑ„ํŒ… ์„œ๋น„์Šค๋Š” ์•„๋ž˜ ๊ธฐ๋Šฅ ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

* ํด๋ผ์ด์–ธํŠธ๋“ค๋กœ๋ถ€ํ„ฐ ๋ฉ”์„ธ์ง€ ์ˆ˜์‹ 
* ๋ฉ”์„ธ์ง€ ์ˆ˜์‹ ์ž(recipient) ๊ฒฐ์ • ๋ฐ ์ „๋‹ฌ
* ์ˆ˜์‹ ์ž๊ฐ€ ์ ‘์†(online) ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์ ‘์†ํ•  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ด€

์ฑ„ํŒ… ์„œ๋น„์Šค์™€์˜ ์ ‘์†์—๋Š” Keep-alive ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ 
1. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ๋Š์ง€ ์•Š๊ณ  ๊ณ„์† ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ
2. TCP ์ ‘์† ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ•ธ๋“œ์…ฐ์ดํฌ(hand-shake) ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

ํ•˜์ง€๋งŒ ๋ฉ”์„ธ์ง€ ์ˆ˜์‹  ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ด๊ฒƒ๋ณด๋‹ค ๋ณต์žก: ํด๋ง(polling), ๋กฑ ํด๋ง(long polling), ์›น์†Œ์ผ“(WebSocket) ๋“ฑ์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

ํด๋ง(Polling)

ํด๋ง(polling) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์—๊ฒŒ ์ƒˆ ๋ฉ”์„ธ์ง€๊ฐ€ ์žˆ๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•
-. ํด๋ง ๋น„์šฉ์€ ํด๋ง์„ ์ž์ฃผํ•˜๋ฉด ํ• ์ˆ˜๋ก ์˜ฌ๋ผ๊ฐ: ๋‹ตํ•ด์ค„ ๋ฉ”์„ธ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์„œ๋ฒ„ ์ž์›์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚ญ๋น„.

๋กฑํด๋ง(Long Polling)

ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒˆ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ฑฐ๋‚˜ ํƒ€์ž„์•„์›ƒ ๋  ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ์œ ์ง€
-. ํด๋ผ์ด์–ธํŠธ: ์ƒˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด ๊ธฐ์กด ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ณ  ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ๋ชจ๋“  ์ ˆ์ฐจ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘

๋กฑํด๋ง(long polling)์˜ ์•ฝ์ 

  1. ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์ˆ˜์‹ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ™์€ ์ฑ„ํŒ… ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ฒŒ ๋˜์ง€ ์•Š์„์ˆ˜๋„..
  • HTTP ์„œ๋ฒ„๋“ค์€ ๋ณดํ†ต ๋ฌด์ƒํƒœ(STATELEE) ์„œ๋ฒ„ : ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•ด ๋ผ์šด๋“œ ๋กœ๋นˆ(Round Robin) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์œ„์™€ ๊ฐ™์€ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Œ
    ?
  1. ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ–ˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ์•Œ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์Œ
  2. ๋น„ํšจ์œจ์ : ๋ฉ”์„ธ์ง€๋ฅผ ๋งŽ์ด ์•ˆ ๋ฐ›๋Š” ํด๋ผ์˜ ๊ฒฝ์šฐ ํƒ€์ž„์•„์›ƒ์ด ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์— ์žฌ์ ‘์†

์›น์†Œ์ผ“(Websocket)

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋น„๋™๊ธฐ(async) ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ 

  • ํ•œ๋ฒˆ ๋งบ์–ด์ง„ ์—ฐ๊ฒฐ์€ ํ•ญ๊ตฌ์ ์ด๋ฉฐ ์–‘๋ฐฉํ–ฅ
  • ์›น์†Œ์ผ“์€ 80์ด๋‚˜ 443์ฒ˜๋Ÿผ HTTP ํ˜น์€ HTTPS ํ”„๋กœํ† ์ฝœ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฉํ™”๋ฒฝ์ด ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•จ

์›น์†Œ์ผ“ ์ด์šฉ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ๋‚˜ ๋ฐ›์„ ๋•Œ ๋™์ผํ•œ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ค๊ณ„ ๋ฟ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„ ๋˜ํ•œ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ 

๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ

์ฃผ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์€ ์›น์†Œ์ผ“ ์‚ฌ์šฉ

1. ๋ฌด์ƒํƒœ ์„œ๋น„์Šค
๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ์‚ฌ์šฉ์ž ํ”„๋กœํŒŒ์ผ ํ‘œ์‹œ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „ํ†ต์ ์ธ ์š”์ฒญ/์‘๋‹ต ์„œ๋น„์Šค
๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋’ค์— ์œ„์น˜: ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์š”์ฒญ์„ ๊ทธ ๊ฒฝ๋กœ์— ๋งž๋Š” ์„œ๋น„์Šค๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

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

์„œ๋น„์Šค ํƒ์ƒ‰(service discovery): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ•  ์ฑ„ํŒ… ์„œ๋ฒ„์˜ DNS ํ˜ธ์ŠคํŠธ๋ช…์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 

2. ์ƒํƒœ์œ ์ง€(stateful) ์„œ๋น„์Šค
์ƒํƒœ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋Š” ์ฑ„ํŒ… ์„œ๋น„์Šค : ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฑ„ํŒ… ์„œ๋ฒ„์™€ ๋…๋ฆฝ์ ์ธ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ

3. ์ œ3์ž ์„œ๋น„์Šค ์—ฐ๋™
์ฑ„ํŒ… ์•ฑ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ œ3์ž ์„œ๋น„์Šค๋Š” ํ‘ธ์‹œ ์•Œ๋ฆผ.

4. ๊ทœ๋ชจ ํ™•์žฅ์„ฑ
์„œ๋ฒ„ ํ•œ ๋Œ€๋กœ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ ‘์†์„ ๋™์‹œ์— ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š๋ƒ

5. ์ €์žฅ์†Œ
์ฑ„ํŒ… ์‹œ์Šคํ…œ์ด ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜

1. ์‚ฌ์šฉ์ž ํ”„๋กœํŒŒ์ผ, ์„ค์ •, ์นœ๊ตฌ ๋ชฉ๋ก์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ
   - ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ด€๊ณ„ํ˜• DB์— ๋ณด๊ด€ : ๋‹ค์ค‘ํ™”(replication)์™€ ์ƒค๋”ฉ(sharding)
2. ์ฑ„ํŒ… ์‹œ์Šคํ…œ์— ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ฑ„ํŒ… ์ด๋ ฅ(chat history)

ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋ฅผ ์ถ”์ฒœ ์‚ฌ์œ :

1. ์ˆ˜ํ‰์  ๊ทœ๋ชจํ™•์žฅ(horizontal scaling)์ด ์‰ฌ์›€
2. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ง€์—ฐ์‹œ๊ฐ„(letency)๊ฐ€ ๋‚ฎ์Œ
3. ๊ด€๊ณ„ํ˜• DB๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์šด๋ฐ ๋กฑ ํ…Œ์ผ(long tail)์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
   - ์ธ๋ฑ์Šค๊ฐ€ ์ปค์ง€๋ฉด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฌด์ž‘์œ„์  ์ ‘๊ทผ(random access)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์šฉ์ด ๋Š˜์–ด๋‚จ
4. ํŽ˜์ด์Šค๋ถ๊ณผ ๋””์Šค์ฝ”๋“œ๋„ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘

6. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
1:1 ์ฑ„ํŒ…์„ ์œ„ํ•œ ๋ฉ”์„ธ์ง€ ํ…Œ์ด๋ธ”
๊ทธ๋ฃน ์ฑ„ํŒ…์„ ์œ„ํ•œ ๋ฉ”์„ธ์ง€ ํ…Œ์ด๋ธ”

7. ๋ฉ”์„ธ์ง€ ID

๋ฉ”์„ธ์ง€ ID๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ํ•จ

1. MESSAGE_ID ์˜ ๊ฐ’์€ ๊ณ ์œ ํ•ด์•ผ ํ•จ(uniqueness)
2. ID ๊ฐ’์€ ์ •๋ ฌ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฉฐ ์‹œ๊ฐ„ ์ˆœ์„œ์™€ ์ผ์น˜ํ•ด์•ผ ํ•จ.
   ์ฆ‰, ์ƒˆ๋กœ์šด ID๋Š” ์ด์ „ ID๋ณด๋‹ค ํฐ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค.

3๋‹จ๊ณ„. ์ƒ์„ธ ์„ค๊ณ„

์„œ๋น„์Šค ํƒ์ƒ‰

์„œ๋น„์Šค ํƒ์ƒ‰ ๊ธฐ๋Šฅ์˜ ์ฃผ๋œ ์—ญํ• ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ฑ„ํŒ… ์„œ๋ฒ„๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ
: ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ค€์œผ๋กœ๋Š” 1) ํด๋ผ์ด์–ธํŠธ ์œ„์น˜(geograpical location), 2) ์„œ๋ฒ„์˜ ์šฉ๋Ÿ‰(capacity) ๋“ฑ์ด ์žˆ์Œ.

๋ฉ”์„ธ์ง€ ํ๋ฆ„

1:1 ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€ ์ฒ˜๋ฆฌ ํ๋ฆ„

์—ฌ๋Ÿฌ ๋‹จ๋ง ์‚ฌ์ด์˜ ๋ฉ”์„ธ์ง€ ๋™๊ธฐํ™”

์†Œ๊ทœ๋ชจ ๊ทธ๋ฃน ์ฑ„ํŒ…์—์„œ์˜ ๋ฉ”์„ธ์ง€ ํ๋ฆ„

์ ‘์†์ƒํƒœ ํ‘œ์‹œ

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ
ํด๋ผ์ด์–ธํŠธ์™€ ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค(real-time service) ์‚ฌ์ด์— ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋งบ์–ด์ง€๊ณ  ๋‚˜๋ฉด
์ ‘์†์ƒํƒœ ์„œ๋ฒ„๋Š” A์˜ ์ƒํƒœ์™€ last-active-at ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์„ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ์— ๋ณด๊ด€
โ†’ ์ด ์ ˆ์ฐจ๊ฐ€ ๋๋‚˜๊ณ  ๋‚˜๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋Š” ์ ‘์† ์ค‘์ธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ

๋กœ๊ทธ์•„์›ƒ

์ ‘์†์žฅ์• 
๋ฐ•๋™(heartbeat) ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

์ƒํƒœ ์ •๋ณด์˜ ์ „์†ก
๋ฐœํ–‰-๊ตฌ๋… ๋ชจ๋ธ(publish-subscribe model) ์‚ฌ์šฉ
: ๊ฐ๊ฐ์˜ ์นœ๊ตฌ๊ด€๊ณ„๋งˆ๋‹ค ์ฑ„๋„์„ ํ•˜๋‚˜์”ฉ ๋‘๋Š” ๊ฒƒ
: ๊ทธ๋ฃน์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๋•Œ์— ํšจ๊ณผ์ 

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

4. ๋งˆ๋ฌด๋ฆฌ

profile
ํŒŒ์ด(ฯ€)ํ˜• ๊ฐœ๋ฐœ์ž ๐ŸŽ๐ŸŒฟ๐Ÿค

0๊ฐœ์˜ ๋Œ“๊ธ€