• Stars
    star
    170
  • Rank 223,357 (Top 5 %)
  • Language
  • Created over 6 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Korean translation of What-happens-when (https://github.com/alex/what-happens-when)

๊ฐœ์ธ์ ์ธ ํ•™์Šต์„ ์œ„ํ•ด ์ด ๊ณณ ์— ์žˆ๋Š” ์›๋ณธ์„ ๋ฒˆ์—ญํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์˜ค์—ญ์ด๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ณด์ด๋ฉด ์ฃผ์ €๋ง๊ณ  Pull request๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ์–ด๋–ค ์˜๊ฒฌ์ด๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

...ํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ์ผ

์ด ์ €์žฅ์†Œ๋Š” ๊ณ ์ „์ ์ธ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์ธ "๋‹น์‹ ์˜ ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— google.com์„ ์น˜๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์–ด๋–ค ์ผ์ด ์ƒ๊ธธ๊นŒ์š”?"์— ๋Œ€ํ•ด ๋‹ตํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์–˜๊ธธ ํ•˜๋Š” ๋Œ€์‹ ์—, ์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์„ธ๋ถ€์ ์œผ๋กœ ์ด ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ ์ž ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๋นผ๋จน์ง€ ์•Š๊ณ  ๋ง์ž…๋‹ˆ๋‹ค.

์ด ์ €์žฅ์†Œ๋Š” ๊ณต๋™ ์ž‘์—…๋ฌผ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ๊ป˜ ํŒŒ๊ณ ๋“ค๊ณ  ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๋ถ„๋ช… ์ˆ˜๋งŽ์€ ๋””ํ…Œ์ผ์ƒ์˜ ์‹ค์ˆ˜๋“ค์ด ์žˆ์œผ๋‹ˆ, ์—ฌ๋Ÿฌ๋ถ„์ด ํž˜์„ ๋ณดํƒœ์ฃผ์‹œ๊ธธ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! Pull request๋ฅผ ๋ณด๋‚ด์ฃผ์„ธ์š”!

์ด ์ €์ž‘๋ฌผ์€ Creative Commons Zero ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

Table of Contents

"g"ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด

์ด๋ฒˆ ์ ˆ์—์„œ๋Š” ํ‚ค๋ณด๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๋™์ž‘๊ณผ ์šด์˜์ฒด์ œ์˜ ์ธํ„ฐ๋ŸฝํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋ชจ๋“  ๋™์ž‘์„ ์„ค๋ช…ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์ ์€ ์•Œ์•„๋‘์„ธ์š”. ์šฐ์„  ๋‹น์‹ ์ด "g" ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ๋˜๊ณ  ๋ชจ๋“  ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹น์‹ ์ด ๊ฐœ์ธ/์ต๋ช… ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ œ์•ˆ์ด URL ์ฐฝ ์•„๋ž˜์— ๋“œ๋ž๋ฐ•์Šค๋กœ ๋‚˜ํƒ€๋‚˜์ฃ . ๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก์ด๋‚˜ ์ฆ๊ฒจ์ฐพ๊ธฐ์— ๊ธฐ๋ฐ˜ํ•ด ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ "google.com"์„ ์ž…๋ ฅํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ด€์—†์ง€๋งŒ, ์ˆ˜๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ๋‹น์‹ ์ด ์ž…๋ ฅ์„ ๋‹ค ๋งˆ์น˜๊ธฐ ์ „์— ๋™์ž‘ํ•˜๋ฉฐ, ๋งค ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์ œ์•ˆ์ด ์„ ๋ณ„๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ ๋‹น์‹ ์ด ๋‹ค ์น˜๊ธฐ๋„ ์ „์— "google.com"์„ ์ œ์•ˆํ• ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.

"์—”ํ„ฐ"ํ‚ค๊ฐ€ ์™ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค

๋ช…ํ™•ํžˆ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด, ํ‚ค๋ณด๋“œ์˜ ์—”ํ„ฐํ‚ค๊ฐ€ ๋๊นŒ์ง€ ๋ˆŒ๋Ÿฌ์กŒ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์—ฌ๊ธฐ์„œ, ์—”ํ„ฐํ‚ค์— ํ• ๋‹น๋œ ์ „๊ธฐ ํšŒ๋กœ๊ฐ€ (์ง์ ‘์ ์œผ๋กœ๋“  ์ •์ „์‹์œผ๋กœ๋“ ) ๋‹ซํž™๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ ์€ ์–‘์˜ ์ „๋ฅ˜๋ฅผ ํ‚ค๋ณด๋“œ์—์„œ๋ถ€ํ„ฐ ๊ฐ ํ‚ค ์Šค์œ„์น˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋…ผ๋ฆฌ ํšŒ๋กœ ์†Œ์ž์— ํ๋ฅด๋„๋ก ํ•˜๊ณ , ๋น ๋ฅด๊ณ  ๊ฐ„ํ—์ ์ธ ์Šค์œ„์น˜ ์ฐจ๋‹จ์œผ๋กœ ์ธํ•œ ์ „๊ธฐ์  ์žก์Œ์„ ๋””๋ฐ”์šด์‹ฑํ•˜๋ฉฐ, ์‹ ํ˜ธ๋ฅผ ํ‚ค์ฝ”๋“œ ์ •์ˆ˜, ์ด ๊ฒฝ์šฐ์—๋Š” 13์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. ํ‚ค๋ณด๋“œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ณง, ํ‚ค์ฝ”๋“œ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด ์ปดํ“จํ„ฐ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€๊ธˆ์€ ๋Œ€๋ถ€๋ถ„ ์œ ๋‹ˆ๋ฒ„์„ค ์‹œ๋ฆฌ์–ผ ๋ฒ„์Šค (USB) ํ˜น์€ ๋ธ”๋ฃจํˆฌ์Šค ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ณผ๊ฑฐ์—๋Š” PS/2 ํ˜น์€ ADB ์—ฐ๊ฒฐ์—์„œ ํ†ต์šฉ๋˜๋˜ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

USB ํ‚ค๋ณด๋“œ์˜ ๊ฒฝ์šฐ:

  • ํ‚ค๋ณด๋“œ์˜ USB ํšŒ๋กœ ์†Œ์ž๋Š” ์ปดํ“จํ„ฐ USB ํ˜ธ์ŠคํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ•€ 1๋กœ ์ œ๊ณต๋˜๋Š” 5V ์ „์›์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ๋œ ํ‚ค ์ฝ”๋“œ๋Š” ํ‚ค๋ณด๋“œ ๋‚ด๋ถ€ ํšŒ๋กœ ์†Œ์ž๋‚ด์˜ "endpoint"๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ USB ์ปจํŠธ๋กค๋Ÿฌ๋Š” "endpoint"๋ฅผ ๋งค 10ms(ํ‚ค๋ณด๋“œ์— ๋”ฐ๋ผ ์ •์˜๋œ ์ตœ์†Œ๊ฐ’) ์ด๋‚ด์˜ ์‹œ๊ฐ„๋งˆ๋‹ค ํด๋งํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ์–ป์–ด๋ƒ…๋‹ˆ๋‹ค.
  • ์ด ๊ฐ’์€ USB SIE (Serial Interface Engine) ์œผ๋กœ ๋„˜์–ด๊ฐ€ ์ €์ˆ˜์ค€์˜ USB ํ”„๋กœํ† ์ฝœ์— ๋งž๋Š”, ํ•˜๋‚˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ USB ํŒจํ‚ท์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ํŒจํ‚ท๋“ค์€ D+์™€ D- ํ•€ (๊ฐ€์šด๋ฐ ์žˆ๋Š” ๋‘˜) ์„ ์ด์šฉํ•œ ์ฐจ๋™ ์‹ ํ˜ธ๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ 1.5 Mb/s์˜ ์†๋„๋กœ ์ „์†ก๋˜๋Š”๋ฐ, HID (Human Interface Device) ๋””๋ฐ”์ด์Šค๋Š” ๋Š˜ "์ €์† ์žฅ์น˜"๋กœ ๋ถ„๋ฅ˜๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (USB 2.0 compliance).
  • ์ด ์ง๋ ฌ ์‹ ํ˜ธ๋Š” ๊ณง ์ปดํ“จํ„ฐ์˜ ํ˜ธ์ŠคํŠธ USB ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋””์ฝ”๋”ฉ๋˜๊ณ , ์ปดํ“จํ„ฐ์˜ HID (Human Interface Device) ์œ ๋‹ˆ๋ฒ„์„ค ํ‚ค๋ณด๋“œ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„์— ์˜ํ•ด ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ํ‚ค ๊ฐ’์€ ์ด์ œ ์šด์˜ ์ฒด์ œ์˜ ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒ ํ‚ค๋ณด๋“œ์˜ ๊ฒฝ์šฐ (ํ„ฐ์น˜ ์Šคํฌ๋ฆฐ ์žฅ์น˜ ๋“ฑ์— ์žˆ๋Š”):

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

์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ [ํ‚ค๋ณด๋“œ๊ฐ€ USB๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—]

ํ‚ค๋ณด๋“œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ ๋ผ์ธ (IRQ) ๋ฅผ ํ†ตํ•ด ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋Š”๋ฐ, ์ด ๋ผ์ธ์€ ์ธํ„ฐ๋ŸฝํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ (์ •์ˆ˜ ๊ฐ’) ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CPU๋Š” Interrupt Descriptor Table (IDT) ์„ ํ™œ์šฉํ•ด ์ปค๋„์—์„œ ์ œ๊ณต๋œ ํ•จ์ˆ˜๋“ค (์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ) ์— ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ตฌ์š”. ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด, CPU๋Š” IDT์™€ ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ์„œ, ์ปค๋„์— ์ง„์ž…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

(Windows์—์„œ) WM_KEYDOWN ๋ฉ”์‹œ์ง€๊ฐ€ ์•ฑ์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์š”

HID ํŠธ๋žœ์ŠคํฌํŠธ๋Š” ํ‚ค ๋ˆŒ๋ฆผ ์ด๋ฒคํŠธ๋ฅผ HID๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ์˜ ์Šค์บ”์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” KBDHID.sys ๋“œ๋ผ์ด๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์— ์Šค์บ”์ฝ”๋“œ๋Š” VK_RETURN (0x0D)๊ฐ€ ๋˜์ฃ . KBDHID.sys ๋“œ๋ผ์ด๋ฒ„๋Š” KBDCLASS.sys (ํ‚ค๋ณด๋“œ ํด๋ž˜์Šค ๋“œ๋ผ์ด๋ฒ„) ์™€ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ชจ๋“  ํ‚ค๋ณด๋“œ์™€ ํ‚คํŒจ๋“œ ์ž…๋ ฅ์˜ ์•ˆ์ „ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋Š” (์„ค์น˜๋œ ์„œ๋“œํŒŒํ‹ฐ ํ‚ค๋ณด๋“œ ํ•„ํ„ฐ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ ํ›„์—) Win32K.sys ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ผ์€ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ผ์–ด๋‚˜์ฃ .

Win32K.sys ๋Š” ์–ด๋–ค ์ฐฝ์ด ํ™œ์„ฑํ™” ๋ผ ์žˆ๋Š”์ง€๋ฅผ GetForegroundWindow() API๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. ์ด API๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์˜ ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์ œ๊ณตํ•˜๊ฒ ๋„ค์š”. Windows์˜ "message pump"๋Š” ๊ณง, SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam) ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. lParam ์€ ํ‚ค๋ˆŒ๋ฆผ์˜ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ์ž…๋‹ˆ๋‹ค: ๋ฐ˜๋ณต ํšŸ์ˆ˜(์—ฌ๊ธฐ์„  0), ์ง„์งœ ์Šค์บ” ์ฝ”๋“œ (OEM ๋ณ„๋กœ ์ƒ์ดํ•˜์ง€๋งŒ, ๋ณดํ†ต์€ VK_RETURN), ํŠน์ˆ˜ํ‚ค(alt, shift, ctrl ๊ฐ™์€)๊ฐ€ ํ•จ๊ป˜ ๋ˆŒ๋ ธ๋Š”์ง€ (์—ฌ๊ธฐ์„  ์•ˆ ๋ˆŒ๋ ธ์ฃ ), ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์–ด์š”.

Windows์˜ SendMessage API๋Š” ํŠน์ •ํ•œ ์ฐฝ ํ•ธ๋“ค (hWnd) ์˜ ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ, hWnd ์— ํ• ๋‹น๋œ (WindowProc ์ด๋ผ ๋ถˆ๋ฆฌ๋Š”) ์ฃผ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ํ์— ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™” ๋œ ์ฐฝ (hWnd) ์€ ์‹ค์ œ๋กœ ํŽธ์ง‘์„ ์ œ์–ดํ•˜๋ฉฐ ์—ฌ๊ธฐ์„œ์˜ WindowProc ์€ WM_KEYDOWN ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” SendMessage ๋กœ ์ „๋‹ฌ๋œ ์„ธ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ (wParam) ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋Š”๋ฐ์š”, ์‚ฌ์šฉ์ž๊ฐ€ ์—”ํ„ฐํ‚ค๋ฅผ ์ณค๋‹ค๋Š” ๊ฑธ ์•Œ๋ ค์ฃผ๋Š” ๊ฒŒ VK_RETURN ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(OS X์—์„œ) KeyDown NSEvent๊ฐ€ ์•ฑ์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์š”

์ธํ„ฐ๋ŸฝํŠธ ์‹ ํ˜ธ๋Š” I/O Kit kext ํ‚ค๋ณด๋“œ ๋“œ๋ผ์ด๋ฒ„์— ์ธํ„ฐ๋ŸฝํŠธ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ํ•ด๋‹น ์‹ ํ˜ธ๋ฅผ OS X์˜ WindowServer ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌ๋˜๋Š” ํ‚ค ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋กœ์„œ, WindowServer ๋Š” ์–ด๋– ํ•œ ์ ์ ˆํ•œ ๊ณณ (ํ™œ์„ฑํ™” ํ˜น์€ ๋ฆฌ์Šค๋‹ํ•˜๋Š” ๊ณณ๊ณผ ๊ฐ™์€ ๊ณณ) ์—๋ผ๋„ ์ด๋ฒคํŠธ ํ๊ฐ€ ๋“ค์–ด์žˆ๋Š” Mach์˜ ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ฉด ์ด๋ฒคํŠธ๋Š” ์ด ํ์—์„œ, mach_ipc_dispatch ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ์ฝํž™๋‹ˆ๋‹ค. ์ผ๋ จ์˜ ๊ณผ์ •์€ NSApplication ๋ฉ”์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด, NSEventType ์˜ KeyDown ์ด๋ผ๋Š” NSEvent ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

(GNU/Linux์—์„œ) Xorg ์„œ๋ฒ„๊ฐ€ ํ‚ค์ฝ”๋“œ๋ฅผ listenํ•ด์š”.

๊ทธ๋ž˜ํ”ฝ์ด ์ œ๊ณต๋˜๋Š” X ์„œ๋ฒ„ ๋ฅผ ์‚ฌ์šฉํ•  ๋•, X ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ด๋ฒคํŠธ ๋“œ๋ผ์ด๋ฒ„ evdev ๋ฅผ ํ‚ค ๋ˆŒ๋ฆผ ํ™•์ธ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์ฝ”๋“œ๋ฅผ ์Šค์บ”์ฝ”๋“œ๋กœ ๋‹ค์‹œ ๋งตํ•‘ํ•˜๋Š” ๊ฒƒ์€ X ์„œ๋ฒ„ ๊ณ ์œ ์˜ ํ‚ค๋งต๊ณผ ๋ฃฐ์— ๋”ฐ๋ผ ์ด๋ค„์ง€๊ณ ์š”. ํ‚ค ๋ˆŒ๋ฆผ์˜ ์Šค์บ”์ฝ”๋“œ ๋งตํ•‘์ด ์™„๋ฃŒ๋˜๋ฉด, X ์„œ๋ฒ„ ๋Š” ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ์œˆ๋„์šฐ ๊ด€๋ฆฌ์ž (DWM, metacity, i3 ๋“ฑ๋“ฑ) ์— ์ „๋‹ฌํ•˜์—ฌ, ์œˆ๋„์šฐ ๊ด€๋ฆฌ์ž ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ฐฝ์— ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด๊ฒŒ ํ•˜์ฃ . ๋ฌธ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ์ฐฝ์—์„œ๋Š” ๊ทธ๋ž˜ํ”ฝ์„ ํ‘œํ˜„ํ•˜๋Š” API๊ฐ€ ์ ์ ˆํ•œ ํฐํŠธ ๊ธฐํ˜ธ๋ฅผ ์ ์ ˆํ•œ ์„ ํƒ ์˜์—ญ์— ์ฐ์–ด์ค๋‹ˆ๋‹ค.

URL ํŒŒ์‹ฑํ•˜๊ธฐ

  • ์ด์ œ ๋ธŒ๋ผ์šฐ์ €๋Š” URL (์œ ์ผ ์ž์› ์ง€์‹œ์ž) ์„ ๋‹ด๊ณ  ์žˆ๋Š” ์•„๋ž˜์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”:

    • ํ”„๋กœํ† ์ฝœ "http"
      'ํ•˜์ดํผ ํ…์ŠคํŠธ ์ „์†ก ๊ทœ์•ฝ'์„ ์‚ฌ์šฉํ•˜์‹œ์˜ค
    • ์ž์› "/"
      ๋ฉ”์ธ (์ธ๋ฑ์Šค) ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค์‹œ์˜ค

๊ฒ€์ƒ‰์–ด์ผ๊นŒ URL์ผ๊นŒ?

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

ํ˜ธ์ŠคํŠธ๋ช…์—์„œ ASCII ์•„๋‹Œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด ๋ณ€ํ™˜

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ํ˜ธ์ŠคํŠธ๋„ค์ž„์—์„œ a-z, A-Z, 0-9, -, ํ˜น์€ . ์•„๋‹Œ ๋ฌธ์ž๋“ค์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€๊ธˆ์˜ ํ˜ธ์ŠคํŠธ๋ช…์€ google.com ์ด๊ธฐ๋•Œ๋ฌธ์— ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์—†์ง€๋งŒ, ์žˆ์„ ๋•Œ์—๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ URL์—์„œ ํ˜ธ์ŠคํŠธ๋ช… ๋ถ€๋ถ„์— ํ“จ๋‹ˆ์ฝ”๋“œ (Punycode) ์ธ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

HSTS ๋ฆฌ์ŠคํŠธ ์ ๊ฒ€

  • ๋ธŒ๋ผ์šฐ์ €๋Š” "๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ๋“ค์ธ HSTS (HTTP Strict Transport Security)" ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ๋Š” HTTPS๋กœ๋งŒ ์—ฐ๊ฒฐ๋˜๋„๋ก ์š”์ฒญํ•œ ์›น์‚ฌ์ดํŠธ์˜ ๋ชฉ๋ก์ด์ฃ .
  • ์›น์‚ฌ์ดํŠธ๊ฐ€ ๋ชฉ๋ก์— ์žˆ๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์„ HTTP ๋Œ€์‹  HTTPS๋กœ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ์ฒซ ์š”์ฒญ์€ HTTP๋กœ ๋ณด๋‚ด์ง€๊ตฌ์š”. (์›น์‚ฌ์ดํŠธ๊ฐ€ HSTS ๋ชฉ๋ก์— ์—†๋”๋ผ๋„ ์—ฌ์ „ํžˆ HSTS ์ •์ฑ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ์•„๋‘์„ธ์š”. ์‚ฌ์šฉ์ž์˜ ์ฒซ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ HTTPS ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์š”๊ตฌํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋ฐ›๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ํ•˜์ง€๋งŒ, ์ด ๋‹จ์ผ HTTP ์š”์ฒญ์ด ์ž ์žฌ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๊ณต๊ฒฉ (downgrade attack) ์— ์ทจ์•ฝํ•˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ด ๋•Œ๋ฌธ์— HSTS ๋ชฉ๋ก์ด ํ˜„๋Œ€์ ์ธ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

DNS ๊ฒ€์ƒ‰

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„๋ฉ”์ธ์ด ์บ์‹œ์— ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. (ํฌ๋กฌ์—์„œ DNS ์บ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด, chrome://net-internals/#dns ์œผ๋กœ ๊ฐ€๋ณด์„ธ์š”).
  • ๋งŒ์•ฝ ๋ชป ์ฐพ์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฒ€์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด (OS์— ๋”ฐ๋ผ ์ƒ์ดํ•˜์ง€๋งŒ) gethostbyname ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • gethostbyname ์€ DNS๋ฅผ ํ†ตํ•œ ํ˜ธ์ŠคํŠธ๋ช… ํ™•์ธ์„ ์‹œ๋„ํ•˜๊ธฐ ์ „์—, ํ˜ธ์ŠคํŠธ๋ช…์ด ๋กœ์ปฌ์˜ (OS์— ๋”ฐ๋ผ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ) hosts ํŒŒ์ผ์—์„œ ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค.
  • gethostbyname ์ด ์บ์‹œ์™€ hosts ํŒŒ์ผ ๋ชจ๋‘์—์„œ ํ˜ธ์ŠคํŠธ๋ช…์„ ๋ชป ์ฐพ์œผ๋ฉด, ๊ณง ๋„คํŠธ์›Œํฌ ์Šคํƒ์—์„œ ์ •์˜๋œ DNS ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ์ปฌ ๋ผ์šฐํ„ฐ๋‚˜ ์ธํ„ฐ๋„ท ๊ณต๊ธ‰์ž์˜ ์บ์‹œ DNS ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€์ฃ .
  • ๋งŒ์•ฝ DNS ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์„œ๋ธŒ๋„ท์— ์กด์žฌํ•œ๋‹ค๋ฉด ์ด ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” DNS ์„œ๋ฒ„์— ๋Œ€ํ•ด ARP ํ”„๋กœ์„ธ์Šค ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ DNS ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ธŒ๋„ท์— ์กด์žฌํ•œ๋‹ค๋ฉด, ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด IP์— ๋Œ€ํ•ด ARP ํ”„๋กœ์„ธ์Šค ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

ARP ํ”„๋กœ์„ธ์Šค

ARP (์ฃผ์†Œ ๊ฒฐ์ • ํ”„๋กœํ† ์ฝœ, Address Resolution Protocol) ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„คํŠธ์›Œํฌ ์Šคํƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ฒ€์ƒ‰ํ•  ๋ชฉ์ ์ง€ IP์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜, ARP ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ MAC ์ฃผ์†Œ ์—ญ์‹œ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ €, ARP ์บ์‹œ๊ฐ€ ๋ชฉ์ ์ง€ IP์˜ ARP ํ•ญ๋ชฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์บ์‹œ์— ์žˆ๋‹ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ์˜ ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค: ๋ชฉ์ ์ง€ IP = MAC.

ํ•ญ๋ชฉ์ด ARP ์บ์‹œ์— ์—†๋‹ค๋ฉด:

  • ๋ผ์šฐํŠธ ํ…Œ์ด๋ธ”์„ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ชฉ์ ์ง€ IP ์ฃผ์†Œ๊ฐ€ ๋กœ์ปฌ ๋ผ์šฐํŠธ ํ…Œ์ด๋ธ”์˜ ์„œ๋ธŒ๋„ท์— ์กด์žฌํ•˜๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค. ์กด์žฌํ•œ๋‹ค๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ทธ ์„œ๋ธŒ๋„ท์— ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—†๋‹ค๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์šฐ๋ฆฌ ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด์˜ ์„œ๋ธŒ๋„ท์— ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์„ ํƒ๋œ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์˜ MAC ์ฃผ์†Œ๊ฐ€ ๊ฒ€์ƒ‰์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ ˆ์ด์–ด 2 (`OSI ๋ชจ๋ธ`_์—์„œ ๋ฐ์ดํ„ฐ ๋งํฌ ๋ ˆ์ด์–ด) ๋ฅผ ํ†ตํ•ด ARP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค:

ARP Request:

Sender MAC: interface:mac:address:here
Sender IP: interface.ip.goes.here
Target MAC: FF:FF:FF:FF:FF:FF (Broadcast)
Target IP: target.ip.goes.here

์ปดํ“จํ„ฐ์™€ ๋ผ์šฐํ„ฐ ์‚ฌ์ด์— ์–ด๋–ค ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ:

์ง์ ‘ ์—ฐ๊ฒฐ์‹œ:

  • ์ปดํ“จํ„ฐ๊ฐ€ ๋ผ์šฐํ„ฐ์— ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ๋ผ์šฐํ„ฐ๋Š” ARP Reply ๋ฅผ ํšŒ์‹ ํ•ฉ๋‹ˆ๋‹ค.(์•„๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”)

ํ—ˆ๋ธŒ:

  • ์ปดํ“จํ„ฐ๊ฐ€ ํ—ˆ๋ธŒ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด, ํ—ˆ๋ธŒ๊ฐ€ ARP ์š”์ฒญ์„ ๋ชจ๋“  ํฌํŠธ์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ๊ฐ€ ๋™์ผํ•œ "Wire"์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด, ํ—ˆ๋ธŒ๊ฐ€ ARP Reply ๋ฅผ ํšŒ์‹ ํ•˜๊ฒŒ ๋˜์ง€์š”.(์•„๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”)

์Šค์œ„์น˜:

  • ๋งŒ์•ฝ ์ปดํ“จํ„ฐ๊ฐ€ ์Šค์œ„์น˜์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์Šค์œ„์น˜๊ฐ€ ์ž์‹ ์˜ ๋กœ์ปฌ CAM/MAC ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•ด ์–ด๋–ค ํฌํŠธ๊ฐ€ ์ง€๊ธˆ ์ฐพ๊ณ ์žํ•˜๋Š” MAC ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค. ์Šค์œ„์น˜์— ํ•ด๋‹น MAC ์ฃผ์†Œ๊ฐ€ ์—†๋‹ค๋ฉด ARP ์š”์ฒญ์„ ๋ชจ๋“  ํฌํŠธ์— ๋‹ค์‹œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ํ•˜๊ฒŒ ๋˜์ง€์š”.
  • ์Šค์œ„์น˜๊ฐ€ MAC/CAM ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ARP ์š”์ฒญ์„ ํ•ด๋‹น ์ฃผ์†Œ์˜ ํฌํŠธ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๋ผ์šฐํ„ฐ๊ฐ€ ๋™์ผํ•œ "wire"์— ์žˆ๋‹ค๋ฉด, ์Šค์œ„์น˜๊ฐ€ ARP Reply ๋ฅผ ํšŒ์‹ ํ•ฉ๋‹ˆ๋‹ค.(์•„๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”)

ARP Reply:

Sender MAC: target:mac:address:here
Sender IP: target.ip.goes.here
Target MAC: interface:mac:address:here
Target IP: interface.ip.goes.here

์ด์ œ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์šฐ๋ฆฌ DNS ์„œ๋ฒ„๋‚˜ DNS ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด ์ค‘ ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  • 53๋ฒˆ ํฌํŠธ๋Š” DNS ์„œ๋ฒ„์— UDP ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค (๋งŒ์•ฝ ์‘๋‹ต ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด, TCP๊ฐ€ ๋Œ€์‹  ์‚ฌ์šฉ๋˜๊ตฌ์š”).
  • ๋กœ์ปฌ/ISP์˜ DNS ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์žฌ๊ท€์ ์ธ ํƒ์ƒ‰์ด ์ˆ˜ํ–‰๋˜๊ณ  SOA๊ฐ€ ๋„๋‹ฌํ•ด์„œ ํ•ด๋‹ต์ด ๋˜๋Œ์•„์˜ฌ ๋•Œ๊นŒ์ง€ DNS ์„œ๋ฒ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค

์†Œ์ผ“ ์—ด๊ธฐ

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชฉ์ ์ง€ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ๋ฐ›์œผ๋ฉด, ๊ฑฐ๊ธฐ์„œ ํ˜ธ์ŠคํŠธ๋ช…๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ(HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ๊ธฐ๋ณธ๊ฐ’ 80, HTTPS์—์„œ๋Š” 443)๋ฅผ ๋ฝ‘์•„๋‚ด์–ด, socket ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  TCP ์†Œ์ผ“ ์ŠคํŠธ๋ฆผ - AF_INET/AF_INET6 ๊ณผ SOCK_STREAM - ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ์š”์ฒญ์€ ๋จผ์ € TCP ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ œ์ž‘๋˜๋Š” Transport ๋ ˆ์ด์–ด๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ชฉ์ ์ง€ ํฌํŠธ๋Š” ํ—ค๋”์— ๋”ํ•ด์ง€๊ณ , ์ถœ๋ฐœ์ง€ ํฌํŠธ๋Š” ์ปค๋„์˜ ๋™์  ํฌํŠธ ๋ฒ”์œ„ (๋ฆฌ๋ˆ…์Šค์˜ ip_local_port_range) ์—์„œ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.
  • ์ด ์„ธ๊ทธ๋จผํŠธ๋Š” ์ถ”๊ฐ€์ ์ธ IP ํ—ค๋”๋ฅผ ๋ง์”Œ์šฐ๋Š” Network ๋ ˆ์ด์–ด๋กœ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค. ์ง€๊ธˆ์˜ ๋จธ์‹ ๋ฟ ์•„๋‹ˆ๋ผ ๋ชฉ์ ์ง€ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋„ ๋‹ด์•„ ํŒจํ‚ท์„ ๋งŒ๋“ค์ฃ .
  • ํŒจํ‚ท์€ ๊ณง Link ๋ ˆ์ด์–ด์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๋จธ์‹  NIC์˜ MAC ์ฃผ์†Œ์— ๊ฒŒ์ดํŠธ์›จ์ด(๋กœ์ปฌ ๋ผ์šฐํ„ฐ)์˜ MAC ์ฃผ์†Œ๊นŒ์ง€ ํฌํ•จํ•œ ํ”„๋ ˆ์ž„ ํ—ค๋”๊ฐ€ ๋”ํ•ด์ง€์ฃ . ์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ปค๋„์ด ๊ฒŒ์ดํŠธ์›จ์ด์˜ MAC ์ฃผ์†Œ๋ฅผ ๋ชจ๋ฅด๋ฉด, ARP ์ฟผ๋ฆฌ๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ํ•ด์„œ ์ฐพ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ์ง€์ ์—์„œ ํŒจํ‚ท์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ์ „์†ก๋  ์ค€๋น„๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค:

๋Œ€๋ถ€๋ถ„์˜ ์ง‘์ด๋‚˜ ์†Œ๊ทœ๋ชจ ์—…์ฒด์˜ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์—์„œ ํŒจํ‚ท์€ ์ปดํ“จํ„ฐ๋กœ๋ถ€ํ„ฐ, ์•„๋งˆ๋„ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด, ๋ชจ๋Ž€ (MOdulator/DEModulator) ์œผ๋กœ ๋ณด๋‚ด์ง€๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๋””์ง€ํ„ธ ์‹ ํ˜ธ์ธ 1๊ณผ 0์ด, ์ „ํ™”๋‚˜ ์ผ€์ด๋ธ”, ํ˜น์€ ๋ฌด์„  ํ†ต์‹  ์—ฐ๊ฒฐ ๋“ฑ์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ ํ•ฉํ•œ ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์—ฐ๊ฒฐ์˜ ๋ฐ˜๋Œ€ํŽธ์—์„œ๋Š” ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋ฅผ ๋””์ง€ํ„ธ ์‹ ํ˜ธ๋กœ ๋˜๋Œ๋ ค์ฃผ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ชจ๋Ž€์ด ๋‹ค์Œ ๋„คํŠธ์›Œํฌ ๋…ธ๋“œ ๊ฐ€ ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํฐ ์‚ฌ์—…์ฒด๋‚˜ ๋ช‡๋ช‡ ์‹ ์ถ• ๋‹จ์ง€์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ๋„คํŠธ์›Œํฌ ๋…ธ๋“œ ๊นŒ์ง€ ๋””์ง€ํ„ธ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ด‘์ผ€์ด๋ธ” ๋ฐ ๋‹ค์ด๋ ‰ํŠธ ์ด๋”๋„ท ์—ฐ๊ฒฐ์ด ์กด์žฌํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ, ํŒจํ‚ท์€ ๋กœ์ปฌ ์„œ๋ธŒ๋„ท์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์šฐํ„ฐ์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ, ํŒจํ‚ท์€ ์ž์œจ ์‹œ์Šคํ…œ (AS) ์˜ ๋ณด๋” ๋ผ์šฐํ„ฐ๊นŒ์ง€, ๋‹ค๋ฅธ ์ž์œจ ์‹œ์Šคํ…œ๊นŒ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ ๋ชฉ์ ์ง€ ์„œ๋ฒ„๊นŒ์ง€ ์—ฌํ–‰ํ•˜๊ฒŒ ๋˜์ฃ . ์ด ๋•Œ ์ง€๋‚˜์น˜๋Š” ๊ฐ๊ฐ์˜ ๋ผ์šฐํ„ฐ๋Š” IP ํ—ค๋”๋กœ๋ถ€ํ„ฐ ๋ชฉ์ ์ง€ ์ฃผ์†Œ๋ฅผ ์ถ”์ถœํ•ด๋‚ด์„œ ์ ์ ˆํ•œ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€์ง€ ์ด์–ด์ค๋‹ˆ๋‹ค. IP ํ—ค๋” ๋‚ด์˜ Time to live (TTL) ์˜์—ญ์€ ๋ผ์šฐํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ๊ฐ์†Œ๋ฉ๋‹ˆ๋‹ค. TTL ์˜์—ญ์ด 0์ด ๋˜๊ฑฐ๋‚˜ ๋„๋‹ฌํ•œ ๋ผ์šฐํ„ฐ์˜ ํ์— (๋„คํŠธ์›Œํฌ ํ˜ผ์žก๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ) ์ž๋ฆฌ๊ฐ€ ์—†์„ ๋•Œ ํŒจํ‚ท์€ ๋“œ๋ž๋ฉ๋‹ˆ๋‹ค.

์ด ์†ก์ˆ˜์‹  ๋™์ž‘์€ ๋‹ค์Œ์˜ TCP ์—ฐ๊ฒฐ ํ๋ฆ„์„ ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค:

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ (ISN, Initial Sequence Number) ์„ ์„ ํƒํ•˜๊ณ , ISN์„ ์„ค์ •ํ•˜๋Š” ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” SYN ๋น„ํŠธ๊ฐ€ set๋œ ํ•œ ํŒจํ‚ท์„ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ SYN์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ˆ˜์šฉ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:
    • ์„œ๋ฒ„๊ฐ€ ์ž์‹ ์˜ initial sequence number๋ฅผ ๊ณ ๋ฆ…๋‹ˆ๋‹ค
    • ์„œ๋ฒ„๊ฐ€ ISN ์„ ํƒ์ค‘์ž„์„ ์•Œ๋ฆฌ๋Š” SYN ๋น„ํŠธ๋ฅผ setํ•ฉ๋‹ˆ๋‹ค
    • ์„œ๋ฒ„๊ฐ€ (ํด๋ผ์ด์–ธํŠธ ISN + 1) ์„ ACK ์˜์—ญ์— ๋ถ™์ด๊ณ  ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์„ ํ™•์ธํ–ˆ๋‹ค๊ณ  ์•Œ๋ฆฌ๋Š” ACK ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŒจํ‚ท์„ ํ•˜๋‚˜ ๋ณด๋‚ด ์—ฐ๊ฒฐ์„ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค:
    • ์ž์‹ ์˜ ISN์„ ํ•˜๋‚˜ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค
    • ์ˆ˜์‹ ์ž ํ™•์ธ ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค
    • ACK ํ•„๋“œ๋ฅผ setํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ฎ๊ฒจ์ง‘๋‹ˆ๋‹ค:
    • ํ•œ ์ชฝ์—์„œ N๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ด๋ฉด์„œ, SEQ๋ฅผ ํ•ด๋‹น ์ˆซ์ž๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค
    • ๋ฐ˜๋Œ€ํŽธ์ด ๊ทธ ํŒจํ‚ท (ํ˜น์€ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ํŒจํ‚ท) ์„ ๋ฐ›์•˜๋‹ค๊ณ  ์•Œ๋ฆฌ๋ฉด, ์ƒ๋Œ€๋กœ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์— ๋ฐ›์•˜๋˜ ์ˆœ์„œ์™€ ๊ฐ™์€ ACK ๊ฐ’์„ ๋‹ด์•„ ACK ํŒจํ‚ท์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค
  • ์—ฐ๊ฒฐ์„ ๋Š์„ ๋•Œ:
    • ๋‹ซ๋Š” ์ชฝ์ด FIN ํŒจํ‚ท์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค
    • ๋ฐ˜๋Œ€ํŽธ์ด FIN ํŒจํ‚ท์„ ACKํ•˜๊ณ  ์ž์‹ ์˜ FIN์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค
    • ๋‹ซ๋Š” ์ชฝ์ด ๋ฐ˜๋Œ€ํŽธ์˜ FIN์„ ACK์™€ ํ•จ๊ป˜ ํ™•์ธํ•˜๊ณ  ์•Œ๋ฆฝ๋‹ˆ๋‹ค

TLS handshake

  • ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ๊ฐ€ ์ž์‹ ์˜ Transport Layer Security (TLS) ๋ฒ„์ „, ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฉ๋ก ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์••์ถ• ๋ฐฉ์‹์„ ClientHello ๋ฉ”์‹œ์ง€์— ๋‹ด์•„ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ TLS ๋ฒ„์ „, ์„ ํƒํ•œ ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์„ ํƒํ•œ ์••์ถ• ๋ฐฉ์‹ ๊ทธ๋ฆฌ๊ณ  CA (Certificate Authority) ๊ฐ€ ์‚ฌ์ธํ•œ ์„œ๋ฒ„์˜ ๊ณต๊ฐœ ์ธ์ฆ์„œ๋ฅผ ServerHello ๋ฉ”์‹œ์ง€์— ๋‹ด์•„ ๋‹ต์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์„œ๋Š” ๋Œ€์นญํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „๊นŒ์ง€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜๋จธ์ง€ handshake ๊ณผ์ •์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐ์— ์“ธ ๊ณต๊ฐœํ‚ค๋ฅผ ๋‹ด๊ณ  ์žˆ์ฃ .
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์ธก ๋””์ง€ํ„ธ ์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•œ์ง€๋ฅผ, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” CA ๋ชฉ๋ก์„ ํ†ตํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ CA๋ฅผ ํ†ตํ•ด ์‹ ๋ขฐ์„ฑ์ด ํ™•๋ณด๋˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” ์˜์‚ฌ ๋‚œ์ˆ˜ (pseudo-random) ๋ฐ”์ดํŠธ๋ฅผ ์ƒ์„ฑํ•ด ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜๊ตฌ์š”. ์ด ๋‚œ์ˆ˜ ๋ฐ”์ดํŠธ๋Š” ๋Œ€์นญํ‚ค๋ฅผ ์ •ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ๋‚œ์ˆ˜ ๋ฐ”์ดํŠธ๋ฅผ ์ž๊ธฐ ๊ฐœ์ธํ‚ค๋กœ ๋ณตํ˜ธํ™”ํ•ด ๋Œ€์นญ ๋งˆ์Šคํ„ฐํ‚ค ์ƒ์„ฑ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” Finished ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด๋ฉด์„œ, ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ตํ™˜ ๋‚ด์—ญ์„ ํ•ด์‹œํ•œ ๊ฐ’์„ ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋‹ด์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์Šค์Šค๋กœ๋„ ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋„์ฐฉํ•œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋ฉด, ์„œ๋ฒ„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋Œ€์นญํ‚ค๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”ํ•œ Finished ๋ฉ”์‹œ์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ฃ .
  • ์ด์ œ๋ถ€ํ„ฐ TLS ์„ธ์…˜์ด ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ (HTTP) ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

HTTP ํ”„๋กœํ† ์ฝœ

๊ตฌ๊ธ€์ด ๋งŒ๋“  ์›น ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฉด, ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋Œ€์‹ , ์„œ๋ฒ„์—๊ฒŒ HTTP์—์„œ SPDY๋กœ "์—…๊ทธ๋ ˆ์ด๋“œ"ํ•  ๊ฒƒ์„ ํ˜‘์ƒํ•ด๋ด…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ SPDY๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  HTTP๋งŒ ์“ด๋‹ค๋ฉด, ์„œ๋ฒ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋‚ด์ฃ :

GET / HTTP/1.1
Host: google.com
Connection: close
[other headers]

[other headers] ๋ถ€๋ถ„์€ HTTP ์‚ฌ์–‘์— ๋”ฐ๋ผ ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ณ  ๊ฐ๊ฐ ์ƒˆ ์ค„๋กœ ๋‚˜๋‰˜๋Š” ์ผ๋ จ์˜ ํ‚ค-๊ฐ’ ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. (์ด ๋ถ€๋ถ„์€ ์‚ฌ์šฉ๋œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP ์ŠคํŽ™์„ ๋ฒ—์–ด๋‚˜๋Š” ์–ด๋– ํ•œ ๋ฒ„๊ทธ๋„ ์—†์„ ๋•Œ๋ฅผ ๊ฐ€์ •ํ•ด์š”. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP/1.1 ์„ ์“ด๋‹ค๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ธ๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ์—” Host ํ—ค๋”๊ฐ€ ์š”์ฒญ์— ํฌํ•จ๋˜์ง€ ์•Š๊ณ  GET ์š”์ฒญ์— ๋ช…์‹œ๋œ ๋ฒ„์ „์ด HTTP/1.0 ํ˜น์€ HTTP/0.9 ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. )

HTTP/1.1์€ ์†ก์‹ ์ž์ธก์—์„œ ์‘๋‹ต์„ ๋ฐ›์€ ์งํ›„์— ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ๊ฒƒ์ด๋ผ๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด "close"๋ผ๋Š” ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์ฒ˜๋Ÿผ ๋ง์ด์ฃ .

Connection: close

์˜๊ตฌ ์ ‘์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” HTTP/1.1 ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ˜๋“œ์‹œ "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ๊ณผ ํ—ค๋”๋ฅผ ๋ณด๋‚ธ ํ›„์—, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•˜๋‚˜์˜ ๋นˆ ์ค„์„ ์„œ๋ฒ„์— ๋ณด๋‚ด ์š”์ฒญ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๋ณด๋‚ด์กŒ์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์š”์ฒญ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ์™€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜ ๋‹ต์‹ ์œผ๋กœ ์‘๋‹ตํ•˜์ฃ :

200 OK
[response headers]

๋นˆ ์ค„์„ ํ•˜๋‚˜ ๋ถ™์ธ ๋’ค, www.google.com ์˜ HTML ๋ณธ๋ฌธ์„ ํŽ˜์ด๋กœ๋“œ์— ๋‹ด์•„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๊ณง ์—ฐ๊ฒฐ์„ ๋Š๊ฑฐ๋‚˜, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ํ—ค๋”์— ์š”์ฒญ์ด ์žˆ์—ˆ์„ ์‹œ, ์ถ”๊ฐ€์ ์ธ ์š”์ฒญ์„ ์œ„ํ•ด ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด๋‘ก๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด๋‚ธ HTTP ํ—ค๋”์—, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณด๋ƒˆ๋˜ ํŒŒ์ผ์ด ๋ธŒ๋ผ์šฐ์ €์— ์บ์‹œ๋˜์–ด ์žˆ๊ณ  ๊ทธ ๋’ค๋กœ ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ํŒ๋‹จ์„ ๋‚ด๋ฆด ๋งŒํผ ์ถฉ๋ถ„ํ•œ ์ •๋ณด (์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ETag ํ—ค๋”๋ฅผ ํฌํ•จ์‹œ์ผฐ๋‹ค๋“ ์ง€) ๊ฐ€ ๋‹ด๊ฒจ ์žˆ์—ˆ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์‘๋‹ตํ•  ์ˆ˜๋„ ์žˆ์–ด์š”:

304 Not Modified
[response headers]

ํŽ˜์ด๋กœ๋“œ ์—†์ด, ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž์ฒด ์บ์‹œ์—์„œ HTML ํผ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ง์ด์ฃ .

HTML์„ ํŒŒ์‹ฑํ•œ ํ›„์—๋Š”, ๋ธŒ๋ผ์šฐ์ € (๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„) ๊ฐ€ ์ด ๊ณผ์ •์„ HTML ํŽ˜์ด์ง€์—์„œ ์ฐธ์กฐ๋˜๋Š” ๋ชจ๋“  ์ž์› (์ด๋ฏธ์ง€, CSS, favicon.ico, ๊ธฐํƒ€ ๋“ฑ๋“ฑ) ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์ด GET / HTTP/1.1 ๋Œ€์‹  GET /$(URL relative to www.google.com) HTTP/1.1 ์ด ๋œ๋‹ค๋Š” ๊ฒƒ๋งŒ ๋นผ๊ณ  ๋ง์ž…๋‹ˆ๋‹ค.

HTML์ด www.google.com ์ด ์•„๋‹Œ ๋„๋ฉ”์ธ์˜ ์ž์›์„ ์ฐธ์กฐํ•  ๋•, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์„ ํ™•์ •ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ๋˜๋Œ์•„๊ฐ€ ํ•ด๋‹น ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์—ฌ๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •๋“ค์„ ๋ฐŸ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์— ๋“ค์–ด์žˆ๋Š” Host ํ—ค๋”๋Š” google.com ๋Œ€์‹  ์ ๋‹นํ•œ ์„œ๋ฒ„ ์ด๋ฆ„์œผ๋กœ ์„ค์ •๋˜๊ฒ ์ฃ .

HTTP ์„œ๋ฒ„์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ

HTTPD (HTTP ๋ฐ๋ชฌ) ์„œ๋ฒ„๋Š” ์„œ๋ฒ„์ธก์—์„œ ์š”์ฒญ/์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ HTTPD ์„œ๋ฒ„๋Š” ๋ฆฌ๋ˆ…์Šค์šฉ์ธ Apache๋‚˜ nginx ๊ทธ๋ฆฌ๊ณ  ์œˆ๋„์šฐ์šฉ์ธ IIS๊ฐ€ ์žˆ์ฃ .

  • HTTPD (HTTP ๋ฐ๋ชฌ) ์€ ์š”์ฒญ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋‹ค์Œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค๋กœ ์ชผ๊ฐœ๋Š”๋ฐ:
    • HTTP ์š”์ฒญ ๋ฉ”์†Œ๋“œ (GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, ํ˜น์€ TRACE ์ค‘ ํ•˜๋‚˜). ์ฃผ์†Œ์ฐฝ์— URL์„ ์ง์ ‘ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ์—๋Š”, GET ์ด๊ฒ ๊ตฌ์š”.
    • ๋„๋ฉ”์ธ, ์ด ๊ฒฝ์šฐ์—๋Š” - google.com.
    • ์š”์ฒญ๋œ ๊ฒฝ๋กœ/ํŽ˜์ด์ง€, ์ด ๊ฒฝ์šฐ์—๋Š” - / (ํŠน์ •ํ•œ ๊ฒฝ๋กœ/ํŽ˜์ด์ง€๊ฐ€ ์—†์—ˆ์œผ๋ฉด, / ๊ฐ€ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค).
  • ์„œ๋ฒ„๋Š” google.com์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„์— ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” google.com์ด GET ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค (IP, ์ธ์ฆ, ๊ธฐํƒ€ ๋“ฑ๋“ฑ์„ ํ†ตํ•ด์„œ์š”).
  • ์„œ๋ฒ„์— ๋‹ค์‹œ์“ฐ๊ธฐ ๋ชจ๋“ˆ์ด ์„ค์น˜๋ผ์žˆ์œผ๋ฉด (Apache์˜ mod_rewrite ํ˜น์€ IIS์˜ URL Rewrite๊ฐ™์€). ๋ฐ›์€ ์š”์ฒญ์„ ์ง€์ •๋œ ๊ทœ์น™ ์ค‘ ํ•˜๋‚˜์— ์—ฐ๊ฒฐ์‹œํ‚ค๋ ค ํ•˜์ฃ . ์—ฐ๊ฒฐ ๊ทœ์น™์ด ๋ฐœ๊ฒฌ๋˜๋ฉด, ์„œ๋ฒ„๋Š” ๊ทธ ๋ฃฐ๋กœ ์š”์ฒญ์„ ๋‹ค์‹œ์“ฐ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋Œ€์‘๋˜๋Š” ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, ์šฐ๋ฆฌ ์ผ€์ด์Šค์—์„œ๋Š” "/"๊ฐ€ ๋ฉ”์ธ ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ธ๋ฑ์Šค ํŒŒ์ผ๋กœ ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค (์ด๊ฑธ ๋ฎ์–ด์“ธ ๋•Œ๋„ ์žˆ์ง€๋งŒ, ์ด๊ฒŒ ๊ฐ€์žฅ ํ”ํ•œ ๋ฐฉ์‹์ด์—์š”).
  • ์„œ๋ฒ„๋Š” ๊ฐ€์ ธ์˜จ ํŒŒ์ผ์„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๊ธ€์ด PHP ์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„๋Š” ์ธ๋ฑ์Šค ํŒŒ์ผ์„ ํ•ด์„ํ•˜๋Š” ๋ฐ PHP ๋ฅผ ์“ธ ๊ฒƒ์ด๊ณ , ๊ฒฐ๊ณผ๋ฌผ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ˜๋ ค๋ณด๋‚ด๊ฒ ์ฃ .

๋ธŒ๋ผ์šฐ์ €์˜ ์ด๋ฉด์—์„œ

์„œ๋ฒ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ž์› (HTML, CSS, JS, ์ด๋ฏธ์ง€, ๊ธฐํƒ€ ๋“ฑ๋“ฑ) ์„ ์ œ๊ณตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์•„๋ž˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  • ํŒŒ์‹ฑ - HTML, CSS, JS
  • ๋ Œ๋”๋ง: DOM ํŠธ๋ฆฌ ์ƒ์„ฑ โ†’ ํŠธ๋ฆฌ ๋ Œ๋”๋ง โ†’ ๋ Œ๋”๋ง ๋œ ํŠธ๋ฆฌ ๋ฐฐ์น˜ โ†’ ๋ Œ๋”๋ง ๋œ ํŠธ๋ฆฌ ์ƒ‰์น 

๋ธŒ๋ผ์šฐ์ €

๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹น์‹ ์ด ๊ณ ๋ฅธ ์›น ์ž์›์„, ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ž์›์€ ๋ณดํ†ต HTML ํŒŒ์ผ์ด์ง€๋งŒ, PDF๋‚˜ ์ด๋ฏธ์ง€, ํ˜น์€ ๋‹ค๋ฅธ ํƒ€์ž…์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์›์˜ ์œ„์น˜๋Š” ์œ ์ €๊ฐ€ ๋ช…์‹œํ•œ URI (ํ†ตํ•ฉ ์ž์› ์‹๋ณ„์ž Uniform Resource Identifier) ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ตฌ์š”.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ํ•ด์„ํ•˜๊ณ  ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์€ HTML๊ณผ CSS ์ŠคํŽ™์— ๋ช…์‹œ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ŠคํŽ™๋“ค์€ W3C (World Wide Web Consortium) ๊ธฐ๊ตฌ๊ฐ€ ์œ ์ง€ํ•˜๋Š”๋ฐ, ์ด ๊ณณ์ด ๋ฐ”๋กœ ์›น ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ์„œ๋กœ ์œ ์‚ฌํ•œ ์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ์š”์†Œ๋“ค์€:

  • URI๋ฅผ ์ ๋Š” ์ฃผ์†Œ์ฐฝ
  • ๋’ค๋กœ ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ๋ฒ„ํŠผ
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ธฐ๋Šฅ
  • ํ˜„์žฌ ๋ฌธ์„œ๋ฅผ ์ƒˆ๋กœ๊ณ ์น˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ์ƒˆ๋กœ๊ณ ์นจ๊ณผ ๋ฉˆ์ถค ๋ฒ„ํŠผ
  • ๋‹น์‹ ์˜ ํ™ˆํŽ˜์ด์ง€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํ™ˆ ๋ฒ„ํŠผ

๋ธŒ๋ผ์šฐ์ €์˜ High Level Structure

๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌ์„ฑ์š”์†Œ๋Š”: The components of the browsers are:

  • ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค: ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ฃผ์†Œ์ฐฝ, ๋’ค๋กœ/์•ž์œผ๋กœ ๋ฒ„ํŠผ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฉ”๋‰ด ๋“ฑ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š” ์ฐฝ์„ ์ œ์™ธํ•œ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ด์ฃ .
  • ๋ธŒ๋ผ์šฐ์ € ์—”์ง„: ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์€ UI์™€ ๋ Œ๋”๋ง ์—”์ง„ ์‚ฌ์ด์— ์ผ์–ด๋‚˜๋Š” ์ผ์„ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ Œ๋”๋ง ์—”์ง„: ๋ Œ๋”๋ง ์—”์ง„์€ ์š”์ฒญ๋œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„์„ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งŒ์•ฝ ์š”์ฒญ๋œ ๋‚ด์šฉ์ด HTML์ด๋ฉด, ๋ Œ๋”๋ง ์—”์ง„์€ HTML๊ณผ CSS๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์ฒ˜๋ฆฌ๋œ ๋‚ด์šฉ์„ ํ™”๋ฉด์— ๋„์›Œ์ค๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํ‚น: ๋„คํŠธ์›Œํ‚น์€ HTTP์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„, ํ”Œ๋žซํผ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋ฅผ ํ™œ์šฉํ•ด ํ”Œ๋žซํผ-๋…๋ฆฝ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ๋’ค์—์„œ ์ฒ˜๋ฆฌํ•˜์ฃ .
  • UI ๋ฐฑ์—”๋“œ: UI ๋ฐฑ์—”๋“œ๋Š” ์ฝค๋ณด๋ฐ•์Šค๋‚˜ ์ฐฝ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์“ฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฑ์—”๋“œ๋Š” ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ํฌ๊ด„์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋…ธ์ถœ์‹œํ‚ต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์šด์˜ ์ฒด์ œ์˜ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด์„œ์š”.
  • JavaScript ์—”์ง„: JavaScript ์—”์ง„์€ JavaScript ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ: ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋Š” ์œ ์ง€๊ฐ€ ๋˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฟ ํ‚ค๊ฐ™์€ ๊ฐ–๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ฑฐ๋“ ์š”. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋˜ localStorage์™€ IndexedDB, WebSQL, ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

HTML ํŒŒ์‹ฑ

๋ Œ๋”๋ง ์—”์ง„์€ ๋„คํŠธ์›Œํ‚น ๊ณ„์ธต์—์„œ ์š”์ฒญํ•œ ๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ๋ฐ›์•„์˜ค๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต 8kB ๋ฉ์–ด๋ฆฌ๋กœ ์ด๋ค„์ง€์ฃ .

HTML ํŒŒ์„œ์˜ ์ฃผ๋œ ์—ญํ• ์€ HTML ๋งˆํฌ์—…์„ ํŒŒ์Šค ํŠธ๋ฆฌ๋กœ ๋ถ„์„ํ•ด๋‚ด๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‚˜์˜จ ํŠธ๋ฆฌ ("ํŒŒ์Šค ํŠธ๋ฆฌ parse tree") ๋Š” DOM ์š”์†Œ์™€ ์†์„ฑ ๋…ธ๋“œ์˜ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค. DOM์€ Document Object Mode์˜ ์ค„์ž„๋ง์ด๊ณ ์š”. ์ด ์นœ๊ตฌ๋Š” HTML ๋ฌธ์„œ์™€ HTML ์š”์†Œ๋ฅผ JavaScript ๊ฐ™์€ ์™ธ๋ถ€ ์š”์†Œ์™€ ์ด์–ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ์ฒด ํ‘œํ˜„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋Š” "Document" ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ๋ชจ๋“  ์กฐ์ž‘๋ณด๋‹ค ์•ž์„œ, DOM์€ ๋งˆํฌ์—…๊ณผ ๊ฑฐ์˜ ์ผ๋Œ€์ผ์ธ ๊ด€๊ณ„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

ํŒŒ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜

HTML์€ ์ผ๋ฐ˜์ ์ธ ํƒ‘-๋‹ค์šด์ด๋‚˜ ๋ฐ”ํ…€-์—… ๋ฐฉ์‹์˜ ํŒŒ์„œ๋กœ๋Š” ๋ถ„์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š”:

  • ๊ด€๋Œ€ํ•œ ์–ธ์–ด์  ํŠน์„ฑ.
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ํ”ํžˆ ์•Œ๋ ค์ง„, ์ž˜๋ชป๋œ HTML๋“ค์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ „ํ†ต์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์šฉ์ธํ•ด์™”๋‹ค๋Š” ์‚ฌ์‹ค.
  • ํŒŒ์‹ฑ ๊ณผ์ •์€ ์žฌ์ง„์ž… ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ, ์†Œ์Šค๋Š” ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ๋ณ€ํ•˜์ง€ ์•Š์ง€๋งŒ, HTML์—์„œ๋Š”, ๋™์  ์ฝ”๋“œ (์˜ˆ๋ฅผ ๋“ค์–ด document.write() ํ˜ธ์ถœ์„ ๋‹ด๊ณ  ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ์š”์†Œ) ๊ฐ€ ์ถ”๊ฐ€์ ์ธ ํ† ํฐ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์–ด์„œ, ํŒŒ์‹ฑ ๊ณผ์ •์ด ์‹ค์ œ๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ํŒŒ์‹ฑ ๊ธฐ์ˆ ์„ ์“ธ ์ˆ˜ ์—†์œผ๋‹ˆ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž„์˜์˜ ํŒŒ์„œ๋ฅผ ํ™œ์šฉํ•ด HTML์„ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ HTML5 ์ŠคํŽ™์— ์ƒ์„ธํžˆ ์„œ์ˆ ๋ผ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‘ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: ํ† ํฐํ™”์™€ ํŠธ๋ฆฌ ์ƒ์„ฑ์ด์ฃ .

ํŒŒ์‹ฑ์ด ๋๋‚œ ํ›„์˜ ๋™์ž‘

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์— ๋งํฌ๋ผ์žˆ๋Š” ์™ธ๋ถ€ ์ž์› (CSS, ์ด๋ฏธ์ง€, JavaScript ํŒŒ์ผ, ๊ธฐํƒ€ ๋“ฑ๋“ฑ) ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ๋ฌธ์„œ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ ์ค‘์ด๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด๋‘๊ณ  "deferred" ๋ชจ๋“œ์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค: ๋ฐ˜๋“œ์‹œ ๋ฌธ์„œ๋ฅผ ๋ถ„์„ํ•œ ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์ด์ฃ . ๋ฌธ์„œ์˜ ์ƒํƒœ๋Š” "complete" ์œผ๋กœ ์„ค์ •๋˜๊ณ  "load" ์ด๋ฒคํŠธ๊ฐ€ ์ด‰๋ฐœ๋ฉ๋‹ˆ๋‹ค.

HTML ํŽ˜์ด์ง€์— "์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ๋ฒ•"์ด๋ผ๋Š” ์—๋Ÿฌ๋Š” ์ ˆ๋Œ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋– ํ•œ ๋‚ด์šฉ์ด๋“  ๊ณ ์น˜๊ณ  ๋„˜์–ด๊ฐ€๋‹ˆ๊นŒ์š”.

CSS ํ•ด์„

  • <style> ํƒœ๊ทธ ๋‚ด์šฉ๊ณผ, style ์†์„ฑ๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋Š” CSS ํŒŒ์ผ๋“ค์„ "CSS lexical and syntax grammar" ๋ฅผ ํ™œ์šฉํ•ด ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ๊ฐ์˜ CSS ํŒŒ์ผ์€ Stylesheet object ๋กœ ํŒŒ์‹ฑ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๊ฐ ๊ฐ์ฒด๋Š” selector ๋ฐ CSS ๋ฌธ๋ฒ•์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ ํ•จ๊ป˜ CSS ๊ทœ์น™๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS ํŒŒ์„œ๋Š” ํŠน์ •ํ•œ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์‚ฌ์šฉ๋์„ ๊ฒฝ์šฐ์— ํƒ‘-๋‹ค์šด์ด๋‚˜ ๋ฐ”ํ…€-์—…๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ๋ Œ๋”๋ง

  • DOM ๋…ธ๋“œ๋ฅผ ํ›‘๊ณ , ๊ฐ ๋…ธ๋“œ์˜ CSS ์Šคํƒ€์ผ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋ฉด์„œ 'ํ”„๋ ˆ์ž„ ํŠธ๋ฆฌ'๋‚˜ '๋ Œ๋” ํŠธ๋ฆฌ' ๋งŒ๋“ค์–ด์š”.
  • ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๋„ˆ๋น„๋ฅผ ๋”ํ•ด 'ํ”„๋ ˆ์ž„ ํŠธ๋ฆฌ' ๋‚ด ๊ฐ ๋…ธ๋“œ์˜ ์„ ๋ณ„๋œ ๋„ˆ๋น„๋ฅผ ๊ฑฐ๊พธ๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๋…ธ๋“œ์˜ ์ˆ˜ํ‰ ์—ฌ๋ฐฑ, ๊ฒฝ๊ณ„, ๊ทธ๋ฆฌ๊ณ  ํŒจ๋”ฉ๋„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„ˆ๋น„๋ฅผ ์ž์‹๋“ค์—๊ฒŒ ํ• ๋‹นํ•˜๋ฉด์„œ ์œ„์—์„œ ์•„๋ž˜๋กœ ์‹ค์ œ ๋„ˆ๋น„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ž ๋ž˜ํ•‘์„ ์ ์šฉํ•˜๊ณ  ์ž์‹ ๋…ธ๋“œ์˜ ๋†’์ด, ๊ทธ๋ฆฌ๊ณ  ๋…ธ๋“œ์˜ ์—ฌ๋ฐฑ, ๊ฒฝ๊ณ„, ํŒจ๋”ฉ์„ ๋”ํ•ด ๊ฐ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ ๊ฑฐ๊พธ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ์˜ ์ขŒํ‘œ๋ฅผ ์œ„์—์„œ ๊ณ„์‚ฐ๋œ ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋ฝ‘์•„๋ƒ…๋‹ˆ๋‹ค.
  • ๋” ๋ณต์žกํ•œ ๊ณผ์ •์€ ์š”์†Œ๋“ค์ด float ์ด๊ฑฐ๋‚˜, absolutely ํ˜น์€ relatively ์œผ๋กœ ์œ„์น˜ํ•ด์žˆ์„ ๋•Œ์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ๋ณต์žกํ•œ ํŠน์„ฑ์ด ์“ฐ์ผ ๋•Œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. http://dev.w3.org/csswg/css2/ ์™€ http://www.w3.org/Style/CSS/current-work ์—์„œ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ค์–ด ํŽ˜์ด์ง€ ๋‚ด ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ทธ๋ฃน์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™” ๋  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์‹œ-๋ž˜์Šคํ„ฐํ™” ๋˜์ง€ ์•Š๋Š”์ง€ ์„œ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„/๋ Œ๋” ๊ฐ์ฒด๋Š” ๋ ˆ์ด์–ด์— ๋ฐฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€์˜ ๊ฐ ๋ ˆ์ด์–ด๋ฅผ ์œ„ํ•ด ํ…์Šค์ณ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ ˆ์ด์–ด์˜ ํ”„๋ ˆ์ž„/๋ Œ๋” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๋ฉฐ ํ•ด๋‹น ๋ ˆ์ด์–ด์˜ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ CPU์— ์˜ํ•ด ๋ž˜์Šคํ„ฐํ™” ํ•˜๊ฑฐ๋‚˜ D2D/SkiaGL์„ ํ™œ์šฉํ•ด GPU์— ์ง์ ‘ ๊ทธ๋ฆฌ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์˜ ๋ชจ๋“  ๊ณผ์ •์€ ์ตœ๊ทผ์— ์›น ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์žฌํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์–ด์„œ, ์ดํ›„์˜ ๋ณ€ํ™”์— ๋Œ€ํ•ด์„œ๋Š” ์ ์€ ๋…ธ๋ ฅ์ด ๋“ญ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ๋ ˆ์ด์–ด๋Š” ํ•ฉ์„ฑ ๊ณผ์ •์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๊ฑฐ๊ธฐ์—์„œ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋‚˜ iframe ๊ทธ๋ฆฌ๊ณ  ์• ๋“œ์˜จ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์‹œ๊ฐ ์š”์†Œ๋“ค๊ณผ ํ•ฉ์ณ์ง‘๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ๋ ˆ์ด์–ด ์œ„์น˜๊ฐ€ ๊ณ„์‚ฐ๋˜๊ณ  ํ•ฉ์„ฑ ๋ช…๋ น์ด Direct3D/OpenGL ๋“ฑ์„ ํ†ตํ•ด ๋ฐœํ–‰๋ฉ๋‹ˆ๋‹ค. GPU ๋ช…๋ น ๋ฒ„ํผ๋Š” ๋น„๋™๊ธฐ์  ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋น„์›Œ์ง€๊ณ  ํ”„๋ ˆ์ž„์€ ์œˆ๋„์šฐ ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

GPU ๋ Œ๋”๋ง

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

์œˆ๋„์šฐ ์„œ๋ฒ„

๋ Œ๋”๋ง ํ›„์ฒ˜๋ฆฌ์™€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์œ ๋„๋œ ๋™์ž‘

๋ Œ๋”๋ง์ด ๋๋‚˜๋ฉด, ํŠน์ •ํ•œ ์ ˆ์ฐจ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (Google Doodle ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ™์€) ํ˜น์€ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ (์š”์ฒญ์„ ๊ฒ€์ƒ‰์ฐฝ์— ์น˜๊ณ  ์ œ์•ˆ์„ ๋ฐ›๋Š” ๋“ฑ) ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๋Š” JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Flash๋‚˜ Java๊ฐ€ ์‹คํ–‰๋˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ง€๊ธˆ ๋‹ค๋ฃจ๋Š” Google ํ™ˆํŽ˜์ด์ง€์—์„œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ์ถ”๊ฐ€์ ์ธ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋งŒ๋“ค๊ธฐ๋„ ํ•˜๊ณ , ํŽ˜์ด์ง€ ์ž์ฒด๋‚˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ฐ”๊พธ๊ธฐ๋„, ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ๊ทธ๋ ค์ฃผ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.