โ[ํจ์คํธ์บ ํผ์ค] ์น ๊ฐ๋ฐ ๊ฐ์ 1์ฃผ์ฐจ: ํ๋ฉด๋ง๋ค๊ธฐโ ๊ฐ์ ์๊ฐ์ ์์ํ๋คโ๏ธ
์ฒซ ๊ฐ์๋ 1์ฃผ์ฐจ์ ๋ฐฐ์ธ ๊ฒ๋ค์ ๋ํด์ ์๋ ค์ฃผ์๊ธฐ ์ํด โ์น์ฌ์ดํธ์ ๊ตฌ์ฑ์๋ฆฌโ์ ๋ํด ๊ฐ๋จํ ๋จผ์ ์ค๋ช
ํด์ฃผ์
จ๋ค.
์์ผ๋ก ๋ฐฐ์ธ HTML, CSS, Javascript๋ก ์น ํ์ด์ง๋ฅผ ๋ง๋ค๋ฉด์ ๋ฌด์ํ ์ ์๋ ๊ถ๊ธ์ฆ!
๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๋ธ๋ผ์ฐ์ ์์ ํด์ํ๊ณ ๋ด ์๋๋๋ก ์์๊ฒ ๋ง๋ค์ด์ค๊น?
๋ง์ ๋ถ๋ค์ ์ ๋ฆฌํด์ฃผ์ ๋๋ถ์ ์ดํดํ ์ ์์๊ณ (์๋์ ๊ฐ์ฌ...!) ํ๋จ์ ์ถ์ฒ๋ฅผ ๋ฐํ๋ฉฐ
์ดํดํ ๋ถ๋ถ์ ๋ค์ ํ๋ฒ ์ค์ค๋ก ์ ๋ฆฌํด๋ณด์๋ค.
์น ๋ธ๋ผ์ฐ์ ๋?
์น ๋ธ๋ผ์ฐ์ ๋ ์น ์๋ฒ์์ ์ด๋ํ๋ฉฐ ์๋ฐฉํฅ์ผ๋ก ํต์ ํ๊ณ HTML ๋ฌธ์๋ ํ์ผ์ ์ถ๋ ฅํ๋ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI) ๊ธฐ๋ฐ์ ์์ฉ ์ํํธ์จ์ด์ด๋ค. (์ถ์ฒ: ์ํค๋ฐฑ๊ณผ)
(๊ฐ๋ ๊ณต๋ถ ์ด๋ฐ์๋ ์ดํด๋์ง ์๋ ๋จ์ด๋ค์ด ๊ฐ๋ ๊ณต๋ถ๋ฅผ ๋์ฑ ์ด๋ ต๊ฒ ํ๋ ๊ฒ ๊ฐ๋ค๐ฅฒ)
1 - 1) ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋?
๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI): ์ฌ์ฉ์๊ฐ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ถ๋ ฅ ๋ฑ์ ๊ธฐ๋ฅ์ ์๊ธฐ ์ฌ์ด ์์ด์ฝ ๋ฐ์์ ๊ทธ๋ํฝ์ผ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค. (์ถ์ฒ: ์ํค๋ฐฑ๊ณผ)
1 - 2) ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ฐ๋๋๋ ๊ฐ๋ ์?
๋ฌธ์ ์ ์ ์ธํฐํ์ด์ค(CUI(Character User Interface) โ CLI (Command Line Interface)): ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ด์ ํ์ด๋ฉฐ, ๋ช ๋ น์ด ์ธํฐํ์ด์ค๋ ํ ์คํธ ํฐ๋ฏธ๋์ ํตํด ์ฌ์ฉ์์ ์ปดํจํฐ๊ฐ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
- ์ปค๋งจ๋(Command): ์ปดํจํฐ๋ก ์์คํ ์ด๋ ์ฅ์น์ ๋ํ์ฌ ํน์ ๊ธฐ๋ฅ์ ์คํ์ ์ง์ํ๊ธฐ ์ํ ์ ๋ณด๋ ์ ํธ.
1 - 3) GUI์ CUI(CLI)์์ ์ฐจ์ด์ ?
์ฆ, ์ฌ์ฉ์์ ์ปดํจํฐ๊ฐ ์ํธ์์ฉํ๋ ๋ฐฉ์์์ ๊ทธ๋ํฝ์ ์ฌ์ฉํ๋์ง, ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋์ง์ ์ฐจ์ด์ด๋ค. ๋ํ์ ์ธ ์์๋ก DB ์กฐํ๋ฅผ ์ํด GUI ํ๋ก๊ทธ๋จ์ ์ผ์ ๋์ ๋ช ๋ น์ด ์ธํฐํ์ด์ค๋ฅผ ์ผ์ ๋์ ์ฐจ์ด์ด๋ค.
1 - 4) ๋ธ๋ผ์ฐ์ ์ ์ข ๋ฅ
๊ตฌ๊ธ ํฌ๋กฌ, ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ํ์ดํญ์ค, ์ฌํ๋ฆฌ, ์คํ๋ผ, ๋ค์ด๋ฒ ์จ์ผ ๋ฑ์ด ์๋ค.
์น ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ
์น ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์ ํํ ์์์ ์๋ฒ์ ์์ฒญํ๊ณ ๋ธ๋ผ์ฐ์ ์ ํ์ํ๋ ์ญํ ์ ํ๋ค.
์น ํ์คํ ๊ธฐ๊ตฌ์ธ W3C(World Wide Web Consortium)์์ HTML, CSS ๋ช ์ธ๋ฅผ ์ง์ ํ๊ณ , ๊ฐ ๋ธ๋ผ์ฐ์ ๋ ํด๋น ๋ช ์ธ์ ๋ฐ๋ผ HTML ํ์ผ์ ํด์ํด์ ํ์ํ๋ค.
๋ ๋๋ง ์
4 - 1) ์ ๋ ฅํ ํ ์คํธ ํ์ธ
๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ ์ฃผ์์ฐฝ๊ณผ ๊ฒ์์์ง๊ณผ ๊ฐ์ด ์์ฉํ๊ธฐ ๋๋ฌธ์, ๊ฒ์์ด์ธ์ง, url ์ฃผ์์ธ์ง ํ์ธํ๋ ์์ ์ ๊ฑฐ์น๋ค.
4 - 2) ๋คํธ์ํฌ ํธ์ถ
4 - 2 - 1) ๋คํธ์ํฌ ํธ์ถ์ ์ดํดํ๊ธฐ ์ํ ๋จ์ด๋ค
- IP ์ฃผ์ (Internet Protocol address, IP Address): ๋คํธ์ํฌ ์ฅ์น๋ค์ด ์๋ก๋ฅผ ์ธ์ํ๊ณ ํต์ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ํน์ํ ๋ฒํธ๋ค (์์: 125.209.222.142)
- IPv4(Internet Protocol version 4): ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ๋ ์ฒซ ๋ฒ์งธ ์ธํฐ๋ท ํ๋กํ ์ฝ
- IPv6(Internet Protocol version 6): IPv6 ์ฃผ์ ๊ณ ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ธํฐ๋ท ํ๋กํ ์ฝ
- ์ฅ์ : ๋ณด์ ๊ฐํ, ์ง๋ฆฌ์ ์ ํX, ์ผ๊ด๋ ํค๋๋ก ํจ์จ์ ์ธ ๋ผ์ฐํ
, MAC Address์ ๊ฐ์ ์์ฒด IP ์ฃผ์ ํ ๋น
- ๋๋ฉ์ธ ๋ค์ (Domain Name): ์ซ์๋ก ํํ๋ IP ์ฃผ์๋ฅผ ์๊ธฐ ์ฝ๊ฒ ์๋ฌธ์ผ๋ก ํ๊ธฐํ ๊ฒ (์์: naver.com)
- DNS (Domain Name System): ๋๋ฉ์ธ์ IP ์ฃผ์๋ก ๋ณํํ๋ ์์คํ
- ์บ์ฑ: ์ปดํจํฐ์์ ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ฅผ ์บ์ฑ์ด๋ผ๊ณ ํ๋ฉฐ, ์บ์ฑ์ ์ฌ์ฉํ๋ฉด ์ด์ ์ ๊ฒ์ํ๊ฑฐ๋ ๊ณ์ฐํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฌ์ฉํ ์ ์์ด ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ค.
4 - 2 - 2) IP ์ฃผ์ ์ฐพ๊ธฐ
4 - 2 - 3) HTTP ํต์
๋ ๋๋ง ์ค
5 - 1) ๋ ๋๋ง์ด๋?
render: 1. ๋ง๋ค๋ค 2. ์ฃผ๋ค 3. ์ ์ํ๋ค ๋ผ๋ ๋ป๊ณผ ๊ฐ์ด ๋ ๋๋ง์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ง๋๋ ๋จ๊ณ๋ฅผ ์๋ฏธํ๋ค.
์ฃผ๋ก ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค๊ณ ํํํ๋ฉฐ, ์ด ๋จ๊ณ๋ฅผCritical Rendering Path
๋ผ๊ณ ํ๋ค.
5 - 2) ๋ ๋๋ง ๋์ ๊ณผ์
๋ด์ฉ์ ๋น ๋ฅด๊ฒ ํ์ํ๊ธฐ ์ํด ๋ชจ๋ HTML์ ํ์ฑํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐฐ์น(Layout)์ ๊ทธ๋ฆฌ๊ธฐ(Paint) ๊ณผ์ ์ ์์ํ๋ค. ์ด ๋๋ถ์ ์๋ก์ด ์น ํ์ด์ง๊ฐ ๋ก๋ฉ๋ ๋ ๋น ํ๋ฉด์ ๋ณด๋ฉฐ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ํ๋ฉด์ด ๊ทธ๋ ค์ง๋ ๊ฒ๋ถํฐ ๋ณผ ์ ์๋ค.
- parse: (๋ฌธ์ฅ์ ๋ฌธ๋ฒ์ ์ผ๋ก)๋ถ์ํ๋ค ๋ผ๋ ๋ป์ ๊ฐ์ก๋ค. ์์ฑํ ๋ฌธ์ฅ ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด ๋ถ์ํ๋ ๊ณผ์ ์ ํ์ฑํ๋ค๋ผ๊ณ ํํํ๋ค.
๋คํธ์ํฌ๋ก๋ถํฐ ๋ฐ์์จ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
๋คํธ์ํฌ๋ก๋ถํฐ ๋ฐ์์จ CSS ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ CSSOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
์ถ์ฒ: https://code-masterjung.tistory.com/116
<link>
ํ๊ทธ ๋๋ <style>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด CSS ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ์คํ์ผ ๊ท์น์ ๋ด๊ณ ์๋ CSSOM ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์์ํ๋ค.<link>
ํ๊ทธ ๋๋ <style>
ํ๊ทธ๋ฅผ <head>
ํ๊ทธ์์ ์์ฑํ์ฌ ๋น ๋ฅด๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ฐ๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.<script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ๋ ๋๋ง ์์ง์ ํ์ฑ์ ์ ์ ์ค๋จํ๊ณ script๋ฅผ ์ฝ๋๋ค.<script>
ํ๊ทธ๊ฐ <body>
ํ๊ทธ ์ค๊ฐ์ ์์นํ ๊ฒฝ์ฐ HTML์ ํ์ฑํ๋ ๋์ค์ ๊ฐ์๊ธฐ JS ํ์ผ์ ์ฝ๊ฒ ๋๋ฏ๋ก ์ค๋ฅ ๋ฐ์ ์ํ์ด ์๋ค.<script>
ํ๊ทธ๋ฅผ <body>
ํ๊ทธ ์ตํ๋จ์ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํ๋ Attachment ๊ณผ์ ์ ํตํด Render Tree๋ฅผ ๊ตฌ์ถํ๋ค.
display: none;
์์ฑ๊ฐ์ด ํ๋ฉด์ ์์ ๋ณด์ด์ง ์๋ ๋
ธ๋๋ Render Tree์์ ์ ์ธvisibility: hidden;
์ ๊ฒฝ์ฐ ํ๋ฉด์์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ ์์ฑ์ด๊ธฐ ๋๋ฌธ์ Render Tree์ ๋ฐ์
์ถ์ฒ: https://velog.io/@jhyun_k/๋ด-ํ๋ฉด์-๋ค์ด๋ฒ๊ฐ-์ผ์ง๋-๊ณผ์
5 - 2 - 5) Layout
Render ํธ๋ฆฌ ๊ตฌ์ถ์ด ๋๋๋ฉด ์ค์ ๋ฐฐ์น๊ฐ ์์๋๋๋ฐ ๊ฐ DOM ๋ ธ๋๊ฐ ์ ํด์ง ์์น์ ํ์๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
rem๊ณผ ๊ฐ์ ์๋ ์ธก์ ๋จ์๊ฐ px ๋จ์๋ก ๋ณํ๋๋ค.
5 - 3) ๋ ๋๋ง ์์ง๋ค**
์ถ์ฒ: https://roseline.oopy.io/dev/browser-rendering
Layout(๋ ์ด์์), Reflow(๋ฆฌํ๋ก์ฐ)์ ์ํฅ์ ๋ฏธ์น๋ ์ก์ ๋ฐ ์คํ์ผ
width, height, min-height, padding, margin, display, border-width, border, top, left, right, bottom, position, float, overflow-y, font-weight, overflow, font-size, text-align, font-family, line-height, vertical-align, clear, white-space ...
:hover, โฆ
)Repaint(๋ฆฌํ์ธํธ)์ ์ํฅ์ ๋ฏธ์น๋ ์ก์ ๋ฐ ์คํ์ผ
color, visibility, text-decoration, background-position, outline-color, outline-style, outline-width, background-size, border-style, background, background-image, background-repeat, outline, border-radius, box-shadow, ...