[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์„น์…˜ 7 ์ˆ˜๊ฐ•

์„น์…˜ 7. ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์ˆ˜๊ฐ• ์™„๋ฃŒ!!

์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•

  • ์ƒ์„ฑ์ž ์ฃผ์ž…: ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž… ๋ฐ›์Œ. ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด @Autowired๋ฅผ ์ƒ๋žตํ•ด๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋œ๋‹ค.
  • ์ˆ˜์ •์ž ์ฃผ์ž…(setter ์ฃผ์ž…): setter๋ผ ๋ถˆ๋ฆฌ๋Š” ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž….
  • ํ•„๋“œ ์ฃผ์ž…: ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…. ์•ˆ ์“ฐ๋Š” ๊ฒŒ ์ข‹๋‹ค.
  • ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…: ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ฃผ์ž…. ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž… ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

@Autowired ์‹œ์— ์—ฌ๋Ÿฌ ๋นˆ์ด ๋งค์นญ๋˜๋ฉด @Primary๊ฐ€ ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง„๋‹ค.
@Primary๋ณด๋‹ค @Qualifier๊ฐ€ ์šฐ์„ ๊ถŒ์ด ๋†’๋‹ค.


์šด์˜์ฒด์ œ 5์ฑ•ํ„ฐ

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ 

  • ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ํ†ต์‹ : ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์— 2๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์˜ ํ†ต์‹ . ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ์Šค๋ ˆ๋“œ๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ : ๊ฐ™์€ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋Š” ๊ฒฝ์šฐ. ๊ณต์šฉ ํŒŒ์ผ ๋˜๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŒŒ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•œ๋‹ค.

  • ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ : ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ๊ฐ€ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ, ํ”„๋กœ์„ธ์Šค๋Š” ์†Œ์ผ“์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค. ์†Œ์ผ“์„ ์ด์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์„ ๋„คํŠธ์›Œํ‚น์ด๋ผ๊ณ  ํ•œ๋‹ค.


ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์˜ ๋ถ„๋ฅ˜

  • ํ†ต์‹  ๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

    • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ (duplex communication): ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์–‘์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ. ์†Œ์ผ“ ํ†ต์‹ ์ด ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์— ํ•ด๋‹นํ•œ๋‹ค.

    • ๋ฐ˜์–‘๋ฐฉํ–ฅ ํ†ต์‹ (half-duplex communication): ๋ฐ์ดํ„ฐ๋ฅผ ์–‘์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์‹œ ์ „์†ก์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ํŠน์ • ์‹œ์ ์— ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋‹ค. (์˜ˆ: ๋ฌด์ „๊ธฐ)

    • ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ (simplex communication): ๋ชจ์Šค ์‹ ํ˜ธ์ฒ˜๋Ÿผ ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ. ์ „์—ญ ๋ณ€์ˆ˜์™€ ํŒŒ์ดํ”„๊ฐ€ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์— ํ•ด๋‹นํ•œ๋‹ค.

  • ํ†ต์‹  ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

    ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ : ์–ธ์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ชฝ์—์„œ๋Š” ๋ชจ๋ฅธ๋‹ค. โ†’ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ „์—ญ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ ๊ฒ€ํ•˜๋Š” ์ˆ˜๋ฐ–์— ์—†๋‹ค.

    ๋ฐ”์œ ๋Œ€๊ธฐ(busy waiting): ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ๋ฌดํ•œ ์‹คํ–‰ํ•˜๋ฉฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ. โ†’ ์ž์› ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค.

    ๋ฐ”์œ ๋Œ€๊ธฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ–ˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๋™๊ธฐํ™”(synchronization)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์˜ˆ: ๋ฉ”์‹ ์ €์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ–ˆ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์•Œ๋ฆผ)

    • ๋Œ€๊ธฐ๊ฐ€ ์žˆ๋Š” ํ†ต์‹ (== ๋™๊ธฐํ™” ํ†ต์‹ ): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ชฝ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋‹ค.

    • ๋Œ€๊ธฐ๊ฐ€ ์—†๋Š” ํ†ต์‹ (== ๋น„๋™๊ธฐํ™” ํ†ต์‹ ): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ชฝ์€ ๋ฐ”์œ ๋Œ€๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง์ ‘ ํ™•์ธํ•œ๋‹ค. (์˜ˆ: ์ „์—ญ ๋ณ€์ˆ˜์™€ ํŒŒ์ผ์„ ์ด์šฉํ•œ ํ†ต์‹ )


ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์˜ ์ข…๋ฅ˜

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”์ด๋‹ค.

  • ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ 
    ๊ณต๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.
    ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ†ต์‹  ๋ฐฉ์‹์€ ์ฃผ๋กœ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์‚ฌ์šฉํ•œ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ํ›„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    โ†’ ํ”„๋กœ์„ธ์Šค P๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜ R์— ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ์ œ ์“ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค C๋Š” ์ „์—ญ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ”์œ ๋Œ€๊ธฐ๋ฅผ ๋Œ๋ฉด์„œ ๊ณ„์† ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • ํŒŒ์ผ์„ ์ด์šฉํ•œ ํ†ต์‹ 
    fd = open()
    write()
    read()
    close()
    ํŒŒ์ผ์„ ์ด์šฉํ•œ ํ†ต์‹ ์€ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
    โ†’ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•Œ์•„์„œ ๋™๊ธฐํ™”๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ wait() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ๋‹ค.

  • ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ 
    ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ, ํŒŒ์ผ ์ž…์ถœ๋ ฅ๊ณผ ๊ฐ™์ด open() ํ•จ์ˆ˜๋กœ ๊ธฐ์ˆ ์ž๋ฅผ ์–ป๊ณ  ์ž‘์—…์„ ํ•œ ํ›„, close() ํ•จ์ˆ˜๋กœ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.
    ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ ์€ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์ด๋‹ค. ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ•˜๋ ค๋ฉด ํŒŒ์ดํ”„ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    ๋งŒ์•ฝ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ํŒŒ์ดํ”„ 1์— ๋Œ€ํ•ด ์ฝ๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ํŒŒ์ดํ”„ 1์— ์•„์ง ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด B๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    โ†’ A๊ฐ€ 1์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์ˆœ๊ฐ„ ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ๊ฐ€ ํ’€๋ ค ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

    • ์ด๋ฆ„ ์—†๋Š” ํŒŒ์ดํ”„: ์ผ๋ฐ˜์ ์ธ ํŒŒ์ดํ”„. ๋ถ€๋ชจ-์ž์‹ ๊ฐ™์ด ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ.

    • ์ด๋ฆ„ ์žˆ๋Š” ํŒŒ์ดํ”„: ์„œ๋กœ ๊ด€๋ จ ์—†๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ.

  • ์†Œ์ผ“์„ ์ด์šฉํ•œ ํ†ต์‹ 
    ์ผ๋ฐ˜์ ์œผ๋กœ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์€ ์†Œ์ผ“์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

    • ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ.

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

    • ๋ฐ”์ธ๋”ฉ: ์†Œ์ผ“์„ ๋งค๊ฐœ๋กœ ํ•œ์ชฝ์˜ ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ˜๋Œ€์ชฝ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—….

    ํ”„๋กœ์„ธ์Šค๊ฐ€ ์†Œ์ผ“์„ ๋ฐ”์ธ๋”ฉํ•œ ํ›„ ์†Œ์ผ“์— ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๊ณ , ์ฝ๊ธฐ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
    ์†Œ์ผ“์€ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ด๋„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (โ†’ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋„ ์ง€์›ํ•œ๋‹ค.)

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ์š”์•ฝ

์ข…๋ฅ˜์šด์˜์ฒด์ œ ๋™๊ธฐํ™” ์ง€์›open()/close() ์‚ฌ์šฉ
์ „์—ญ ๋ณ€์ˆ˜X (๋ฐ”์œ ๋Œ€๊ธฐ)X
ํŒŒ์ผX (wait() ํ•จ์ˆ˜ ์ด์šฉ)O
ํŒŒ์ดํ”„OO
์†Œ์ผ“OO

๊ณต์œ  ์ž์›๊ณผ ์ž„๊ณ„๊ตฌ์—ญ

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

2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ๋ณ‘ํ–‰์ ์œผ๋กœ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ƒํ™ฉ์„ โ€˜๊ฒฝ์Ÿ ์กฐ๊ฑด(race condition)์ด ๋ฐœ์ƒํ–ˆ๋‹คโ€™๊ณ  ํ•œ๋‹ค.
โ†’ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ณต์œ  ์ž์› ์ ‘๊ทผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ž„๊ณ„๊ตฌ์—ญ(critical section): ๊ณต์œ  ์ž์› ์ ‘๊ทผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜์—ญ.
์ž„๊ณ„๊ตฌ์—ญ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ์ž‘์—…ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

์ž„๊ณ„๊ตฌ์—ญ ํ•ด๊ฒฐ ์กฐ๊ฑด

  • ์ƒํ˜ธ ๋ฐฐ์ œ(mutual exclusion): ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.

  • ํ•œ์ • ๋Œ€๊ธฐ(bounded waiting): ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ๋ฌดํ•œ ๋Œ€๊ธฐ(infinite postpone)ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. (ํ•œ ๋†ˆ์ด ๋…์ ํ•˜๋ฉด ์•ˆ ๋จ.)

  • ์ง„ํ–‰์˜ ์œตํ†ต์„ฑ(progress flexibility): ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ง„ํ–‰์„ ๋ฐฉํ•ดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.


์ž„๊ณ„๊ตฌ์—ญ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์€ ์ž ๊ธˆ(lock)์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ž ๊ธˆ ํ•ด์ œ์™€ ๋™์‹œ์— ๋™๊ธฐํ™” ์‹ ํ˜ธ(์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค๋Š” ์‹ ํ˜ธ)๋ฅผ ๋ณด๋‚ธ๋‹ค.

์„ธ๋งˆํฌ์–ด
์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•˜๊ธฐ ์ „์— ์Šค์œ„์น˜๋ฅผ ์‚ฌ์šฉ ์ค‘์œผ๋กœ ๋†“๊ณ  ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
์ดํ›„ ๋„์ฐฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์•ž์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ์„ธ๋งˆํฌ์–ด๋Š” ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค์— ์ž„๊ณ„๊ตฌ์—ญ์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๋™๊ธฐํ™” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
โ†’ ์ž„๊ณ„๊ตฌ์—ญ์ด ์ž ๊ฒผ๋Š”์ง€ ์ง์ ‘ ์ ๊ฒ€ํ•˜๊ฑฐ๋‚˜, ๋ฐ”์œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋™๊ธฐํ™” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

์„ธ๋งˆํฌ์–ด์—์„œ ์ž ๊ธˆ์ด ํ•ด์ œ๋˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์„ธ๋งˆํฌ์–ด ํ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ wake_up ์‹ ํ˜ธ๋ฅผ ๋ฐ›์œผ๋ฉด ํ์—์„œ ๋‚˜์™€ ์ž„๊ณ„๊ตฌ์—ญ์— ์ง„์ž…ํ•œ๋‹ค.
โ†’ ๋ฐ”์œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์„ธ๋งˆํฌ์–ด์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ƒํ˜ธ ๋ฐฐ์ œ์™€ ํ•œ์ • ๋Œ€๊ธฐ ์กฐ๊ฑด์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์„ธ๋งˆํฌ์–ด์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์ž˜๋ชป๋œ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์ž„๊ณ„๊ตฌ์—ญ์ด ๋ณดํ˜ธ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ์˜ˆ1: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ
  • ์˜ˆ2: P()๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ wake_up ์‹ ํ˜ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • ์˜ˆ3: P()์™€ V()๋ฅผ ๋ฐ˜๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ˜ธ ๋ฐฐ์ œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

๋ชจ๋‹ˆํ„ฐ
๊ณต์œ  ์ž์›์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆจ๊ธฐ๊ณ  ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์ž์›์„ ๋ณดํ˜ธํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋™๊ธฐํ™”๋ฅผ ์‹œํ‚จ๋‹ค.
์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.
โ†’ ๋ชจ๋‹ˆํ„ฐ๋Š” ์š”์ฒญ๋ฐ›์€ ์ž‘์—…์„ ๋ชจ๋‹ˆํ„ฐ ํ์— ์ €์žฅํ•œ ํ›„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋งŒ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ์•Œ๋ ค์ค€๋‹ค.


์ฝ”ํ…Œ sql๋ฌธ

+) 22. 07. 05. ์ถ”๊ฐ€

GROUP BY

  1. ๋™๋ช… ๋™๋ฌผ ์ˆ˜ ์ฐพ๊ธฐ
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 ORDER BY NAME
  1. ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(1)
SELECT HOUR(DATETIME), COUNT(HOUR(DATETIME)) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20 GROUP BY HOUR(DATETIME) ORDER BY HOUR(DATETIME)

โžก๏ธ ์ด๊ฑด BETWEEN์„ ์“ฐ๋Š” ๊ฒŒ ๋” ๊น”๋”ํ–ˆ์„ ๋“ฏ...

  1. ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2)
SET @hour = -1;

SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23

โžก๏ธ ์ด๊ฑฐ ์ง„์งœ ๊ฐœ์–ด๋ ค์›Œ์„œ ๊ตฌ๊ธ€๋ง ํ•จ... ๋ญ ๋ฌด์Šจ ์กฐ์ธ ์“ฐ๋Š” ๊ฒƒ๋„ ์žˆ๋˜๋ฐ ๊ทธ๊ฑด ์ง„์งœ ๋ณต์žกํ•ด ๋ณด์—ฌ์„œ;; ์ด ๋ฐฉ๋ฒ•์ด ๋” ๊ฐ„๋‹จํ•˜๊ธด ํ•œ๋ฐ ์‚ฌ์‹ค ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋œ๋‹ค.

๋‚ด ๊ฐ์ •! ๋‚ด ๋Š๋‚Œ! ๋‚˜ ๋‹ค์šด๊ฒŒ ๋ญ”๋ฐ!! ์ด๋ชจํ‹ฐ์ฝ˜


IP, TCP, UDP, HTTP

+) 22. 07. 05. ์ถ”๊ฐ€ ์™„!

IP

Internet Protocol
3๊ณ„์ธต์—์„œ ๋…ผ๋ฆฌ ์ฃผ์†Œ์ธ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ธํ„ฐ๋„ท์—์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ.
IP ์ฃผ์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ 32๋น„ํŠธ(IPv4)์ธ ์ฃผ์†Œ๋ฅผ ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ  8๋น„ํŠธ์˜ 10์ง„์ˆ˜ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

  • ์˜ˆ: 123.123.123.123

IPv4๋กœ๋Š” ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— IPv6๋ผ๋Š” ์ƒˆ๋กœ์šด ์ฃผ์†Œ ์ฒด๊ณ„๊ฐ€ ๋“ฑ์žฅํ•˜์˜€๋‹ค.


IP์˜ ๋ถ„๋ฅ˜

์‚ฌ์šฉ ๋ฒ”์œ„์— ๋”ฐ๋ฅธ ๊ตฌ๋ถ„

  • ๊ณต์ธ IP: ๊ณต์ธ ๊ธฐ๊ด€์—์„œ ์ธ์ฆํ•œ ๊ณต๊ฐœํ˜•(public) IP ์ฃผ์†Œ. ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์–ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ๋“ฑ์—์„œ ๊ฒ€์ƒ‰, ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ „ ์„ธ๊ณ„์—์„œ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค.

  • ์‚ฌ์„ค IP(๊ฐ€์ƒ IP): ๊ณต์œ ๊ธฐ๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ์˜ IP ์ฃผ์†Œ. ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜์ง€ ์•Š์•„ ์™ธ๋ถ€์—์„œ ๊ฒ€์ƒ‰ ๋ฐ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€์ƒ IP ์ฃผ์†Œ๋Š” ์ฃผ์†Œ ๋Œ€์—ญ์ด 3๊ฐœ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.

    • 192.168.xxx.xxx

    • 172.10.xxx.xxx

    • 10.xxx.xxx.xxx

ํ• ๋‹น ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๊ตฌ๋ถ„

  • ๊ณ ์ • IP: ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํ•ด๋‹น ์ปดํ“จํ„ฐ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ณ ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, IP ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ ๋˜๋Š” ์ปดํ“จํ„ฐ(ํŒŒ์ผ ๊ณต์œ  ์„œ๋ฒ„ ๋“ฑ) ๋“ฑ์— ์ ํ•ฉํ•˜๋‹ค.

  • ์œ ๋™ IP: IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ํŠน์ • ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ฃผ๋Š” ์ •๋ณด ๊ทธ๋Œ€๋กœ ์ปดํ“จํ„ฐ์— ์ž๋™ ์„ค์ •๋˜๋Š” ๋ฐฉ์‹(Dynamic Host Configuration Protocol). IP ์ฃผ์†Œ๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.


๊ณต์ธ IP๊ฐ€ ํ•„์š”ํ•  ๋•Œ

๋งŒ์•ฝ ํฌํ„ธ ์‚ฌ์ดํŠธ์˜ IP๊ฐ€ ์œ ๋™ ์‚ฌ์„ค IP๋ผ๋ฉด, ์ด์ „์— ์ ‘์†ํ•˜๋˜ IP ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๋ ค ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.
๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํ“จํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ๊ณ ์œ ํ•œ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์„œ๋ฒ„๊ฐ€ ์œ ๋™ IP์ผ ๊ฒฝ์šฐ์—” DDNS(Dynamic DNS)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.
โ†’ DNS ์„œ๋ฒ„๊ฐ€ ๋ฐ”๋€ IP๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๋Š” ๋„๋ฉ”์ธ ๋„ค์ž„์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


์‚ฌ์„ค IP์˜ ํŠน์ง•

  • ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ ๋‚ด ์ปดํ“จํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. (๊ณต์ค‘์ „ํ™”๊ธฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ๊ณต์ค‘์ „ํ™”๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์ „ํ™”๊ธฐ๋กœ ์ „ํ™”๋ฅผ ๊ฑธ ์ˆœ ์žˆ์ง€๋งŒ ์ƒ๋Œ€๋ฐฉ์ด ๊ณต์ค‘์ „ํ™”๊ธฐ๋กœ ์ „ํ™”๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.)

  • *ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์„ค IP๋กœ๋„ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    *ํŠน์ • ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์„ ๋‚ด๋ถ€ ์ปดํ“จํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ.


TCP

Transmission Control Protocol

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

TCP์—์„œ๋Š” ๋ถ„ํ• ๋œ ํŒจํ‚ท์„ ์ž˜ ๋ถ„ํ• ํ•˜๊ณ  ์ˆ˜์‹  ์ธก์ด ์ž˜ ์กฐํ•ฉํ•˜๋„๋ก ํŒจํ‚ท์— ์ˆœ์„œ๋ฅผ ์ฃผ๊ณ  ์‘๋‹ต ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

  • ํŒจํ‚ท์— ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ == ์‹œํ€€์Šค ๋ฒˆํ˜ธ
  • ์‘๋‹ต ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ == ACK ๋ฒˆํ˜ธ

๋‘ ๋ฒˆํ˜ธ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•ด ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ํŒจํ‚ท์ด ์†์‹ค๋œ ๊ฒƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์†ก์‹ ์ž | ์ˆ˜์‹ ์ž
1๋ฒˆ ์ „์†ก โ†’ 1๋ฒˆ ์ˆ˜์‹ 
ACK 2 ์ˆ˜์‹  โ† ACK 2 ์ „์†ก
2๋ฒˆ ์ „์†ก โ†’ 2๋ฒˆ ์ˆ˜์‹ 
ACK 3 ์ˆ˜์‹  โ† ACK 3 ์ „์†ก

์†ก์‹  ์ธก์ด 1๋ฒˆ ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  ์ˆ˜์‹  ์ธก์ด ์ด ํŒจํ‚ท์„ ์ž˜ ๋ฐ›์•˜๋‹ค๋ฉด 1๋ฒˆ์„ ์ž˜ ๋ฐ›์•˜์œผ๋‹ˆ ๋‹ค์Œ์—๋Š” 2๋ฒˆ์„ ๋‹ฌ๋ผ๋Š” ํ‘œ์‹œ๋กœ ACK ๋ฒˆํ˜ธ 2๋ฅผ ์ค€๋‹ค.

์œˆ๋„ ์‚ฌ์ด์ฆˆ์™€ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„

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

  • ์œˆ๋„ ์‚ฌ์ด์ฆˆ: ํ•œ ๋ฒˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ
  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„: ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œˆ๋„ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ

TCP๋Š” ๋ฐ์ดํ„ฐ์— ์œ ์‹ค์ด ๋ฐœ์ƒํ•˜๋ฉด ์œˆ๋„ ์‚ฌ์ด์ฆˆ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  ์ •์ƒ์ ์ธ ํ†ต์‹ ์ด ๋˜๋Š” ๊ฒฝ์šฐ ์„œ์„œํžˆ ํ•˜๋‚˜์”ฉ ๋Š˜๋ฆฐ๋‹ค.

3-Way Handshake

TCP๋Š” ํ†ต์‹  ์ „, ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๋‚ด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ์นœ๋‹ค.
3๋ฒˆ์˜ ํŒจํ‚ท์„ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉด์„œ ํ†ต์‹ ์„ ์„œ๋กœ ์ค€๋น„ํ•˜๋ฏ€๋กœ โ€˜3๋ฐฉํ–ฅ ํ•ธ๋“œ์…ฐ์ดํฌโ€˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  1. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” LISTEN ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.

  2. ํด๋ผ์ด์–ธํŠธ์—์„œ ํ†ต์‹ ์„ ์‹œ๋„ํ•  ๋•Œ SYN ํŒจํ‚ท์„ ๋ณด๋‚ด๋Š”๋ฐ, ์ด ์ƒํƒœ๋ฅผ SYN-SENT๋ผ๊ณ  ํ•œ๋‹ค.

  3. SYN์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” SYN-RECEIVE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ  SYN, ACK๋กœ ์‘๋‹ตํ•œ๋‹ค.

  4. ์ด ์‘๋‹ต์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ESTABLISHED ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋‹ค์‹œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

  5. ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์˜ ์‘๋‹ต์„ ๋ฐ›๊ณ  ESTABLISHED ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

ESTABLISHED ์ƒํƒœ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.


UDP

User Datagram Protocol

TCP์™€ ๋‹ฌ๋ฆฌ UDP๋Š” 4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์ด ๊ฐ€์ ธ์•ผ ํ•  ํŠน์ง•์ด ๊ฑฐ์˜ ์—†๋‹ค.
UDP ํ—ค๋”๋Š” TCP์™€ ๋น„๊ตํ•˜๋ฉด ๋‚ด์šฉ์ด ๊ฑฐ์˜ ์—†๋‹ค. 4๊ณ„์ธต์˜ ํŠน์ง•์ธ ์‹ ๋ขฐ ํ†ต์‹ ์„ ์œ„ํ•œ ๋‚ด์šฉ(์‹œํ€€์Šค ๋ฒˆํ˜ธ, ACK ๋ฒˆํ˜ธ, ํ”Œ๋ž˜๊ทธ, ์œˆ๋„ ์‚ฌ์ด์ฆˆ)์ด ์—†๋‹ค.

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

์‹ค์„ธ๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ง€ํ„ธํ™”ํ•  ๋•Œ๋Š” ์‹œ๊ฐ„์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ˜ํ”Œ๋งํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋“ค์€ ๋‹ค๋ฅธ ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๋ฉด ์‹œ๊ฐ„ ์ง€์—ฐ์— ๋”ฐ๋ฅธ ์–ด๋ ค์›€์ด ์žˆ๋‹ค.
์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ ๋ช‡ ๊ฐœ๊ฐ€ ์œ ์‹ค๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ์žฌ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ž ์‹œ ๋™์˜์ƒ์ด๋‚˜ ์Œ์„ฑ์ด ๋ฉˆ์ถ”๋Š” ๊ฒƒ์„ ๋” ์ด์ƒํ•˜๊ฒŒ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‹ ๋ขฐ์„ฑ๋ณด๋‹ค ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜๋”๋ผ๋„ ์‹œ๊ฐ„์— ๋งž์ถ”์–ด ๊ณ„์† ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ํ™”์ƒํšŒ์˜ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์ธ ๊ฒฝ์šฐ, UDP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
30ํ”„๋ ˆ์ž„์งœ๋ฆฌ ๋™์˜์ƒ์—์„œ 1ํ”„๋ ˆ์ž„์ด ์ž˜๋ฆฐ 29ํ”„๋ ˆ์ž„๋งŒ์œผ๋กœ๋„ ์‚ฌ๋žŒ๋“ค์˜ ๋ˆˆ์—๋Š” ์ด์งˆ๊ฐ์ด ๋ณ„๋กœ ์—†์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ๋™์˜์ƒ์„ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ, ์ž˜๋ฆฐ 1๊ฐœ ํ”„๋ ˆ์ž„์„ ์žฌ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ผ์‹œ์ ์œผ๋กœ ํ™”๋ฉด์ด ๋ฉˆ์ถ”๋ฉด ์Œ์„ฑ๊ณผ ์˜์ƒ์ด ๋’ค๋Šฆ๊ฒŒ ์ „๋‹ฌ๋˜์–ด ์‚ฌ์šฉ์ž๋Š” ๋„คํŠธ์›Œํฌ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

UDP๋Š” TCP์™€ ๋‹ฌ๋ฆฌ ํ†ต์‹  ์‹œ์ž‘ ์ „ 3-Way Handshake์ฒ˜๋Ÿผ ์‚ฌ์ „์— ์—ฐ๊ฒฐ์„ ํ™•๋ฆฝํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ์—†๋‹ค.
๋Œ€์‹  UDP์—์„œ ์ฒซ ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌ์†Œ์Šค ํ™•๋ณด๋ฅผ ์œ„ํ•ด ์ธํ„ฐ๋ŸฝํŠธ(Interrupt)๋ฅผ ๊ฑฐ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์œ ์‹ค๋œ๋‹ค.
๊ทธ๋ž˜์„œ UDP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Œ€๋ถ€๋ถ„ ์ด๋Ÿฐ ์ƒํ™ฉ์„ ์ธ์ง€ํ•˜๊ณ  ๋™์ž‘ํ•˜๊ฑฐ๋‚˜, ์—ฐ๊ฒฐ ํ™•๋ฆฝ์€ TCP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ๋ชจ๋“  ์ค€๋น„๋ฅผ ๋งˆ์นœ ํ›„ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋งŒ UDP๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋‹ค.


TCP์™€ UDP์˜ ํŠน์ง• ๋น„๊ต

TCPUDP
์—ฐ๊ฒฐ ์ง€ํ–ฅ(Connected Oriented)๋น„์—ฐ๊ฒฐํ˜•(Connectionless)
์˜ค๋ฅ˜ ์ œ์–ด ์ˆ˜ํ–‰ํ•จ์˜ค๋ฅ˜ ์ œ์–ด ์ˆ˜ํ–‰ ์•ˆ ํ•จ
ํ๋ฆ„ ์ œ์–ด ์ˆ˜ํ–‰ํ•จํ๋ฆ„ ์ œ์–ด ์ˆ˜ํ–‰ ์•ˆ ํ•จ
์œ ๋‹ˆ์บ์ŠคํŠธ์œ ๋‹ˆ์บ์ŠคํŠธ, ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ, ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
์ „์ด์ค‘(Full Duplex)๋ฐ˜์ด์ค‘(Half Duplex)
๋ฐ์ดํ„ฐ ์ „์†ก์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ์ „์†ก

HTTP

HyperText Transfer Protocol

๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ํ”„๋กœํ† ์ฝœ.
์›น ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์— ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ์„ ๋งํ•œ๋‹ค.
์ธํ„ฐ๋„ท ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•  ๋•Œ http://wwwโ€ฆ ์™€ ๊ฐ™์ด ํ•˜๋Š” ๊ฒƒ์€ www๋กœ ์‹œ์ž‘๋˜๋Š” ์ธํ„ฐ๋„ท ์ฃผ์†Œ์—์„œ ํ•˜์ดํผํ…์ŠคํŠธ ๋ฌธ์„œ์˜ ๊ตํ™˜์„ http ํ†ต์‹ ๊ทœ์•ฝ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.

HTTP๋Š” Request / Response (์š”์ฒญ / ์‘๋‹ต) ๋™์ž‘์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
HTTP์˜ ๋ช…๋ น์— ํ•ด๋‹นํ•˜๋Š” HTTP Method๋ฅผ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํšŒ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฃผ์š” ๋ช…๋ น

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

  • POST
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    ๋ณดํ†ต ๊ฒŒ์‹œํŒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    GET ๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ณด๋‚ด๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ URL์„ ํ†ตํ•ด์„œ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ์„ฑ์€ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค.
    ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒŒ์‹œํŒ์˜ ๋ชฉ๋ก์ด๋‚˜ ๊ธ€ ๋ณด๊ธฐ ํ™”๋ฉด์€ ์ ‘๊ทผ ์ž์œ ๋„๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด GET ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ธ€ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ๋‚˜ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ๋Š” POST ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.


HTTP๋Š” 0.9 ๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.
0.9 ๋ฒ„์ „์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ๋‹จ์ˆœ ์ฝ๊ธฐ ๊ธฐ๋Šฅ๋งŒ ์ง€์›ํ•œ๋‹ค. (GET ๋ฉ”์„œ๋“œ๋งŒ ์ง€์›)

โฌ†๏ธ HTTP 0.9 ๋ฒ„์ „์˜ ์—ฐ๊ฒฐ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์„œ๋น„์Šค๋ฅผ ์ค€๋น„ํ•œ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์ค€๋น„ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด(Connect) ํด๋ผ์ด์–ธํŠธ๋Š” ์ฝ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญ(Request)ํ•œ๋‹ค.
์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฌธ์„œ๋ฅผ ์ „์†ก(Response)ํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค.(Close)

์ด ๊ธฐ๋ณธ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์€ HTTP์˜ ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๋‹ค.
ํ•˜์ง€๋งŒ HTTP 0.9๋Š” ํ•˜๋‚˜์˜ ์›น ํŽ˜์ด์ง€ ์•ˆ์—์„œ๋„ ํ…์ŠคํŠธ์™€ ๊ทธ๋ฆผ๋งˆ๋‹ค Connect ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๊ณ  ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ๋ชปํ–ˆ๋‹ค.


1.0 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ํ—ค๋”๊ฐ€ ์ƒ๊ฒผ๋‹ค.

์š”์ฒญ๋ฌธ์˜ GET์€ ์š”์ฒญ ๋ฉ”์†Œ๋“œ๊ณ , /index.php๋Š” URL, HTTP/1.1์€ HTTP ๋ฒ„์ „์ด๋‹ค.

Response์—๋Š” ์ƒํƒœ ์ฝ”๋“œ๋„ ๋ถ™์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ปค๋„ฅ์…˜ ํ•˜๋‚˜ ๋‹น ์š”์ฒญ ํ•˜๋‚˜๋ž‘ ์‘๋‹ต ํ•˜๋‚˜๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ  ํ†ต์‹  ๋ถ€ํ•˜ ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•˜์˜€๋‹ค.


HTTP Response์˜ ์ฃผ์š” ์ƒํƒœ ์ฝ”๋“œ

  • 200 OK : ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค.
  • 202 Accepted : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์˜€์œผ๋‚˜, ์ฆ‰๊ฐ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.
  • 400 Bad Request : ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์— ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • 401 Unauthorized : ์š”์ฒญ์˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ ์ ˆํ•œ ๊ถŒํ•œ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • 403 Forbidden : ์„œ๋น„์Šค ์š”์ฒญ์ด ๊ฑฐ๋ถ€๋˜์—ˆ๋‹ค.
  • 404 Not Found : ์›ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.
  • 500 Internal Server Error : ์„œ๋ฒ„์— ๋ถˆ๊ฐ€ํ”ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
  • 501 Not Implemented : ์š”์ฒญ ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ 1.1 ๋ฒ„์ „์—์„œ๋Š” *Persistent Connection์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•˜์˜€๋‹ค.
*์ง€์ •ํ•œ timeout ๋™์•ˆ ์ปค๋„ฅ์…˜์„ ๋‹ซ์ง€ ์•Š๋Š” ๋ฐฉ์‹

โ†’ ํ•œ ์ปค๋„ฅ์…˜์„ ์—ด์–ด๋‘๋ฉด ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ HTTP๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋“ค์–ด์™€์•ผ์ง€๋งŒ ๋‹ค์Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ดํ”„๋ผ์ด๋‹ ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•œ๋‹ค.

Pipelining์ด๋ž€, ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์—์„œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ˆœ์ฐจ์ ์ธ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์—ฐ์†์ ์œผ๋กœ ๋ณด๋‚ด ๊ทธ ์ˆœ์„œ์— ๋งž์ถฐ ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ ํŒŒ์ดํ”„๋ผ์ด๋‹์—๋„ ๋ฌธ์ œ๋Š” ์žˆ๋‹ค.
๋ฐ”๋กœ Head Of Line Blocking์ด๋‹ค.

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์ด ์™”๋Š”๋ฐ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ๋‘ ๋ฒˆ์งธ ์š”์ฒญ, ์„ธ ๋ฒˆ์งธ ์š”์ฒญ๋„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋’ค์˜ ์š”์ฒญ์ด ๋” ์งง๊ฒŒ ๊ฑธ๋ฆฌ๋Š”๋ฐ๋„ ์•ž์— ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ ๋˜๊ณ  ์žˆ์œผ๋ฉด ๋’ค์— ๋†ˆ์€ ๊ฟˆ๋„ ๋ชป ๊พผ๋‹ค๋Š” ๊ฑฐ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ๋Š” Header ๊ตฌ์กฐ์˜ ์ค‘๋ณต์ด ์žˆ๋‹ค.
์—ฐ์†๋œ ์š”์ฒญ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ—ค๋”์˜ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ๋„ ์ค‘๋ณต์„ ๊ฑฐ๋ฅด์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ „์†กํ•ด ๋ฒ„๋ฆฐ๋‹ค.


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

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Request์™€ Response์˜ Multiplexing์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ์„œ ์ˆœ์„œ๊ฐ€ ์—†์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (ํ”„๋ ˆ์ž„์€ ์ธํ„ฐ๋ฆฌ๋น™์ด๋ผ๋Š” ์Šคํ‚ฌ์„ ๊ฐ–๊ณ  ์žˆ์–ด์„œ, ๋จผ์ € ๋๋‚œ ํ”„๋ ˆ์ž„์ด ๋ผ์–ด๋“ค์–ด ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
โ†’ Head Of Line Blocking ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

HTTP 2์˜ ๋˜ ๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ๋Š” Stream Prioritization์ด ์žˆ๋‹ค.
๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
๋จผ์ € ๋๋‚ด์•ผ ํ•  ๋†ˆํ•œํ…Œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ€์ค‘์น˜๋ฅผ ์ค˜์„œ ๋จผ์ € ์‘๋‹ตํ•˜๊ฒŒ๋” ๋งŒ๋“ ๋‹ค.

๋˜ํ•œ Server Push๋ผ๋Š”, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์—์„œ ์•Œ์•„์„œ Pushํ•ด ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ƒ๊ฒผ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ /page.html์„ ์š”์ฒญํ–ˆ๋Š”๋ฐ /script.js๋ž‘ /style.css๋„ ๋ค์œผ๋กœ ๊ฐ™์ด ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜์ค‘์— ์š”์ฒญํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ค˜ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

๋งˆ์ง€๋ง‰ ํŠน์ง•! Header Compression
Static Dynamic Table์„ ํ†ตํ•ด ์ค‘๋ณต์„ ๊ฒ€์ถœํ•œ๋‹ค.
์ค‘๋ณต๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋งŒ ์ธ์ฝ”๋”ฉํ•˜์—ฌ, ํ—ค๋”์˜ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ ํŽ˜์ด์ง€์˜ ๋กœ๋“œ ์‹œ๊ฐ„์„ ๊ฐ์†Œ์‹œ์ผฐ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

  1. ๊ณ ์žฌ์„ฑ ยท ์ด์ƒํ›ˆ, IT ์—”์ง€๋‹ˆ์–ด๋ฅผ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ์ž…๋ฌธ

  2. ์–‘๋Œ€์ผ, ์ •๋ณด ๋ณด์•ˆ ๊ฐœ๋ก  : ํ•œ ๊ถŒ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ณด์•ˆ ์ด๋ก ์˜ ๋ชจ๋“  ๊ฒƒ

  3. ๋ฐ•๊ธฐํ˜„, ๋ฐ์ดํ„ฐ ํ†ต์‹ ๊ณผ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ

  4. ์ด๋ฌธ๊ทœ, โ€œ์šฉ์–ด๋กœ ๋ณด๋Š” ITโ€, https://terms.naver.com/list.naver?categoryId=59096

  5. ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” IT, โ€œHTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€?โ€, https://youtu.be/TwsQX1AnWJU

  6. ์šฐ์•„ํ•œTech, โ€œ์ฟจ๋ผ์ž„์˜ HTTP/1.1, HTTP/2, ๊ทธ๋ฆฌ๊ณ  QUICโ€, https://youtu.be/xcrjamphIp4

  7. ๋™๋นˆ๋‚˜, โ€œ์•„์ดํ”ผ ์ฃผ์†Œ(IP Address)์˜ ๊ฐœ๋…์„ ์ž์„ธํžˆ ์ดํ•ดํ•ด๋ณด์žโ€, https://youtu.be/pRWD7oTeuFw


๋ฐ€๋ฆฐ ๊ฑฐ ์“ฑ์‹น ๐Ÿ”ช

profile
๊น€๋‰ด๋น„

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN