1. APIs๋
API(Application Programming Interfaces)
๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋ค์ด์ง ์ผ์ข
์ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ๋ค์ ๋ชจ์, ๊ตฌ์ฑ์ ๋๋ก ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. API๋ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ณต์กํ ์ฝ๋๋ฅผ ์ถ์ํํด์ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋ฌธ๋ฒ์ผ๋ก ์ ๊ณตํ๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ด๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ค์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
์น์ฑ์์ 3D ๊ทธ๋ํฝ ๊ฐ๋ฐ์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ ์ ์์๊น? GPU๋ฅผ ์ง์ ์ ์ผ๋ก ๋ค๋ฃจ๋ C๋ C++๊ณผ ๊ฐ์ low-level ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ตฌํํ ์๋ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ์ ๋ฐ ๊ฒ๋ค์ ์์ง ๋ชปํด๋ ๊ด์ฐฎ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ด์ฌ๊ณผ ๊ฐ์ high-level ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ API๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๊ฐ๋ฐํ ์๋ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์์ APIs
ํด๋ผ์ด์ธํธ๋จ์ ์ธ์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์์ฃผ ๋ง์ APIs๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ์ธ์ด ์์ฒด์ ๋ด์ฅ๋ ๊ฒ์ ์๋๋ฉฐ, ์๋ ๋ ๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅํ ์ ์๋ค.
- Broswer APIs
- Third-party APIs
Broswer APIs
๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋์ด ์๋ API๋ก, ๋ธ๋ผ์ฐ์ ์ ์ปดํจํฐ ํ๊ฒฝ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ง๊ณ ์ ์ฉํ ์ผ๋ค์ ํด๋ธ๋ค. ์๋ฅผ ๋ค์ด, Web Audio API
๋ ํธ๋์ ๊ฐ์ ธ์ค๊ฑฐ๋, ๋ณผ๋ฅจ์ ์กฐ์ ํ๋ ๋ฑ์ ๋ธ๋ผ์ฐ์ ์ค๋์ค๋ฅผ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ์ ๊ณตํ๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋ณต์กํ low-level ์ฝ๋๋ฅผ ํตํด ์ค์ ์ค๋์ค๋ฅผ ์กฐ์ํ๊ณ ์๊ฒ ์ง๋ง, ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ๊ณผ์ ์ ์ ๊ฒฝ ์ธ ํ์ ์์ด ๊ฐํธํ๊ฒ ์ถ์ํ๋ API๋ฅผ ์ ์ ์ ์์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
Third-party APIs
๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ ๊ฒ์ด ์๋๋ผ ๋ค๋ฅธ ํ๋ซํผ์์ ์ ๊ณต๋๋ ๋ฐ์ดํฐ์ ์ฝ๋๋ก ๊ตฌ์ฑ๋ API์ด๋ค. ๋ํ์ ์ผ๋ก๋ Youtube API
๊ฐ ์์ต๋๋ค.
2. Browser APIs๊ฐ ํ๋ ์ผ
๊ต์ฅํ ๋ง์ API๋ค์ด ์์ง๋ง ๊ทธ ์ค์์๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ํํ ์ฌ์ฉ๋๋ API๋ค์ ์๋์ ๊ฐ๋ค.
- documents ์กฐ์
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
- ๊ทธ๋ํฝ ์กฐ์
- ์ค๋์ค, ๋น๋์ค ์กฐ์
- ๊ธฐ๊ธฐ ์กฐ์
- ํด๋ผ์ด์ธํธ๋จ ์ ์ฅ์
documents ์กฐ์
DOM API
๋ HTML๊ณผ CSS๋ฅผ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ๋์ ์ผ๋ก HTML ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ์๋ก์ด ์คํ์ผ์ ์ ์ฉํ ์ ์๋ค.
๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
XMLHttpRequest
๋ Fetch API
๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ์
๋ฐ์ดํธํ ์ ์๋ค. ์ ์ฒด ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ๋ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์
๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ํฝ ์กฐ์
Canvas๋ WebGL์ HTML์ <canvas>
์์์ ํฝ์
๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ ํด 2D๋ 3D๋ฅผ ๊ทธ๋ฆด ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค๋ฉด, Canvas API
๋ฅผ ์ฌ์ฉํด ์ฌ๊ฐํ์ด๋ ์์ ๊ทธ๋ฆด ์ ์๊ณ ์ด๋ฏธ์ง๋ฅผ ์
ํ ์๋ ์์ผ๋ฉฐ, ์ธํผ์๋ ํ๋ฐฑ ํํฐ๋ฅผ ์ ์ฉํ ์๋ ์๋ค. ํน์ WebGL
์ ์ฌ์ฉํด ํ
์ค์ณ๋ฅผ ์
ํ ๋ณต์กํ 3D๋ฅผ ๋ง๋ค ์๋ ์๋ค.
์ด๋ฐ ๊ทธ๋ํฝ API๋ค์ window.requestAnimationFrame()
์ ๊ฐ์ ๋ฐ๋ณต ์คํ๋๋ ์ ๋๋ฉ์ด์
์ ์์ฑํ๋ API์ ํจ๊ป ์ฐ์ฌ ๋งํ๋ ๊ฒ์์ฒ๋ผ ์ง์์ ์ผ๋ก ์์ง์ด๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
์ค๋์ค, ๋น๋์ค ์กฐ์
HTMLMediaElement
, Web Audio API
, WebRTC
์ ๊ฐ์ API๋ค์ ์ฌ์ฉํด์ ๋ฉํฐ๋ฏธ๋์ด์ ๊ด๋ จ๋ ์ฌ๋ฐ๋ ์ผ๋ค์ ํ ์ ์๋ค. ์ค๋์ค์ ๋น๋์ค์ ์ฌ์ ๋ชฉ๋ก์ ์ปค์คํ
ํ ์ ์๊ณ , ๋น๋์ค์ ์บก์
๊ณผ ๋ถ์ ์ ๊ฐ์ ํ
์คํธ๋ฅผ ํ์ํ ์๋ ์๊ณ , canvas
๋ฅผ ํตํด ์น ์นด๋ฉ๋ผ๋ฅผ ์กฐ์ํ์ฌ ๋น๋์ค๋ฅผ ๋ง๋ค์ด๋ผ ์๋ ์๊ณ , ๋ ์ค๋์ค ํธ๋์ ํจ๋ ๊ธฐ๋ฒ๋ฑ์ ๋ํ ์๋ ์๋ค.
๊ธฐ๊ธฐ ์กฐ์
์น์ฑ์ ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ๊ธฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ๊ทธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ API๋ค์ด ์๋ค. ๋ํ์ ์ผ๋ก๋ ์์คํ ์๋ฆผ์ ํตํด ์ฌ์ฉ์์๊ฒ ๊ฐ๋ฅํ ์ ๋ฐ์ดํธ๊ฐ ์์์ ์๋ ค์ฃผ๋ Notifications API, Vibration API๊ฐ ์๋ค.
ํด๋ผ์ด์ธํธ๋จ ์ ์ฅ์
ํด๋ผ์ด์ธํธ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์คํ๋ผ์ธ์์๋ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ API๋ค์ด ์๋ค. ๊ฐ๋จํ key-value ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ Web Storage API๋ฅผ, ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ IndexedDB API๋ฅผ ์ฌ์ฉํ๋ค.
3. APIs๊ฐ ๋์ํ๋ ์๋ฆฌ
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ APIs๋ object
๊ฐ ์ปจํ
์ด๋๋ก์จ properties
์ API ์ฌ์ฉ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๊ณ , method
์ API๋ฅผ ์๋์ํค๋ ์ค์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋ค.
์๋๋ ํ๋ ์ด ๋ฒํผ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํด ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค HTMLMediaElement
API๋ฅผ ํตํด ์์
์ ์ฌ์ํ๊ณ , ๋ฉ์ถ๋ ์ฝ๋์ด๋ค. <audio>
์์์ play()
, pause()
๋ฉ์๋๋ฅผ ํธ์ถํด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
const audioElement = document.querySelector('audio');
const playBtn = document.querySelector('button');
playBtn.addEventListener('click', function() {
// ์ค์ง ์ํ๋ผ๋ฉด ์ฌ์์ํต๋๋ค
if (this.getAttribute('class') === 'paused') {
audioElement.play();
this.setAttribute('class', 'playing');
this.textContent = 'Pause'
// ์ฌ์ ์ค์ด๋ผ๋ฉด ์ค์ง์ํต๋๋ค
} else if (this.getAttribute('class') === 'playing') {
audioElement.pause();
this.setAttribute('class', 'paused');
this.textContent = 'Play';
}
});