๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS

[CS] : ๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘๋™ ์›๋ฆฌ

by ๊ถŒ์Šพํ–„ 2023. 8. 24.

 

๋ธŒ๋ผ์šฐ์ € ?

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋™๊ธฐ์ ์œผ๋กœ HTML CSS JS ์–ธ์–ด๋ฅผ "ํ•ด์„"ํ•ด์„œ ํ™”๋ฉด์— ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” "์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด" ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ? ์„œ๋ฒ„๋Š” ๊ทธ ์š”์ฒญ์— "์‘๋‹ต"์„ ํ•˜๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ทธ "์‘๋‹ต"์„ "ํ•ด์„"ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
์ž์›์€ HTML PDF ์ด๋ฏธ์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ณ ,
ํฌ๋กฌ / ์‚ฌํŒŒ๋ฆฌ / ํŒŒ์ด์–ดํญ์Šค ๋“ฑ์„ "์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฅ˜"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌ์กฐ

๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค

์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” "์˜์—ญ"์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต HTML์˜ HEAD ๋ถ€๋ถ„์— ์กด์žฌํ•˜๋Š” ์ฃผ์†Œ ํ‘œ์‹œ์ค„ / ์ด์ „ ๋‹ค์Œ๋ฒ„ํŠผ / ์ƒˆ๋กœ๊ณ ์นจ / ํ™ˆ ๋ฒ„ํŠผ / ๋“ฑ๋“ฑ ์„œ๋ฒ„์— ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฐฝ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€์˜ ๋ชจ๋“  ๋ถ€๋ถ„์— ์†ํ•ฉ๋‹ˆ๋‹ค.

 

2. ๋ธŒ๋ผ์šฐ์ € ์—”์ง„

์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ Œ๋”๋ง ์—”์ง„ ์‚ฌ์ด์—์„œ ๋™์ž‘์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

Data Storage ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ๋กœ์ปฌํ™˜๊ฒฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ , ์ฝ์œผ๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

3. ๋ Œ๋”๋ง ์—”์ง„

์›น ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋ฐ›์€ ์ž์›์„ ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋กœ HTML ๋ฌธ์„œ์˜ HTML/CSS ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•จ์— ์žˆ์–ด์„œ๋Š” ๋ Œ๋”๋ง ์—”์ง„์˜ ์ดํ•ด๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

"๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML ์‘๋‹ต์„ ๋ฐ›๊ฒŒ๋˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์˜ HTML ํŒŒ์„œ / CSS ํŒŒ์„œ์— ์˜ํ•ด์„œ ํŒŒ์‹ฑ๋˜์–ด DOM / CSSOM ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ๋ Œ๋”ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ Œ๋”ํŠธ๋ฆฌ๋กœ ์ธํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4. ๋„คํŠธ์›Œํ‚น(ํ†ต์‹ )

HTTP ์š”์ฒญ๊ณผ ๊ฐ™์€ ์„œ๋ฒ„์™€ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

5. JS ์—”์ง„

JS ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ (ํฌ๋กฌ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” V8 ์—”์ง„์ด ๋™์ ์–ธ์–ด์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•œ์ค„ํ•œ์ค„ ํ•ด์„ํ•˜์—ฌ ๋ฟŒ๋ ค์ค€๋‹น.)

 

6. UI/๋ฐฑ์—”๋“œ

๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ์„ ๊ทธ๋ฆฌ๋Š” ์ธํ„ฐํŽ˜์ด์Šค

 

7. ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ

Cookie / Local-Storage / Indexed DB ๋“ฑ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

 

๋ Œ๋”๋ง ์—”์ง„

์š”์ฒญ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ๋…€์„
(๊ฐ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋ Œ๋”๋ง ์—”์ง„์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํŽ˜์ด์ง€๋ผ๋„ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

๋ Œ๋”๋ง ์—”์ง„์˜ ์ข…๋ฅ˜

  • Blink - ํฌ๋กฌ / ์˜คํŽ˜๋ผ
  • Webkit - ์‚ฌํŒŒ๋ฆฌ
  • Trident - ์ต์Šคํ”Œ๋กœ์–ด
  • EdgeHTML - ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์—ฃ์ง€

๋ Œ๋”๋ง ์—”์ง„์€ ๋” ๋‚˜์€ UX๋ฅผ ์œ„ํ•ด์„œ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ๋ Œ๋”๋ง ์—”์ง„์€ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

HTML ์„ ํŒŒ์‹ฑํ• ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ Œ๋”ํŠธ๋ฆฌ ๋ฐฐ์น˜ ๋ฐ ๊ทธ๋ฆฌ๊ธฐ ๊ณผ์ •์„ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

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

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

๋ Œ๋”๋ง ์—”์ง„์˜ ๋™์ž‘๊ณผ์ •์„ ์˜ˆ๋กœ ๋‚˜ํƒ€๋‚ธ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค.

1. HTML ๋ฌธ์„œ ํŒŒ์‹ฑํ•ด์„œ DOM ํŠธ๋ฆฌ ์ƒ์„ฑ

2. ์™ธ๋ถ€ CSS ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ํฌํ•จ๋œ ์Šคํƒ€์ผ ์š”์†Œ ํŒŒ์‹ฑํ•ด์„œ CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑ

3. ๋‘ ๊ฒฐ๊ณผ๋ฌผ์„ ํ•ฉ์ณ์„œ Render ํŠธ๋ฆฌ ์ƒ์„ฑ

4. ๋ Œ๋”ํŠธ๋ฆฌ ์•ˆ์˜ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ํ™”๋ฉด์ƒ์— ์–ด๋””์— ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •

5. UI/๋ฐฑ์—”๋“œ ์—์„œ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋ฅผ ๊ทธ๋ ค๋‚ธ๋‹ค.

 

HTML ๋ฌธ์„œ ํŒŒ์‹ฑ -> DOM ํŠธ๋ฆฌ ์ƒ์„ฑ

DOM ์€ ๊ฐ๊ฐ์˜ ๋งˆํฌ์—…๊ณผ 1 : 1 ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 <html>
  <body>
   <p>Hello World</p>
   <div><img src="example.png" /></div>
  </body>
</html>

์œ„์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

JS ์˜ ์ฒ˜๋ฆฌ

JS๋„ ๋ Œ๋”๋ง ์—”์ง„์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด ์ง€๋А๋ƒ ??
๋‹ต์€ ๋†‰์ด๋‹ค.

JS ๋Š” JS ์˜ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

HTMLํŒŒ์„œ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘๊ฐ„์— <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚œ๋‹ค๋ฉด DOM ์ƒ์„ฑ๊ณผ์ •์„ ์ค‘์ง€ํ•˜๊ณ  JS ์—”์ง„์œผ๋กœ ๊ถŒํ•œ์„ ๋„˜๊ธด๋‹ค.
JS ์—”์ง„์€ ๋ฐ›์€ HTML ํŒŒ์ผ์˜ js์ฝ”๋“œ / src ์†์„ฑ์— ์ •์˜๋œ JS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ JS์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์ „๋‹ฌ๋ฐ›์€ ๊ถŒํ•œ์„ ๋‹ค์‹œ HTML ํŒŒ์„œ๋กœ ๋„˜๊ธฐ๋ฉด์„œ DOM ํŠธ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๊ตฌ์ถ•ํ•ด ๋‚˜๊ฐ„๋‹ค.

 

์ด๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘์€ "๋™๊ธฐ์ "์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€์ ์ธ ๋ถ€๋ถ„์œผ๋กœ ์ด ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์ œ์–ด ๊ถŒํ•œ์ด ์žˆ์„ ๋•Œ Javascript ์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์€ DOM์„ ์กฐ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ??

๋‹น์—ฐํ•˜๊ฒŒ๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ 

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌํƒœ "defer"๋ฅผ ๋‹ฌ์•„์„œ ์‚ฌ์šฉ์„ ํ•˜๋˜์ง€ ๋˜๋Š”,

HTML ํŒŒ์ผ์—์„œ Javascript ์ฝ”๋“œ๋ฅผ <body>ํƒœ๊ทธ ํ•˜๋‹จ์— ์œ„์น˜์‹œ์ผœ์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ทผ๋ณธ์ ์ธ ์ด์œ ์ด๋‹ค.