STUDY - WEB

์ˆ˜ํ˜„ยท2023๋…„ 7์›” 31์ผ
0

IT (CS)

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

๐Ÿ“’ ๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘๋™ ์›๋ฆฌ

๐Ÿ“• ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋…

  • ๋™๊ธฐ(Synchronous)์ ์œผ๋กœ (HTML+CSS), JavaScript ์–ธ์–ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด
  • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์›น ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์‘๋‹ตํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด์„ํ•œ ํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์คŒ
  • ์›น ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฅ˜ (์‚ฌ์šฉ ๋ Œ๋”๋ง ์—”์ง„)
    • ๋„ค์ด๋ฒ„ ์›จ์ผ
    • ํŒŒ์ด๋ฒ„ํญ์Šค (๊ฒŒ์ฝ”(Gecko) ์—”์ง„)
    • ์‚ฌํŒŒ๋ฆฌ (์›นํ‚ท(Webkit) ์—”์ง„)
    • ํฌ๋กฌ (๋ธ”๋งํฌ ์—”์ง„)

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ํฌ๋กฌ ํŠน์ง•
- ์›นํ‚ท์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์›นํ‚ท์„ Forkํ•˜์—ฌ ๋ธ”๋งํฌ ์—”์ง„์„ ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด ์‚ฌ์šฉ
- ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ฌ๋ฆฌ ๊ฐ ํƒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋ Œ๋”๋ง ์—”์ง„ ์ธ์Šคํ„ด์Šค ์œ ์ง€ (๊ฐ ํƒญ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ํ”„๋กœ์„ธ์Šค๋กœ ์ฒ˜๋ฆฌ)

๐Ÿ“• ๋ธŒ๋ผ์šฐ์ € ๊ตฌ์„ฑ์š”์†Œ

  • (1) ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค
    • ์‚ฌ์šฉ์ž ์ ‘๊ทผ ๊ฐ€๋Šฅ ์˜์—ญ
    • ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฐฝ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜์—ญ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ
      • URI ์ž…๋ ฅํ•˜๋Š” ์ฃผ์†Œ ํ‘œ์‹œ์ค„
      • ์ด์ „/๋‹ค์Œ ๋ฒ„ํŠผ
      • ๋ถ๋งˆํฌ ๋ฉ”๋‰ด
      • ์ƒˆ๋กœ ๊ณ ์นจ ๋ฒ„ํŠผ
      • ํ™ˆ ๋ฒ„ํŠผ
  • (2) ๋ธŒ๋ผ์šฐ์ € ์—”์ง„
    • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ Œ๋”๋ง ์—”์ง„ ์‚ฌ์ด์˜ ๋™์ž‘ ์ œ์–ด
    • Data Storage ์ฐธ์กฐํ•˜์—ฌ ๋กœ์ปฌ์— ๋ฐ์ดํ„ฐ ์“ฐ๊ณ  ์ฝ๋Š” ์ž‘์—…
  • (3) ๋ Œ๋”๋ง ์—”์ง„
    • ์›น ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต ๋ฐ›์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ๋‚˜ํƒ€๋ƒ„
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML ๋ฌธ์„œ๋ฅผ ๋ฐ›์„ ๊ฒฝ์šฐ
      โžก๏ธ ๋ Œ๋”๋ง ์—”์ง„์˜ HTML ํŒŒ์„œ์™€ CSS ํŒŒ์„œ์— ์˜ํ•ด ํŒŒ์‹ฑ(parsing)๋จ
      โžก๏ธ DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉํ•จ
      โžก๏ธ ์ƒ์„ฑ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • (4) ํ†ต์‹ 
    • HTTP ์š”์ฒญ ๊ฐ™์€, ์„œ๋ฒ„์™€ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์— ์‚ฌ์šฉ
  • (5) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ํ•ด์„ ํ›„ ์‹คํ–‰
  • (6) UI ๋ฐฑ์—”๋“œ
    • select, input ๋“ฑ ๊ธฐ๋ณธ ์œ„์ ฏ์„ ๊ทธ๋ฆฌ๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • (7) ์ž๋ฃŒ ์ €์žฅ์†Œ
    • Cookie, Local Storage, Indexed DB ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉํ•˜์—ฌ ์ €์žฅ

๐Ÿ“• ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘ ๊ณผ์ •

(1) ์„œ๋ฒ„์—์„œ ์‘๋‹ต ๋ฐ›์€ HTML ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ โžก๏ธ DOM Tree ์ƒ์„ฑ

  • ๋ฌด์—‡์„ ๊ทธ๋ฆด์ง€ ๊ฒฐ์ •

๐Ÿ—’๏ธ ์˜ˆ์‹œ ๐Ÿ—’๏ธ : ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— url์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์„œ๋ฒ„์— ์š”์ฒญ ๋ณด๋ƒ„
  • ์„œ๋ฒ„๋Š” ์‘๋‹ต์œผ๋กœ HTML ๋ฌธ์„œ ์ „๋‹ฌ
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ํ•˜๋‚˜์”ฉ ํŒŒ์‹ฑํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๊ณผ์ • ์‹œ์ž‘๋จ
    • ๋ฏธ๋””์–ด ํŒŒ์ผ์„ ๋งŒ๋‚˜๋ฉด, ์ถ”๊ฐ€๋กœ ์š”์ฒญ ๋ณด๋‚ด ๋ฐ›์•„์˜ด
    • JavaScript ํŒŒ์ผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ ๋ฐ›์•„์™€ ์‹คํ–‰ํ•  ๋•Œ๊นŒ์ง€ ํŒŒ์‹ฑ ๋ฉˆ์ถค
  • html ์˜ˆ์‹œ
    <html>
    <head>
    	<meta charset="utf-8">
    	<link href="./style.css" rel="stylesheet">
    </head>
    <body>
      <p>Hello, <span>web performance</span> students</p>
      <div>
          <img src="./image.png">
      </div>
    </body>
    </html>
- ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ(UTF-8)์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
- ๋ฌธ์ž์—ด์„ HTML ํ‘œ์ค€์— ๋”ฐ๋ผ ํ† ํฐ(Token)์œผ๋กœ ๋ณ€ํ™˜
  - <html> โžก๏ธ StartTag: html, </html> โžก๏ธ EndTag: html๋กœ ๋ณ€ํ™˜
- ํ† ํฐ์„ ๋…ธ๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •
  - StartTag:html โžก๏ธ html ๋…ธ๋“œ, EndTag: html ์ด์ „ ๊นŒ์ง€ ๋“ค์–ด์˜ค๋Š” ํ† ํฐ์„ html ์ž์‹ ๋…ธ๋“œ๋กœ ๋„ฃ์Œ
  - Tree ๋ชจ์–‘์˜ DOM ์™„์„ฑ

(2) ํŒŒ์‹ฑํ•˜๋Š” ์ค‘ CSS ํŒŒ์ผ ๋งํฌ ๋งŒ๋‚˜๋ฉด CSS ํŒŒ์ผ ์š”์ฒญํ•ด์„œ ๋ฐ›์•„์„œ โžก๏ธ CSSOM ์ƒ์„ฑ

  • ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆด์ง€ ๊ฒฐ์ •

๐Ÿ—’๏ธ ์˜ˆ์‹œ ๐Ÿ—’๏ธ

  • HTML ํŒŒ์‹ฑ ์ค‘ CSS ๋งํฌ ๋งŒ๋‚˜๋ฉด CSS ํŒŒ์ผ ์š”์ฒญ ํ›„ ๋ฐ›์•„์˜ด
  • HTML ํŒŒ์‹ฑ๊ณผ ์œ ์‚ฌํ•œ ๊ณผ์ •์œผ๋กœ Tree ํ˜•ํƒœ์˜ CSSOM ์ƒ์„ฑ
    • ํŠน์„ฑ์ƒ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํŠน์„ฑ์„ ๊ณ„์† ์ด์–ด๋ฐ›๋Š”(cascading) ๊ทœ์น™ ์ถ”๊ฐ€๋จ (์ด์™ธ HTML๊ณผ ๋™์ผ)

(3) DOM Tree์™€ CSSOM์ด ๋งŒ๋“ค์–ด์ง€๋ฉด โžก๏ธRender Tree ์ƒ์„ฑ

  • ํ™”๋ฉด์— ๊ทธ๋ ค์งˆ ๊ฒƒ ๊ฒฐ์ •

๐Ÿ—’๏ธ ์˜ˆ์‹œ ๐Ÿ—’๏ธ

  • DOM + CSSOM ํ•ฉ์ณ์„œ RenderTree ์ƒ์„ฑ
    • DOM Tree ์ค‘ ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ƒ์„ฑ
    • CSS์—์„œ display: none์˜ ๊ฒฝ์šฐ๋Š” ํฌํ•จ๋˜์ง€ X
    • HTML์˜ ํƒœ๊ทธ ์•ˆ์˜ ๋‚ด์šฉ์˜ ๊ฒฝ์šฐ ํฌํ•จ๋˜์ง€ X

(4) Render Tree์— ์žˆ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ํ™”๋ฉด์˜ ์–ด๋””์— ์œ„์น˜ํ• ์ง€ ๊ณ„์‚ฐํ•˜๋Š” Layout ๊ณผ์ •

๐Ÿ—’๏ธ ์˜ˆ์‹œ ๐Ÿ—’๏ธ

  • Render Tree์— ์žˆ๋Š” ๊ฐ ๋…ธ๋“œ๋“ค์ด ํ™”๋ฉด์˜ ์–ด๋””์— ์œ„์น˜ํ• ์ง€ ๊ณ„์‚ฐ
    • CSSOM์˜ ์Šคํƒ€์ผ ์ •๋ณด๋กœ ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€๋Š” ์•Œ์ง€๋งŒ,
    • CSS Box model ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ viewport ๊ธฐ์ค€์œผ๋กœ ์‹ค์ œ๋กœ ๋†“์œผ๋ ค๋ฉด ์–ด๋””์— ๋‘˜์ง€ ๊ณ„์‚ฐ (position, width, hegiht ๋“ฑ ์œ„์น˜)

(5) ๋ Œ๋”๋ง ํŠธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ

  • ํ™”๋ฉด์— ์‹ค์ œ ํ”ฝ์…€์„ Paint

๐Ÿ—’๏ธ ์˜ˆ์‹œ ๐Ÿ—’๏ธ

  • visibility, outline, background-color ๋“ฑ ๋ˆˆ์— ๋ณด์ด๋Š” ํ”ฝ์…€ ๊ทธ๋ ค์ง
  • Render Layer์ด 2๊ฐœ ์ด์ƒ์ด๋ฉด, ๊ฐ Layer๋ฅผ paintํ•œ ๋’ค ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ Compositeํ•˜๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ ํ›„ ํ™”๋ฉด์— ๊ทธ๋ ค์ง

๐Ÿ“• ๋ Œ๋”๋ง ์—”์ง„ ๋™์ž‘ ๊ณผ์ •

  • (1) HTML ๋ฌธ์„œ ํŒŒ์‹ฑํ•˜๊ณ , ํ•ด๋‹น ๋‚ด๋ถ€์—์„œ ํƒœ๊ทธ๋ฅผ DOM ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜ํ•จ
    • ๊ทธ ๋‹ค์Œ ์™ธ๋ถ€ CSS ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์Šคํƒ€์ผ ์š”์†Œ๋„ ํŒŒ์‹ฑ
  • (2) ์Šคํƒ€์ผ ์ •๋ณด์™€ HTML ํ‘œ์‹œ ๊ทœ์น™์œผ๋กœ ๋ Œ๋” ํŠธ๋ฆฌ ํ˜•์„ฑ
    • ์ƒ‰์ƒ ๋˜๋Š” ๋ฉด์ ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ์†์„ฑ์ด ์žˆ๋Š” ์‚ฌ๊ฐํ˜• ๋“ฑ์„ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ
  • (3) ๋ Œ๋” ํŠธ๋ฆฌ ๋ฐฐ์น˜
    • ๊ฐ ๋…ธ๋“œ๊ฐ€ ํ™”๋ฉด์˜ ์ •ํ™•ํ•œ ์œ„์น˜์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ
  • (4) ๋ Œ๋” ํŠธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ
    • UI ๋ฐฑ์—”๋“œ์—์„œ ๋ Œ๋” ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ๋“ค๋กœ ํ˜•์ƒ์„ ๋งŒ๋“ค์–ด ๋ƒ„
  • ๋น ๋ฅด๊ฒŒ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด (1), (2) ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , (3), (4) ๋จผ์ € ์‹œ์ž‘

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์›นํ‚ท ๋™์ž‘ ๊ณผ์ •

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ํŒŒ์‹ฑ

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • ๋ฌธ์„œ๋ฅผ ๋ฌธ๋งฅ ์ž์œ  ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ ๋ณ€ํ™˜ โžก๏ธ ํŒŒ์‹ฑ ํŠธ๋ฆฌ or ๋ฌธ๋ฒ• ํŠธ๋ฆฌ
    • ๋ฌธ์„œ(์†Œ์Šค ์ฝ”๋“œ) โžก๏ธ ์–ดํœ˜ ๋ถ„์„(๊ณต๋ฐฑ, ์ค„๋ฐ”๊ฟˆ ๋“ฑ ์ œ๊ฑฐ) โžก๏ธ ๊ตฌ๋ฌธ ๋ถ„์„ โžก๏ธ ํŒŒ์‹ฑ ํŠธ๋ฆฌ โžก๏ธ ๋ณ€ํ™˜ โžก๏ธ ๊ธฐ๊ณ„์ฝ”๋“œ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– DOM (๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ, Document Object Model)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI, HTMLํŒŒ์ผ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„
  • ์›นํŽ˜์ด์ง€๊ฐ€ ํ™”๋ฉด์— ๋กœ๋”ฉ๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€์˜ ๋ฌธ์„œ๊ฐ์ฒด๋ชจ๋ธ(DOM) ์ƒ์„ฑ
  • W3C์˜ ๋ช…์„ธ์— ์ •ํ•ด์ ธ ์žˆ์Œ
  • DOM์š”์†Œ + ์†์„ฑ ๋…ธ๋“œ์˜ ํŠธ๋ฆฌ = ํŒŒ์‹ฑ ํŠธ๋ฆฌ
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ
 <html>
  <body>
   <p>Hello World</p>
   <div><img src="example.png" /></div>
  </body>
</html>  

๐Ÿ“• React ๋ Œ๋”๋ง ๋ฐฉ์‹ ์ฐจ์ด์ 

1) ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์‹

  • JS ๋ธŒ๋ผ์šฐ์ € : render tree ๋‹ค์‹œ ์ƒ์„ฑ โžก Reflow/Repaint
    • reflow : ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋ Œ๋” ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ๋ Œ๋”๋ง ํŠธ๋ฆฌ ์ƒ์„ฑ๊ณผ ๋ ˆ์ด์•„์›ƒ ๊ณผ์ • ๋‹ค์‹œ ์ˆ˜ํ–‰ (re-layout)
    • repaint : ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ํŽ˜์ธํŒ… ๋‹จ๊ณ„ ์ˆ˜ํ–‰ (redraw)
  • React ๋ธŒ๋ผ์šฐ์ € : ์ „์ฒด๋ฅผ ๊ฐ€์ƒ DOM์— ๋ฆฌ๋ Œ๋”๋งํ•˜๊ณ , ์ด์ „ ๊ฐ€์ƒ DOM๊ณผ ๋‚ด์šฉ diff ํ›„ ๋ฐ”๋€ ๋ถ€๋ถ„ ํ•œ๋ฒˆ์— ์‹ค์ œ DOM์— ์ ์šฉ
    • reflow์™€ repaint ์ตœ์†Œํ™”

2) Virtual DOM

  • ๊ฐœ๋…
    • DOM : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค DOM์€ ํŠธ๋ฆฌํ˜•ํƒœ๋ผ, ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •/์ œ๊ฑฐ/์‚ฝ์ž… ๊ฐ€๋Šฅ
      โžก DOM ์ž์ฃผ ์กฐ์ž‘์‹œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์œผ๋กœ ์†๋„ ์ €ํ•˜
    • Virtual DOM : ์‹ค์ œ DOM์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ์ถ”์ƒํ™”ํ•œ ๊ฐ€์ƒ DOM ์‚ฌ์šฉ
  • ๊ณผ์ •
    • (1) ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ์‹œ ์ „์ฒด UI๋ฅผ Virtual Dom์— ๋ฆฌ๋ Œ๋”๋งํ•จ
    • (2) ์ด์ „ Virtual Dom์— ์žˆ๋˜ ๋‚ด์šฉ์„ ํ˜„์žฌ Virtual Dom์— ์ ์šฉํ•จ (diffing)
    • (3) ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ

๐Ÿ“’ Web Server vs Web Applicatin Server

๐Ÿ“• ๊ฐœ๋…

Web = World Wide Web ์˜ ์•ฝ์ž๋กœ์„œ, ์ธํ„ฐ๋„ท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค์ด๋‹ค. WWW or W3 ๋ผ๊ณ  ๋งŽ์ด ๋ถˆ๋ ค์ง„๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์›น์˜ 3๋Œ€ ์š”์†Œ์—๋Š” URI(์ฃผ์†Œ), HTML(๋‚ด์šฉ), HTTP(ํ†ต์‹  ๊ทœ์•ฝ)๋“ฑ 3๊ฐœ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

URI : Uniform Resource Identifier ๋กœ์„œ ์ธํ„ฐ๋„ท์—์„œ ์›น ํŽ˜์ด์ง€, ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋“ฑ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค.

HTML : Hypertext Markup Language ๋กœ์„œ ์›น ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ์„œ, ์ •์ ์ธ ์ปจํ…์ธ ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ํ•ด๋‹นํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค. HTML ์€ Markup Language ๋กœ์„œ Programing Language๊ฐ€ ์•„๋‹ˆ๋‹ค.

HTTP : Hyper text Transfer Protocol ๋กœ์„œ ์›น ์ƒ์—์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ ์ผ์ข…์˜ ํ†ต์‹  ๊ทœ์น™ ์ด๋‹ค.

server = ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ •๋ณด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ.

1. Web Server = ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์›น ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ๋กœ์„œ ์ •์ ์ธ ์ปจํ…์ธ ๋“ค๋งŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Web Application Server = Web Server + Web Application ์ด๋‹ค.

Web Application์€ ์›น์—์„œ ์‹คํ–‰๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ์„œ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ ์›จ์–ด.
ํ•„์š”ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฌผ์„ ์›น ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (๊ฐ„๋‹จํžˆ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ด ์ง„๋‹ค.)

๋ณ€ํ™”ํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•œ๋‹ค. โ‡’ WAS

์ •์ ์ธ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•œ๋‹ค. โ‡’ WS

๐Ÿ“• ์ •์  ์›น ํŽ˜์ด์ง€ (Static Web Page) vs ๋™์  ์›น ํŽ˜์ด์ง€(Dynamic Pages)

Web Server ์— ๋ฏธ๋ฆฌ ์ €์žฅ๋œ ํŒŒ์ผ์ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ์›น ํŽ˜์ด์ง€ ์ด๋‹ค.

โ†’ HTML, CSS, JS, IMG๊ฐ€ ์˜ˆ์‹œ์ด๋‹ค.

โ‡’ ํด๋ผ์ด์–ธํŠธ์— ์š”์ฒญ์— ๋”ฐ๋ผ ์ €์žฅ๋œ ํŒŒ์ผ์„ ์‘๋‹ตํ•˜๋ฏ€๋กœ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ But ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ด์™ธ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์—ฌ์ค„์ˆ˜ ์—†์–ด ์„œ๋น„์Šค๊ฐ€ ํ•œ์ •์  ์ด๋ผ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

Web Server์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ๊ฐ€๊ณต์ฒ˜๋ฆฌ ํ•œ ๋’ค ์ƒ์„ฑ๋˜์–ด ์ „๋‹ฌํ•˜๋Š” ์›น ํŽ˜์ด์ง€ ์ด๋‹ค.

โ†’ JSP, php, aps์™€ ๊ฐ™์€ ํŽ˜์ด์ง€ ์ƒ์„ฑ ๊ฐ€๋Šฅ

โ‡’ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ C, U, D๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์  ์ด ์žˆ์ง€๋งŒ, But ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Web Application Server๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋น„์šฉ์  ๋‹จ์ ์ด ์žˆ๋‹ค.

๐Ÿ“• Web Server ์™€ Web Application Server

1. Web Server

ํ•˜๋“œ์›จ์–ด ์  ์˜๋ฏธ์˜ WebServer : Web ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ.

์†Œํ”„ํŠธ์›จ์–ด ์  ์˜๋ฏธ์˜ WebServer : ์›น ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ

  1. HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„œ๋น„์Šคํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.
    1. ์ •์ ์ธ ์ปจํ…์ธ (์ด๋ฏธ์ง€)์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด WAS๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•ด์ค€๋‹ค.
    2. ๋™์ ์ธ ์ปจํ…์ธ ์˜ ์š”์ฒญ์ด ๋“ค์–ด ์˜จ๋‹ค๋ฉด, WAS์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ํ•ด๋‹น ์‘๋‹ต์„ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ ํ•ด์ค€๋‹ค.
  2. ์˜ˆ์‹œ
    1. Apache Server, Nginx, IIS๋“ฑ ์ด ์žˆ๋‹ค.

2. Web Application Server

  1. Web Server + Web Container ๋กœ์„œ DB์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Application Server์ด๋‹ค.

    ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์€ Web Application Container ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ( ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋˜๋Š” ๊ณต๊ฐ„ ์ด๋ฏ€๋กœ)

  1. HTTP ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด ์ด๋‹ค.

  2. WAS ๋Š” Web Container or Servlet Container ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

    Container โ†’ JSP Servlet์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ ์›จ์–ด

  3. WAS์˜ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ๋Š” DB ์ ‘์†๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ๋“ฑ์ด ์žˆ๋‹ค.

  4. ์˜ˆ์‹œ

    1. Tomcat, JBoss, Jeus, Web Sphere

3. ์˜ˆ์‹œ

  • ์‚ฌ์šฉ์ž๊ฐ€ URI๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ• ๋•Œ ์›น ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์–ด๋– ํ•œ ๋™์ž‘์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์›น ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•ด์ค€๋‹ค๋ฉด ๋์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์—์„œ๋Š” WAS ๊นŒ์ง€ ์š”๊ตฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ๊ตฌ๋‹จ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž, ์ •์ ์ธ ํŽ˜์ด์ง€๋งŒ ์ œ๊ณตํ•˜๋Š” Web Server์˜ ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆด์ˆ˜ ์—†๋‹ค. Why? ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ด๋Š” HTML ์˜ ๊ฒฝ์šฐ Programing language๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ตฌ์กฐ๋ฅผ ์žก๋Š” Markup language ๋กœ์„œ, ์ผ๋ฐ˜์ ์ธ For ๋ฌธ์„ ๋Œ๋ฆด์ˆ˜์—†๋‹ค. ๋งŒ์•ฝ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ์‘๋‹ต์— ๋Œ€ํ•œ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜์ง€๋งŒ, ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ Web Application Server์˜ ๊ฒฝ์šฐ Java์™€ ๊ฐ™์€ Programing language๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด, for ๋ฌธ์„ ๋Œ๋ ค ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ํšจ๊ณผ์  ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ •์ ์ธ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ๋• Web Server ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ, ๋™์ ์ธ ์š”์ฒญ์ด ๋“ค์–ด ์˜ฌ๋• Web Application Server๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“• Web Server Architecture

  • Web Server ๊ตฌ์กฐ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ
    • Cient โ†’ Web Server โ†’ Web Application Server โ†’ DB ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Web Application Server ์™€ Web Server๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ€๋ถ„์ด, ๊ทธ๋ ‡๋‹ค๋ฉด Web Application Server๋Š” Web Server๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๊ทธ๋ƒฅ WAS ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋‚˜? ๋‹จ์ง€, ์†๋„ ์ฐจ์ด ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ๊ฒƒ์ธ๊ฐ€? ์—๋Œ€ํ•œ ์˜๋ฌธ์ด์˜€๋Š”๋ฐ. ์ •ํ™•ํ•œ ํ•ด๋‹ต์„ ์ดํ•ดํ• ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ณดํ†ต ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„์˜ ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ WAS ์•ž์— ์›น์„œ๋ฒ„๋ฅผ ๋‘์–ด ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

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

โ‡’ ๋”ฐ๋ผ์„œ Cient โ†’ Web Server โ†’ Web Application Server โ†’ DB ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์ •์ ์ธ ์ปจํ…์ธ ๋ผ๋ฉด Web Server์—์„œ ๋ฐ”๋กœ ์‘๋‹ต ํ•ด์ฃผ๋ฉฐ 1์ฐจ์ ์œผ๋กœ ๊ฑธ๋Ÿฌ์ฃผ๊ณ , ๋™์ ์ธ ์ปจํ…์ธ  ๋ผ๋ฉด WAS์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ด์–ด ์‘๋‹ต์„ ๋ฐ›๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ ํšจ์œจ์ ์ธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด ์ค€๋‹ค.

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ฒˆ์™ธ

  • Apache ์™€ Apache Tomcat
  • Apache โ‡’ Web Server
  • Apache Tomcat โ‡’ Web Application Server


    ์˜›๋‚ ์—๋Š” ์›น ์„œ๋ฒ„๋Š” Apache, WAS ๋Š” Tomcat ์ด์—ˆ์œผ๋‚˜ Tomcat ์ž์ฒด๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์˜ค๋ฉฐ, ์ •์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ์ˆœ์ˆ˜ Apache๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์—†์–ด Apache Tomcat์œผ๋กœ ๋ถˆ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.
profile
Notion์œผ๋กœ ์ด๋™ (https://24tngus.notion.site/3a6883f0f47041fe8045ef330a147da3?v=973a0b5ec78a4462bac8010e3b4cd5c0&pvs=4)

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