๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2022. 1. 2. 03:47

2022.01.01 ์˜ค๋Š˜์˜ ๋ฐฐ์›€

์˜ค๋Š˜ ํ•œ ์ผ.

  • ๋„คํŠธ์›Œํฌ ๊ณต๋ถ€
  • RxSwift ๊ณต๋ถ€
  • ๊ณผ์ œ ์ง„ํ–‰

์˜ค๋Š˜ ์ƒˆ๋กœ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ.

  • HTTP, TCP, UDP๋ฅผ ๋นก์‹œ๊ฒŒ ์ •๋ฆฌํ•ด๋ดค๋‹ค.
  • TCP๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ†ต์‹ ์„ ๋ณด์žฅํ•˜๋Š” ์—ฐ๊ฒฐ์ง€ํ–ฅํ˜• ํ”„๋กœํ† ์ฝœ, UDP๋Š” ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋น ๋ฅธ ์†๋„๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„์—ฐ๊ฒฐํ˜• ํ”„๋กœํ† ์ฝœ 
  • ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ†ต์‹ ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์˜ค๋ฅ˜์ œ์–ด, ํ๋ฆ„์ œ์–ด, ํ˜ผ์žก์ œ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋•๋ถ„์— TCPํ—ค๋”๋Š” UDP๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ฌด๊ฑฐ์›€
  • ๋˜ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ†ต์‹ ์ด๋ž€ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋„ ๋ณด์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— seq๊ณผ ack number๋กœ ์ง€์›ํ•จ. seq๋Š” ์†ก์‹ ํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฒซ ๋ฒˆํ˜ธ. ack๋Š” ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋‹ค์Œ์— ๋ฐ›์•„์•ผํ•  ๋ฒˆํ˜ธ
  • ํ๋ฆ„์ œ์–ด๋Š” stop and wait์ด๋‚˜ sliding window. stop and wait์€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ack์ด ์™€์•ผ ๋‹ค์Œ๊ฑธ ๋ณด๋‚ธ๋‹ค. ARQ๋ž‘ ๊ฐ™์ด์“ฐ๋ฉด ํƒ€์ž„์•„์›ƒ ์ด๋‚ด์— ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‹ค์Œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ACK์„ ๋ชป๋ฐ›์œผ๋ฉด ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค. 
  • sliding window๋Š” ์†ก์‹ ์ž, ์ˆ˜์‹ ์ž ์œˆ๋„์šฐ๋ฅผ ์ •ํ•ด๋‘๊ณ  ํ•œ๋ฒˆ์— ์œˆ๋„์šฐ์— ํฌํ•จ๋œ ํŒจํ‚ท๋“ค์„ ๋ชจ๋‘ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–˜๋„ค๋“ค์— ๋Œ€ํ•œ ACK์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์œˆ๋„์šฐ๋ฅผ ์˜†์œผ๋กœ ์Šฌ๋ผ์ด๋”ฉ์‹œํ‚ด
  • ๊ตฌ์ฒด์ ์ธ sliding window ๊ธฐ๋ฒ•์€ GBN์ด๋ž‘ SR์ด ์žˆ๋‹ค. GBN์€ ์ž๊ธฐ๊ฐ€ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ACK์„ ๋ณด๋ƒ„. ๊ทผ๋ฐ ์ˆœ์„œ์— ๋งž๊ฒŒ ๋ชป๋ฐ›์œผ๋ฉด ๊ทธ ๋’ท ์ˆœ์„œ์— ๋Œ€ํ•œ ํŒจํ‚ท์€ ๋ฒ„๋ฆฌ๊ณ  ์ž๊ธฐ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›์€ ํŒจํ‚ท์— ๋Œ€ํ•œ ACK๋งŒ ๊ณ„์† ๋ณด๋‚ธ๋‹ค. ์ด๋Ÿฌ๋‹ค๊ฐ€ ํƒ€์ž„์•„์›ƒ์ด๋‚˜๋ฉด ์œˆ๋„์šฐ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํŒจํ‚ท์„ ๋‹ค์‹œ ์ „์†กํ•จ
  • SR์€ GBN์ด ํŒจํ‚ท ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ ์ด๊ฑธ ํ•ด๊ฒฐํ•ด๋ณด๋ ค๊ณ  ์ˆ˜์‹ ์ž ์ชฝ์— ๋ฒ„ํผ๋ฅผ ๋‘๊ณ  ํŒจํ‚ท์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ์ €์žฅํ•˜๋‹ค๊ฐ€ ์ˆœ์„œ๊ฐ€ ๋‹ค ๋งž์œผ๋ฉด ์ƒ์œ„ ๊ณ„์ธต์œผ๋กœ ๋ณด๋‚ด๊ณ  ์œˆ๋„์šฐ๋ฅผ ์ด๋™์‹œํ‚ด. ์ด๋Ÿฌ๋ฉด ํƒ€์ž„์•„์›ƒ์ด ๋‚˜๋„ ์†ก์‹ ์ž๋Š” ์ž๊ธฐ๊ฐ€ ACK์„ ๋ชป๋ฐ›์€ ํŒจํ‚ท๋งŒ ๋‹ค์‹œ ๋ณด๋‚ด๋ฉด ๋จ.
  • ํ˜ผ์žก์ œ์–ด๋Š” AIMD, Slow Start. AIMD๋Š” ํ˜ผ์žก ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์„ ํ˜•์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋‹ค๊ฐ€ ํƒ€์ž„์•„์›ƒ์ด๋‚˜ 3 ACK DUP์ด ๋‚˜๋ฉด ์œˆ๋„์šฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์—ฌ๋ฒ„๋ฆฐ๋‹ค. 
  • Slow Start๋Š” ํ˜ผ์žก ์œˆ๋„์šฐ๋ฅผ ์ง€์ˆ˜์ ์œผ๋กœ ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋‹ค๊ฐ€ ํ˜ผ์žก์ด ์ƒ๊ธฐ๋ฉด ๋ฐ”๋กœ 1๋กœ ์ค„์—ฌ๋ฒ„๋ฆผ 
  • ํƒ€ํ˜ธ๋ž‘ ๋ฆฌ๋…ธ๋Š” AIMD๋ž‘ Slow Start๋ฅผ ์„ž์–ด์“ฐ๋Š”๊ฑฐ. 
  • ssthresh๋ฅผ ์“ฐ๋Š”๋ฐ slow start threshold์ž„. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” slow start๋กœ ์ง€์ˆ˜์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์ด ์ดํ›„๋ถ€ํ„ฐ๋Š” ์„ ํ˜•์ ์œผ๋กœ ๋Š˜๋ฆฌ๊ฒ ๋‹ค๋Š” ๋œป.
  • ํƒ€ํ˜ธ๋Š” Slow Start๋กœ ์˜ฌ๋ฆฌ๋‹ค๊ฐ€ ssthresh ๋งŒ๋‚˜๋ฉด ์œˆ๋„์šฐ ํฌ๊ธฐ๋Š” 1๋กœ ์ค„์ด๊ณ  ssthresh๋Š” ์ด์ „ ์œˆ๋„์šฐ์˜ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ž„. ํ˜ผ์žก์ด ๋ฐœ์ƒํ–ˆ๋˜ ์œˆ๋„์šฐ ํฌ๊ธฐ์—์„œ ๋ฉ€์–ด์ง€๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ž„
  • ๋ฆฌ๋…ธ๋Š” ํƒ€ํ˜ธ๋ž‘ ๋˜‘๊ฐ™์€๋ฐ ๋Œ€์‹  3 ACK DUP์ด๋ž‘ ํƒ€์ž„์•„์›ƒ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ •์ฑ…์„ ๊ฐ€์ง. 3 ACK DUP์ผ ๋ฐœ์ƒํ•˜๋ฉด AIMD๋กœ ์œˆ๋„์šฐ๋Š” ๋ฐ˜์œผ๋กœ ์ค„์ด๊ณ   ssthresh๋„ ๊ฑฐ๊ธฐ์— ๋งž์ถค. ๊ทผ๋ฐ ํƒ€์ž„์•„์›ƒ์ด ๋‚˜๋ฉด ssthresh๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์œˆ๋„์šฐ๋งŒ 1๋กœ ์ค„์ž„. ์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜๋ฉด slow start ๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ ์ž„๊ณ„์ ๊นŒ์ง€ ๋‹ค์‹œ ๋„๋‹ฌํ•˜๋Š”๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆผ. ๊ทธ๋ž˜์„œ 3 ACK DUP์€ ๋น„์ •์ƒ์ ์ด๊ธด ํ•˜์ง€๋งŒ ํƒ€์ž„์•„์›ƒ๋ณด๋‹ค๋Š” ๋œ ํ˜ผ์žกํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ์ ˆ๋ฐ˜์—์„œ ์‹œ์ž‘ํ•ด์„œ ์„ ํ˜•์ ์œผ๋กœ ์˜ฌ๋ฆฌ๊ณ , ํƒ€์ž„์•„์›ƒ์ด ๋‚˜๋ฉด ๋…ธ๋‹ต์ด๋‹ˆ๊นŒ 1๋กœ ์ค„์—ฌ๋ฒ„๋ฆฐ๋‹ค.
  • HTTP/1.1์—์„œ๋Š” keep alive๊ฐ€ ๋””ํดํŠธ๊ฐ€ ๋˜๊ณ  ํŒŒ์ดํ”„๋ผ์ด๋‹์„ ์ง€์›ํ•จ keep alive๋Š” ํ•œ๋ฒˆ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›์€๋‹ค์Œ์— ์—ฐ๊ฒฐ์„ ๋Š๋Š”๊ฒŒ ์•ˆ๋ฆฌใ… ์ผ์ •์‹œ๊ฐ„๋™์•ˆ ์‚ด๋ ค๋‘๋Š”๊ฑฐ๊ณ  ํŒŒ์ดํ”„๋ผ์ด๋‹์€ ์„ ํ–‰๋œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์—†์–ด๋„ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๊ฑฐ. HOL blocking ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ 
  • HTTP/2.0์—์„œ๋Š” HTTP ๋ฉ”์‹œ์ง€๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์•ˆ์“ฐ๊ณ  ํ•œ๋ฒˆ ์ธ์ฝ”๋”ฉํ•ด์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์“ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒˆํ˜ธ๋„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ณ  ๋‚˜๋ˆ ์„œ ๋ณด๋‚ด๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•จ. -> ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์„œ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์†Œ๋ฆฌ์ž„. ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„ ํ‘ธ์‰ฌ๋ฅผ ์ง€์›ํ•ด์„œ ๋”ฐ๋กœ ์š”์ฒญ์„ ์•ˆํ•ด๋„ html์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฑ ๋ณด๋‚ด์คŒ.
  • put์ด๋ž‘ patch ์ฐจ์ด๋Š” put์€ ๋ฆฌ์†Œ์Šค ์ „์ฒด๋ฅผ ์—…๋ฐ์ดํŠธ, patch๋Š” ์ผ๋ถ€๋งŒ ์—…๋ฐ์ดํŠธ.
  • https๋Š” ์„œ๋ฒ„๊ฐ€ ์ž๊ธฐ๊ฐ€ ๊ฐ€์ง„ ์ธ์ฆ์„œ์— ๊ฐœ์ธํ‚ค๋ฅผ ๋‹ด์•„์ฃผ๊ณ  ํด๋ผ๋Š” ์ž„์‹œ๋กœ ๋งŒ๋“  ๋Œ€์นญํ‚ค๋ฅผ ์ธ์ฆ์„œ์˜ ๊ฐœ์ธํ‚ค๋กœ ํ•œ ๋ฒˆ ์•”ํ˜ธํ™”ํ•ด์„œ ์–‘์ชฝ์ด ๋ชจ๋‘ ๋Œ€์นญํ‚ค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ. ๊ทธ๋Ÿผ ํด๋ผ๋Š” ๋Œ€์นญํ‚ค๋กœ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”ํ•˜๋ฉด ์ด๊ฑด ์ธ์ฆ์„œ๋ฅผ ๋ณด๋‚ด์ค€ ์„œ๋ฒ„์—์„œ๋งŒ ๋น„๋ฐ€ํ‚ค๋กœ ๋ณตํ™”ํ™”ํ•  ์ˆ˜ ์žˆ์Œ.
  • uri ๊ฐ€ url๋ณด๋‹ค ์ƒ์œ„ ๊ฐœ๋…์ด๊ณ  url์€ ์ฃผ์†Œ๋งŒ, uri๋Š” ์ž์›์‹๋ณ„์žํฌํ•จ. ์ฃผ์†Œ๊ฐ€ ๊ณง ์ž์›์‹๋ณ„์ž๋ฉด uri๋Š” url์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, url์ด uri๊ฐ€ ๋  ์ˆ˜๋Š” ์—†์Œ.

์˜ค๋Š˜ ๋Š๋‚€ ๊ฒƒ.

  • ์Šฌ์Šฌ ๊ธด์žฅ๋œ๋‹ค.. ์—ด์‹ฌํžˆ ์ค€๋น„ํ•˜์ž!
  • ๋ชป์ฐธ๊ณ  ๊ฒฐ๊ตญ ์ถ•๊ตฌ๋ฅผ ๋ดค๋‹ค.. ์ž˜ํ•˜๋‹ค๊ฐ€ ํ•œ์ˆœ๊ฐ„์˜ ์‹ค์ˆ˜๋กœ ๋ฉ˜ํƒˆ์ด ๋ง๋ ค์„œ ์—ญ์ „ํŒจ๋ฅผ ๋‹นํ•˜๋Š” ๊ฑธ ๋ณด๋‹ˆ๊นŒ ์ง„์งœ ์–ด๋””์„œ๋‚˜ ๋‹ค ๋ฉ˜ํƒˆ์‹ธ์›€์ด๋‹ค ์‹ถ์—ˆ๋‹ค. 
  • ๊ณผ์ œ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ 2์‹œ๊ฐ„๋ณด๋‹ค ๋” ํ•ด๋ฒ„๋ ธ๋‹ค.. ์ด์ œ ์„ ํƒ๊ณผ ์ง‘์ค‘ํ•ด์•ผ๋˜๋‹ˆ๊นŒ ์ข€ ๋œํ•˜์ž. ์ข‹์€ ํ€„๋ฆฌํ‹ฐ๋Š” ์•ˆ๋‚˜์˜ฌ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋งŽ์ด ์žŠ์–ด๋ฒ„๋ฆฐ ๋‚ด์šฉ๋“ค์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋„์›€์ด๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด์ผ์˜ ๊ณ„ํš.

  • ๊ณผ์ œ ์ง„ํ–‰
  • ์šด์˜์ฒด์ œ ์“ฑ ํ›‘๊ธฐ, ๋„คํŠธ์›Œํฌ๋„ ์“ฑ
  • ํ”„๋กœ์ ํŠธ ์ •๋ฆฌํ•œ๊ฑฐ ๋‹ค์‹œ๋ณด๊ธฐ, RxSwift๋„ ๊นŠ๊ฒŒ ๋ณด๊ธฐ
  • iOS ์งˆ๋ฌธ ์ •๋ฆฌ

์˜ค๋Š˜์˜ ๊ฐ์‚ฌ.

  • ๊ณผ์ œ๋ฅผ ๋งŽ์ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ด์š”!