1. Web APIs๋?
๋ธ๋ผ์ฐ์ ์์ฒด์์ ์ ๊ณตํ๋ API์ด ๊ต์ฅํ ๋ง์ต๋๋ค.
DOM APIs- Document Object Model์ ์ฝ์
- ์น ํ์ด์ง์ ์๋ ์์๋ค์ ์์ฑํ๊ฑฐ๋ ์ญ์ ํ๊ฑฐ๋ ๋๋ ์คํ์ผ์ ์ด๋ฐ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
Network APIs: ์๋ฒ์ ํต์ ํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตGraphics APIs: Canvas๋ WebGL๊ฐ์ ๊ทธ๋ํฝ์ ๊ด๋ จ๋ API๋ค๋ ์ ๊ณตAudio/Video APIs: ์ค๋์ค๋ ๋น๋์ค๋ฅผ ์ฌ์ํ๊ฑฐ๋ ์ค์งํ๋ ๋ฑ ๋ค์ํ ๋ฉํฐ๋ฏธ๋์ด์ ๊ด๋ จ API ์ ๊ณตDevice APIs: ๋๋ฐ์ด์ค ์ฌ์ฉ์๊ฐ ์จ๋ผ์ธ์ธ์ง ์คํ๋ผ์ธ์ธ์ง ๋๋ฐ์ด์ค์ ์ํ ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์๋ API ์ ๊ณตFile APIs: ์ฌ์ฉ์์ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ๋ APIStorage APIs: ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ ์คํ ๋ฆฌ์ง์ ๊ด๋ จ๋ API
cf
2. HTTP์ HTTPS
HTTP๋ ์น ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ด๋ป๊ฒ ํต์ ํ ์ง์ ๋ํ ํต์ ๊ท์ฝ์ ์ ํด๋์ ๊ฒ์ผ๋ก, Hypertext Transfer Protocol์ ์ฝ์๋ก์จ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ ๋ณด๋ฅผ ์์ฒญํ๊ณ , ๋ค์ ์๋ฒ์์ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ request๋ฅผ ํ๊ณ respence๋ฅผ ๋ฐ์์ค๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
HTTPS๋ HTTP์ S๊ฐ ๋ํด์ง ๊ฒ์ผ๋ก Hypertext Transfer Protocal Secure์ ์ฝ์์
๋๋ค. ์ฆ, ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ๋ค์ด ๋ณด์ ์ฒ๋ฆฌ๊ฐ ๋ http๋ผ๋ ๋ป์
๋๋ค.
HTTP์์ ํจ์ค์๋๋ฅผ ์
๋ ฅํด์ ์๋ฒ์๊ฒ ๋ณด๋ด๊ฒ ๋๋ฉด, ์๋ฌด๋ฐ encryption์ด ์ผ์ด๋์ง ์๊ณ , ์ฆ ์๋ฌด๋ฐ ๋ณด์์ฒ๋ฆฌ๊ฐ ๋์ง ์์์ โdreamโ์ด๋ผ๋ ๊ธ์๊ฐ ๊ทธ๋๋ก ์ ์ก๋์ด์ ํด์ปค๊ฐ ๋คํธ์ํฌ๊ฐ ์ด๋ป๊ฒ ์ ์ก๋๋์ง๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ ์๋ ๋ฐ๋ฉด์, HTTPS๋ secureํ๊ฒ encrypt๊ฐ ๋์ด์, ์ฆ โdrameโ์ด๋ผ๋ ๊ธ์๊ฐ ์ฌ์ฉ์๊ฐ ์์๋ณผ ์ ์๋ โ์ํธํคโ๋ฅผ ์ด์ฉํด์ ๋ณด์ ์ฒ๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํด์ปค๊ฐ ํจ๋ถ๋ก ๋ณผ ์๊ฐ ์์ต๋๋ค.
๊ทธ๋์ HTTP๋ ๋ณด์ ์ฒ๋ฆฌ๊ฐ ๋์ง ์๊ณ HTTPS๋ ๋ณด์ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๊ธฐ ๋๋ฌธ์, ๋ช๋ช Web APIs๋ HTTPS ํ๊ฒฝ์์๋ง ๋์ํฉ๋๋ค. ์ด๋ฌํ ๋ถ๋ถ์ MDN ์ฌ์ดํธ์์ ํ์ธํด์ ์ฐพ์์ ์ฐ๋ฉด ๋๊ณ , ์ด๋ฐ Web APIs์์ ์ ๊ณตํ๋ API ๋ฟ๋ง ์๋๋ผ, ํธ์ํฐ, ํธ๋ ๋ฌ, ์ ํ๋ธ, ํํฐ๋ ์ค ๋ฑ์ ์๋น์ค, ๋์๊ฐ ๊ต์ฅํ ๋ค์ํ ํ์ฌ์์ ์์ ๋ค์ ๋ฐฑ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
3. Browser ๊ตฌ์กฐ
๋ธ๋ผ์ฐ์ ์์ ์น ํ์ด์ง๋ฅผ ์ด๊ฒ ๋๋ฉด Window๋ผ๋ ์ ์ฒด์ ์ธ ์ค๋ธ์ ํธ๊ฐ ์กด์ฌํ๊ณ , Window๋ ์ฌ๋ฌ๋ถ๋ค์ ํ์ด์ง๋ฟ๋ง ์๋๋ผ ๋ธ๋ผ์ฐ์ ์์ ํ์ฌ ์ด๋ ค์๋ ์ ์ฒด์ ์ธ ์ฐฝ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Window ์์ ์ฆ ํ์ด์ง๊ฐ ํ๊ธฐ๋๋ ๋ถ๋ถ์ด Document ์ค๋ธ์ ํธ์
๋๋ค. ์ฆ, Document๋ HTML์์ ์์ฑํ ์์๋ค์ด ํ๊ธฐ๋๋ ๋ถ๋ถ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๋์๋ ๋ณด์ด์ง ์์ง๋ง ์ ์ฒด์ ์ผ๋ก ์๋์ฐ์ ๊ด๋ จ๋ ์ฆ ๋ธ๋ผ์ฐ์ ์์ฒด์ ๊ด๋ จ๋ ์ ๋ณด๋ค์ด ๋ด๊ฒจ ์๋ Navigator๋ผ๋ ์ค๋ธ์ ํธ๋ ์์ต๋๋ค.
| ์ข ๋ฅ | ์ค๋ช |
|---|---|
| window | ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฆด ๋๋ง๋ค ์์ฑ๋๋ ์ต์์ ๊ด๋ฆฌ ๊ฐ์ฒด (๋ธ๋ผ์ฐ์ ์ฐฝ) |
| document | ์น ๋ธ๋ผ์ฐ์ ์ ํ์๋๋ HTML ๋ฌธ์ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฐ์ฒด (๋ธ๋ผ์ฐ์ ๋ด์ฉ) |
| location | ์น ๋ธ๋ผ์ฐ์ ์ ํ์ฌ ํ์๋ ํ์ด์ง์ ๋ํ URL ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฐ์ฒด |
| history | ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ํฌํจ๋ ๊ฐ์ฒด |
| navigator | ์น ๋ธ๋ผ์ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฐ์ฒด |
| screen | ์น ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฐ์ฒด |
๊ทธ๋์ HTML, CSS, JavaScript๋ฅผ ํฌํจํ ์น ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ฉด Window๋ผ๋ ์ ์ฒด์ ์ธ ์ค๋ธ์ ํธ๊ฐ ์๊ณ , Window ์์๋ DOM(Document ๋ชจ๋ธ)์ด ๋ค์ด์๊ณ , DOM์ ์ด์ฉํด์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๊ณ , ๋นผ๊ฑฐ๋ ์์ง์ด๊ณ ์ด๋ฐ ๊ฒ๋ค์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค. ๋ BOM์ Browser Object Model์ ์ฝ์๋ก ๋ธ๋ผ์ฐ์ ์ ๊ด๋ จ๋ Navigator๋ Location์ด๋ Fetch๋ Storage๊ฐ์ Web APIs ๋ฑ์ด ๋ค์ด์์ต๋๋ค. MDN ์ฌ์ดํธ์์ Web APIs์ ๊ด๋ จ๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ค์ด BOM์ ํด๋น๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํจ๊ป ํฌํจ์ด ๋์ด์ ธ ์์ต๋๋ค. ๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ธ๋ผ์ฐ์ ์์์ ๋์ํ๋ ๊ฑธ ๋ง๋ค ๋๋ ์ด๋ฐ DOM ๊ด๋ จ API๋ ์ธ ์ ์๊ณ , BOM ๊ด๋ จ API๋ ์ธ ์ ์์ต๋๋ค.
์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์ฝ์ ์ฐฝ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์์ฑํ๊ณ ํ์ธํด๋ณด์ธ์.
1$ document2$ window
์ฝ์์ฐฝ์ ์ด์ฉํด์ ํ์ธํด๋ ๋์ง๋ง MDN Window์ ๊ฐ๋ฉด ๋ ์์ธํ ์ ์ ์์ต๋๋ค. Window๋ ์ธํฐํ์ด์ค์ธ๋ฐ, DOM์ document๊ฐ ํฌํจ๋ Window๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ผ ์ค๋ช ํ๋ฉด์, Window๋ ๋ฌด์์ด๊ณ , ๊ทธ ์์ ์ด๋ค ๊ฒ๋ค์ด ๋ค์ด์๋ ์ง๋ ํ์ธํด๋ณผ ์ ์์ต๋๋ค.
cf. MDN Window
4. window ๊ฐ์ฒด
4.1 window ๊ฐ์ฒด ๊ธฐ๋ณธ ์์ฑ
| ์์ฑ | ์ค๋ช |
|---|---|
| innerWidth | ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋๋น๋ฅผ px(ํฝ์ ) ๋จ์๋ก ๋ํ๋ |
| innerHeight | ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋์ด๋ฅผ px ๋จ์๋ก ๋ํ๋ |
| outerWidth | ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋๋น๋ฅผ px ๋จ์๋ก ๋ํ๋ |
| outerHeight | ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋์ด๋ฅผ px ๋จ์๋ก ๋ํ๋ |
| screenTop / screenY | ์น ๋ธ๋ผ์ฐ์ ์์ชฝ ๋ฉด๊ณผ ๋ชจ๋ํฐ์ ๊ฐ๊ฒฉ์ px ๋จ์๋ก ๋ํ๋ |
| screenLeft / screenX | ์น ๋ธ๋ผ์ฐ์ ์ผ์ชฝ ๋ฉด๊ณผ ๋ชจ๋ํฐ์ ๊ฐ๊ฒฉ์ px ๋จ์๋ก ๋ํ๋ |
| pageXOffset / scrollX | ์น ๋ธ๋ผ์ฐ์ ์ ์ํ ์คํฌ๋กค ์์น๋ฅผ px ๋จ์๋ก ๋ํ๋ |
| pageYOffset / scrollY | ์น ๋ธ๋ผ์ฐ์ ์ ์์ง ์คํฌ๋กค ์์น๋ฅผ px ๋จ์๋ก ๋ํ๋ |
1<body>2<button onclick="printInfo()">window ๊ฐ์ฒด ์์ฑ</button>3<script>4function printInfo(){5console.log(`์น ๋ธ๋ผ์ฐ์ ์ ๋๋น: ${window.innerWidth}`);6console.log(`์น ๋ธ๋ผ์ฐ์ ์ ๋์ด: ${window.innerHeight}`);7console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋๋น: ${window.outerWidth}`);8console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋์ด: ${window.outerHeight}`);9console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ ์์ชฝ ๋ฉด๊ณผ ๋ชจ๋ํฐ ์ฌ์ด์ ๊ฐ๊ฒฉ: ${window.screen Top}/${window.screenY}`);10console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ ์ผ์ชฝ ๋ฉด๊ณผ ๋ชจ๋ํฐ ์ฌ์ด์ ๊ฐ๊ฒฉ: ${window.screen Left}/${window.screenX}`);11console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์คํฌ๋กค ๊ฐ๋ก ์์น: ${window.scrollX}`);12console.log(`์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์คํฌ๋กค ์ธ๋ก ์์น: ${window.scrollY}`);13}14</script>15</body>
์ฝ๋๋ฅผ ์น ๋ธ๋ผ์ฐ์ ๋ก ์คํํ๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฝ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฐ๋ก์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ ๋ ์คํฌ๋กคํ ๋ค์ ํ๋ฉด์ ๋ณด์ด๋ window ๊ฐ์ฒด ์์ฑ ๋ฒํผ์ ๋๋ฌ๋ณด๋ฉด, ์ฝ์์ฐฝ์ ์์ฑ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
5. window ๊ฐ์ฒด ๊ธฐ๋ณธ ๋ฉ์๋
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
| alert() | ์๋ฆผ์ฐฝ์ ํ์ํจ |
| confirm() | ํ์ธ์ฐฝ์ ํ์ํจ |
| prompt() | ์ ๋ ฅ์ฐฝ์ ํ์ํจ |
| open() | ์๋ก์ด ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ฐ๋ค. |
| close() | ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ซ์ |
| setTimeout() | ์ผ์ ์๊ฐ(ms) ๋ค์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ ๋ฒ๋ง ์คํํจ |
| setInterval() | ์ผ์ ์๊ฐ(ms)๋ง๋ค ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํจ |
| clearInterval | setInterval() ๋ฉ์๋๋ก ๋ฐ๋ณต ์คํ๋๋ ํจ์๋ฅผ ์ค์งํจ |
| scrollTo() | ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค์ ํน์ ์์น๋งํผ ์ด๋ํจ |
| scrollBy() | ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค์ ํ์ฌ ์์น์์ ์๋์ ์์น๋ก ์ด๋ํจ |
5.1 open() : ์น ๋ธ๋ผ์ฐ์ ์์ ์ ์ฐฝ ์ ์ด
์ฝ๋๋ฅผ ์คํํด ๋ณด๋ฉด ํ์ ๋ฒํผ์ด ๋ณด์ ๋๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ฉด popup() ํจ์๊ฐ ํธ์ถ๋์ด window ๊ฐ์ฒด์ open() ๋ฉ์๋๊ฐ ์คํ๋ฉ๋๋ค.
1<!-- open.html -->2<body>3<button onclick="popup()">ํ์ </button>4<script>5function popup() {6// window.open(๊ฒฝ๋ก, ์ด๋ฆ, ์์ฑ);7window.open('popup.html', 'ํ์ ', 'width=200, height=100')8// popup.html : ์์ฐฝ์์ ์ด๋ฆด ํ์ผ์ ๊ฒฝ๋ก9// ํ์ : ๋ธ๋ผ์ฐ์ ํญ์ ์ด๋ฆ์ด ์๋๋ผ open()์์ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ๋ถํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ ์ด๋ฆ10// width=200, height=100 : ์์ฐฝ์ ์์ฑ ๊ฐ11}12</script>13</body>
window.open() ๋ฉ์๋๋ก ์ด๋ฆฌ๋ ์ ์ฐฝ์ โํ์ ์ฐฝโ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ด๋ฆฐ ์ฐฝ์ window ๊ฐ์ฒด์ close()๋ก ๋ซ์ ์ ์์ต๋๋ค.
๋ณดํต open()๋ก ์ด๋ฆฐ ์๋ก์ด ์ฐฝ์ ๋ซ๋ ์ฉ๋๋ก ์ฌ์ฉํฉ๋๋ค.
1<!-- popup.html -->2<body>3<button onclick="window.close()">ํ์ ๋ซ๊ธฐ</button>4</body>
5.2 scrollTo() : ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค ์ด๋
scrollTo(): ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค์ ํน์ ์์น๋งํผ ์ด๋ํจscrollBy(): ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค์ ํ์ฌ ์์น์์ ์๋์ ์์น๋ก ์ด๋ํจ
๋ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ผ๋ก ๋งค๊ฐ๋ณ์์ x์ขํ์ y์ขํ๋ฅผ ์ ๋ฌ๋ฐ์ต๋๋ค.
1// ๐ ๋ช ๋ฒ์ ํธ์ถํ๋๋ผ๋ ๊ฐ๋ก๋ 100px, ์ธ๋ก๋ 200px์ ์์น๋ก ์คํฌ๋กค์ด ์ด๋๋จ2window.scrollTo(100, 200)34// ์น ๋ธ๋ผ์ฐ์ ์คํฌ๋กค์ ํ์ฌ ์์น์์ ์๋์ ์ธ ์์น๋ก ์์ง์ด๊ธฐ ๋๋ฌธ์5// ํธ์ถํ ๋๋ง๋ค ์น ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค์ด ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก 100px, ์ธ๋ก ๋ฐฉํฅ์ผ๋ก 200px์ฉ ๊ณ์ ์ด๋6window.scrollBy(100, 200) // window.scrollBy(x์ขํ, y์ขํ);
๋๋ ๋ค์์ฒ๋ผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ ๋ฌ๋ฐ์ ์๋ ์์ต๋๋ค.
1window.scrollTo({ left: 100, top: 200 })2window.scrollBy({ left: 100, top: 200 })
scrollTo() ๋ฉ์๋๋ scrollBy() ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ ๋ฌํ ๋, behavior ์์ฑ์ ์ ๋ฌํ ์ ์์ต๋๋ค. behavior ์์ฑ๊ฐ์ smooth๋ก ํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ์คํฌ๋กค์ด ํด๋น ์์น๋ก ๋ง์ฐ์ค ํ ์ ๊ตด๋ฆฌ๋ฏ์ด ๋ถ๋๋ฝ๊ฒ ์ด๋ํฉ๋๋ค.
1window.scrollTo({ top: 4000, behavior: 'smooth' })2window.scrollBy({ top: 600, behavior: 'smooth' })
๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ https://developer.mozilla.org/ko/docs/Web/API ์ฐธ๊ณ