๊ฐ์ธ์ ์ธ ํ์ต์ ์ํด ์ด ๊ณณ ์ ์๋ ์๋ณธ์ ๋ฒ์ญํ ๋ด์ฉ์ ๋๋ค. ์ค์ญ์ด๋ ์ค๋ฅ๊ฐ ๋ณด์ด๋ฉด ์ฃผ์ ๋ง๊ณ Pull request๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ด๋ค ์๊ฒฌ์ด๋ ํ์ํฉ๋๋ค.
...ํ๋ฉด ์๊ธฐ๋ ์ผ
์ด ์ ์ฅ์๋ ๊ณ ์ ์ ์ธ ์ธํฐ๋ทฐ ์ง๋ฌธ์ธ "๋น์ ์ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ google.com์ ์น๊ณ ์ํฐ๋ฅผ ๋๋ฅด๋ฉด ์ด๋ค ์ผ์ด ์๊ธธ๊น์?"์ ๋ํด ๋ตํด๋ณด๊ณ ์ ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์๊ธธ ํ๋ ๋์ ์, ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ํ ์ธ๋ถ์ ์ผ๋ก ์ด ์ง๋ฌธ์ ๋ตํ๊ณ ์ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ์๋ฌด๊ฒ๋ ๋นผ๋จน์ง ์๊ณ ๋ง์ ๋๋ค.
์ด ์ ์ฅ์๋ ๊ณต๋ ์์ ๋ฌผ์ด ๋์ด์ผ ํฉ๋๋ค. ํจ๊ป ํ๊ณ ๋ค๊ณ ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! ๋ถ๋ช ์๋ง์ ๋ํ ์ผ์์ ์ค์๋ค์ด ์์ผ๋, ์ฌ๋ฌ๋ถ์ด ํ์ ๋ณดํ์ฃผ์๊ธธ ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค! Pull request๋ฅผ ๋ณด๋ด์ฃผ์ธ์!
์ด ์ ์๋ฌผ์ Creative Commons Zero ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Table of Contents
- "g"ํค๋ฅผ ๋๋ฅด๋ฉด
- "์ํฐ"ํค๊ฐ ์ ๋ค์ด๊ฐ๋๋ค
- ์ธํฐ๋ฝํธ ๋ฐ์ [ํค๋ณด๋๊ฐ USB๊ฐ ์๋ ๊ฒฝ์ฐ์]
- (Windows์์)
WM_KEYDOWN
๋ฉ์์ง๊ฐ ์ฑ์ผ๋ก ์ ๋ฌ๋์ด์ - (OS X์์)
KeyDown
NSEvent๊ฐ ์ฑ์ผ๋ก ์ ๋ฌ๋์ด์ - (GNU/Linux์์) Xorg ์๋ฒ๊ฐ ํค์ฝ๋๋ฅผ listenํด์.
- URL ํ์ฑํ๊ธฐ
- ๊ฒ์์ด์ผ๊น URL์ผ๊น?
- ํธ์คํธ๋ช ์์ ASCII ์๋ ์ ๋์ฝ๋ ๋ฌธ์์ด ๋ณํ
- HSTS ๋ฆฌ์คํธ ์ ๊ฒ
- DNS ๊ฒ์
- ARP ํ๋ก์ธ์ค
- ์์ผ ์ด๊ธฐ
- TLS handshake
- HTTP ํ๋กํ ์ฝ
- HTTP ์๋ฒ์ ์์ฒญ ์ฒ๋ฆฌ
- ๋ธ๋ผ์ฐ์ ์ ์ด๋ฉด์์
- ๋ธ๋ผ์ฐ์
- HTML ํ์ฑ
- CSS ํด์
- ํ์ด์ง ๋ ๋๋ง
- GPU ๋ ๋๋ง
- ์๋์ฐ ์๋ฒ
- ๋ ๋๋ง ํ์ฒ๋ฆฌ์ ์ฌ์ฉ์์ ์ํด ์ ๋๋ ๋์
"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์ ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ฅผ ์ดํด๋ณด๊ณ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์คํํฉ๋๋ค. ์ด์ ๋ฐ๋ผ์,
์ปค๋์ ์ง์
ํ๊ฒ ๋ฉ๋๋ค.
WM_KEYDOWN
๋ฉ์์ง๊ฐ ์ฑ์ผ๋ก ์ ๋ฌ๋์ด์
(Windows์์) 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
์ด๊ธฐ
๋๋ฌธ์
๋๋ค.
KeyDown
NSEvent๊ฐ ์ฑ์ผ๋ก ์ ๋ฌ๋์ด์
(OS X์์) ์ธํฐ๋ฝํธ ์ ํธ๋ 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.
- ์์ฒญ๋ ๊ฒฝ๋ก/ํ์ด์ง, ์ด ๊ฒฝ์ฐ์๋ - / (ํน์ ํ ๊ฒฝ๋ก/ํ์ด์ง๊ฐ ์์์ผ๋ฉด, / ๊ฐ ๊ธฐ๋ณธ ๊ฒฝ๋ก์ ๋๋ค).
- HTTP ์์ฒญ ๋ฉ์๋ (
- ์๋ฒ๋ 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 ํํ์ด์ง์์๋ ์๋๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ถ๊ฐ์ ์ธ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋ค๊ธฐ๋ ํ๊ณ , ํ์ด์ง ์์ฒด๋ ๋ ์ด์์์ ๋ฐ๊พธ๊ธฐ๋, ์๋ก์ด ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ๊ทธ๋ ค์ฃผ๊ธฐ๋ ํฉ๋๋ค.