[Web] API
๐ API๋ ๋ฌด์์ธ๊ฐ์?
API(Application Programming Interface)๋ ๊ฐ๋จํ ๋งํด, ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด๋ ์์คํ ๊ฐ์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ '์ค๊ฐ์' ๊ฐ์ ์ญํ ์ ํ๋ ๋๊ตฌ์์. API๋ฅผ ์ดํดํ๊ธฐ ์ฌ์ด ๋น์ ๋ก ์ค๋ช ํ์๋ฉด, ๋ ์คํ ๋์ ์จ์ดํฐ์ ๋น์ ํ ์ ์์ด์.
๋ ์คํ ๋์์ ์๋์ ์ฃผ๋ฐฉ์ฅ๊ณผ ์ง์ ์์์ ์ฃผ๋ฌธํ๊ฑฐ๋ ๋ํํ์ง ์์์. ๋์ , ์จ์ดํฐ๋ฅผ ํตํด ์ฃผ๋ฌธ์ ํ๊ณ , ์จ์ดํฐ๋ ์ฃผ๋ฐฉ์ฅ์๊ฒ ์ฃผ๋ฌธ์ ์ ๋ฌํด์. ๋ง์ฐฌ๊ฐ์ง๋ก, ์จ์ดํฐ๋ ์ฃผ๋ฐฉ์ฅ์ด ๋ง๋ ์์์ ์๋์๊ฒ ๊ฐ์ ธ๋ค์ค์. ์ฌ๊ธฐ์ ์จ์ดํฐ๊ฐ API์ ์ญํ ์ ํด์.
์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ API๋ ํ ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ '์ค๊ฐ์ธ'์ด์์. ์๋ฅผ ๋ค์ด, ์์ ๋ฏธ๋์ด ํ๋ซํผ์ API๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ทธ ํ๋ซํผ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ด์. API๋ ์ด๋ฌํ ์์ฒญ๊ณผ ์๋ต์ ์ํ ๊ท์น๊ณผ ํ์์ ์ ๊ณตํ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ์ ์ํํ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์.
๐ฅ๏ธ API์ ์ฌ์ฉ
API(Application Programming Interface)๋ ๋ค์ํ ํํ์ ์ฉ๋๋ก ์ฌ์ฉ๋ผ์. ์ฃผ๋ก ์น API, ๋ผ์ด๋ธ๋ฌ๋ฆฌ API, ์ด์ ์ฒด์ API ๋ฑ ์ฌ๋ฌ ํํ๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ฉ๋์ ๊ธฐ๋ฅ์ด ์์ด์.
1. ์น API
- ์น API๋ ์ธํฐ๋ท์ ํตํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋ผ์. ๋ํ์ ์ผ๋ก REST API์ SOAP API๊ฐ ์์ด์.
์: ํ์ด์ค๋ถ API๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ํ๋กํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ฑฐ๋ ๊ฒ์๊ธ์ ๊ฒ์ํ๋ ๊ธฐ๋ฅ.
2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ API
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ์ผ๋ จ์ ํจ์์ ํ๋กํ ์ฝ๋ก, ๊ฐ๋ฐ์๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์์ค์.
์: jQuery ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง์ DOM ์์๋ฅผ ์ฝ๊ฒ ์กฐ์ํ๊ณ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ.
3. ์ด์ ์ฒด์ API
- ์ด์ ์ฒด์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ API๋ก, ํ์ผ ์์คํ ์ ๊ทผ, ์๋์ฐ ๊ด๋ฆฌ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ด์.
์: Windows API๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์์ฑํ๊ณ , ์ฝ๊ณ , ์ฐ๋ ๊ธฐ๋ฅ.
4. API ์ฌ์ฉ ์์
๊ฐ๋จํ API ์ค ํ๋๋ก ๊ฐ๋ฐ์ ์ ๋จธ๋ฅผ ์ ๊ณตํ๋ "JokeAPI"๊ฐ ์์ด์. ์ด API๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์ ๋จธ๋ฅผ ์ ๊ณตํด์.
JokeAPI์ ๊ธฐ๋ณธ ํํ๋ ๋ค์๊ณผ ๊ฐ์์:
- ๊ธฐ๋ณธ URL:
https://v2.jokeapi.dev/joke/
- ์นดํ
๊ณ ๋ฆฌ ์ ํ: ์นดํ
๊ณ ๋ฆฌ๋ฅผ URL์ ์ถ๊ฐํ์ฌ ํน์ ์ ํ์ ์ ๋จธ๋ฅผ ์์ฒญํ ์ ์์ด์. ์๋ฅผ ๋ค์ด,
/Programming
์ ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์ ๋จธ๋ฅผ ์์ฒญํด์.
fetch('https://v2.jokeapi.dev/joke/Programming')
.then(response => response.json())
.then(data => {
// ์ ๋จธ์ ์ข
๋ฅ์ ๋ฐ๋ผ ์ถ๋ ฅ ํ์์ ๊ฒฐ์
if (data.type === 'single') {
console.log(data.joke); // ๋จ์ผ ์ ๋จธ
} else {
console.log(data.setup); // ์ ๋จธ ์ค์
console.log(data.delivery); // ์ ๋จธ ํฌ์ธํธ
}
})
.catch(error => console.error('Error:', error));
์ ์ฝ๋๋ JokeAPI๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์ ๋จธ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์ถ๋ ฅํ๋ ์์์ ๋๋ค.
์ฌ๊ธฐ์ joke, setup, delivery๋ JokeAPI๊ฐ ๋ฐํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ผ๋ถ์ ๋๋ค.์ด๋ค์ API ์๋ต์ ๋ค๋ฅธ ํ๋๋ฅผ ๋ํ๋ ๋๋ค:
- fetch ํจ์: fetch('https://v2.jokeapi.dev/joke/Programming')๋๋) JokeAPI์ ํ๋ก๊ทธ๋๋ฐ ์นดํ ๊ณ ๋ฆฌ์์ ์ ๋จธ๋ฅผ ์์ฒญํฉ๋๋ค. ์ด๋ HTTP GET ์์ฒญ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
- then(response => response.json()): ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์๋ต์ JSON ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
- then(data => {...}): ๋ณํ๋ JSON ๋ฐ์ดํฐ(data) ๋ด์์ ์ ๋จธ์ ๋ด์ฉ์ ์ฒ๋ฆฌํฉ๋๋ค.
- data.type: ์ ๋จธ์ ์ข ๋ฅ๋ฅผ ๋ํ๋ ๋๋ค. 'single'์ธ ๊ฒฝ์ฐ ๋จ์ผ ๋ผ์ธ ์ ๋จธ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ค์ ๊ณผ ํฌ์ธํธ๊ฐ ์๋ ์ ๋จธ์ ๋๋ค.
- data.joke: ๋จ์ผ ๋ผ์ธ ์ ๋จธ์ ๋ด์ฉ์ ๋๋ค.
- data.setup: ์ค์ ๊ณผ ํฌ์ธํธ๊ฐ ์๋ ์ ๋จธ์ ์ค์ ๋ถ๋ถ์ ๋๋ค.
- data.delivery: ์ค์ ๊ณผ ํฌ์ธํธ๊ฐ ์๋ ์ ๋จธ์ ํฌ์ธํธ ๋ถ๋ถ์ ๋๋ค.
- catch(error => console.error('Error:', error)): ์์ฒญ ๊ณผ์ ์์ ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์ก์๋ด๊ณ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.์ด ์ฝ๋๋ JokeAPI์ ์๋ต ๊ตฌ์กฐ์ ๋ฐ๋ผ ์์ฑ๋์์ผ๋ฉฐ, joke, setup, delivery ํ๋๋ ํด๋น API์ ๋ฌธ์์ ์ ์๋ ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ํ๋๋ JokeAPI ํน์ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ ๊ฒ์ผ๋ก, ๋ค๋ฅธ API์์๋ ๋ค๋ฅธ ํ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๐ค API์ ์ฅ์
API(Application Programming Interface)์ ์ฌ์ฉ์ ์ฌ๋ฌ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ด์:
- ํจ์จ์ฑ: ๊ฐ๋ฐ์๋ค์ด ๊ธฐ์กด์ ๊ตฌํ๋์ด ์๋ ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ ์ ์์ด, ์ค๋ณต๋ ๋ ธ๋ ฅ์ ์ค์ด๊ณ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ: API๋ฅผ ํตํด ์ธ๋ถ ์๋น์ค์์ ํตํฉ์ด ์ฉ์ดํด์ ธ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์: API๋ฅผ ์ฌ์ฉํ๋ฉด, ์์คํ ์ ๋ด๋ถ ๊ตฌํ์ ๋ณ๊ฒฝํ๋๋ผ๋ ์ธ๋ถ ์ธํฐํ์ด์ค(API)๋ ์ ์งํ ์ ์์ด, ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
- ํ์คํ: API๋ ๋ฐ์ดํฐ ๊ตํ๊ณผ ๊ธฐ๋ฅ ์ ๊ทผ์ ๋ํ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ, ๋ค์ํ ์ํํธ์จ์ด๋ ์๋น์ค ๊ฐ์ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๋ณด์: ๋ด๋ถ ์์คํ ์ ์ง์ ์ ๊ทผํ์ง ์๊ณ ๋ ํ์ํ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์์ ํ๊ฒ ์ด์ฉํ ์ ์๋๋ก ํด์ค๋๋ค.
- ํ์ : ๋ค์ํ ๊ฐ๋ฐ ํ์ด๋ ์๋น์ค ์ ๊ณต์ ๊ฐ์ ํจ์จ์ ์ธ ํ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๐จ ์ฃผ์ํ ์
API๋ฅผ ์ฌ์ฉํ ๋๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํด์:
- ๋ณด์: API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋๋ ๋ณด์์ด ๋งค์ฐ ์ค์ํด์. ํนํ, ๊ฐ์ธ ์ ๋ณด๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ SSL/TLS ์ํธํ์ ๊ฐ์ ๋ณด์ ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ผ ํด์.
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ: ๋ง์ API๋ ์ธ์ฆ ํค(API Key)๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ ๊ทผ์ ์ ์ดํด์. ์ด๋ฌํ ์ธ์ฆ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ , ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํด์ผ ํด์.
- ์จ ์ ํ(Rate Limiting) ๋ฐ ์ฟผํฐ ๊ด๋ฆฌ: ์ผ๋ถ API๋ ์์ฒญ์ ์๋ ๋ฐ์ดํฐ์ ์์ ์ ํ์ ๋๊ณ ์์ด์. ์ด๋ฌํ ์ ํ์ ์ด๊ณผํ๋ฉด ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํ๊ฑฐ๋ ์๋น์ค ์ด์ฉ์ด ์ ํ๋ ์ ์์ผ๋ฏ๋ก, API ์ฌ์ฉ๋์ ์ฃผ์ ๊น๊ฒ ๋ชจ๋ํฐ๋งํด์ผ ํด์,
- ๋ฒ์ ๊ด๋ฆฌ: API๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋๊ณ ๋ณ๊ฒฝ๋ ์ ์์ด์. ์ฌ์ฉ ์ค์ธ API์ ๋ฒ์ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ดํธํด์ผ ํด์.
๐ ๊ฒฐ๋ก
API๋ ํ๋ ํ๋ก๊ทธ๋๋ฐ์์ ํ์์ ์ธ ์์๋ก, ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋น์ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์. API๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ธฐ์กด์ ๊ธฐ๋ฅ์ ์ฌํ์ฉํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ฉฐ, ๋ค์ํ ์๋น์ค์์ ํตํฉ์ ์คํํ ์ ์์ด์.
ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด์๋ผ๋ฉด, API์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ๊ฐ๋จํ API๋ฅผ ์ง์ ์ฌ์ฉํด ๋ณด๋ ๊ฒ์ด ์ข์ ์์์ ์ด ๋ ๊ฑฐ์์. ์ด๋ฅผ ํตํด ๋ ๋ณต์กํ API ํตํฉ์ ํ์ํ ๊ธฐ์ ๊ณผ ๊ฒฝํ์ ์์ ์ ์์ด์.
API๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด์๋ ๋ณด์, ์ธ์ฆ, ์จ ์ ํ ๋ฑ์ ์ค์ํ ์ฌํญ์ ์ดํดํ๊ณ ์ ์ ํ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํด์. ์ด๋ฌํ ์ง์๊ณผ ๊ฒฝํ์ ์ฌ๋ฌ๋ถ์ด ๋ณด๋ค ๊ฐ๋ ฅํ๊ณ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ฑฐ์์.
๐ ์ถ๊ฐ ์ ๋ณด
- API์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, MDN Web Docs์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.