์๋ํ๋ ์ค์์ REST API๋ก ๊ธ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ
๐ ์๋ํ๋ ์ค REST API๋ฅผ ์ด์ฉํด์ ๋๋ง์ ์ฌ์ดํธ ๋ง๋ค๊ธฐ - 1ํธ
์๋ํ๋ ์ค๋ก ๊ฒ์๋ฌผ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ (GET ์์ฒญ ํ์ฉ)
์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ ๋ ๊ฐ์ฅ ์ฌ์ฐ๋ฉด์๋ ์ ์ฐํ๊ฒ CMS์ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ์๋ํ๋ ์ค๋ผ๊ณ ์๊ฐํ๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ด๋ฆฌ UI๋ ์ ๋์ด ์๊ณ , ๋ฌด์๋ณด๋ค REST API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ค๊ณ ๋ค๋ฃฐ ์ ์์ด์ ํ๋ก ํธ์๋๋ ๋ด๊ฐ ์ํ๋ ๋๋ก ์์ ๋กญ๊ฒ ๋ง๋ค ์ ์๋ค.
๊ทธ๋์ ์ด๋ฒ์ ์๋ํ๋ ์ค REST API๋ฅผ ์ด์ฉํด์ ๋ด๊ฐ ์ํ๋ ์คํ์ผ์ ์น์ฌ์ดํธ๋ฅผ ์ง์ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค.
์ด ๊ณผ์ ์ ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ์ ์๋ฆฌ์ฆ๋ก ๊ธฐ๋กํด๋ณด๋ ค๊ณ ํ๊ณ ,
์ด ๊ธ๋ค์ด ๋์ฒ๋ผ ํ๋ก ํธ ์ค์ฌ์ผ๋ก ์์
์ ํ๋ฉด์ CMS๊ฐ ํ์ํ๋ ๋๊ตฐ๊ฐ์๊ฒ ์์ ๋์์ด ๋๋ฉด ์ข๊ฒ ๋ค.
๊ธฐ๋ก์ ๋ณต์กํ๊ฒ ์ฐ์ง ์๊ณ , ์ต๋ํ ๋ด๊ฐ ์๊ฐํ ํ๋ฆ, ๊ฐ๋ฐ์ ์งํํ ์์๋๋ก ์ ๋ฆฌํด๋ณผ ์๊ฐ์ด๋ค.
REST API๋ก ๊ฒ์๋ฌผ ๋ถ๋ฌ์ค๊ธฐ
์ฒซ ๋ฒ์งธ๋ ์ ์ผ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ถํฐ ์์ํ๋ค.
์๋ํ๋ ์ค์์ REST API๋ฅผ ํตํด ๊ฒ์๋ฌผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์น์ฌ์ดํธ์ ํ์ํ๋ ๋ฐฉ์์ด๋ค.
์๋ํ๋ ์ค REST API?
์๋ํ๋ ์ค๋ ์์ฒด์ ์ผ๋ก REST API๋ฅผ ์ ๊ณตํ๋ค.
๋ฐ๋ก ํ๋ฌ๊ทธ์ธ ์ค์น ์ ํด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ๊ณ , ๋ธ๋ผ์ฐ์ ์์ ์ฃผ์๋ง ์
๋ ฅํด๋ JSON ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์๋ํ๋ ์ค ์ฃผ์๊ฐ https://example.com์ด๋ผ๋ฉด, ๊ฒ์๋ฌผ ๋ฆฌ์คํธ๋ ์๋ ์ฃผ์์์ ํ์ธํ ์ ์๋ค:
https://example.com/wp-json/wp/v2/posts
์ด URL๋ก ๋ค์ด๊ฐ๋ณด๋ฉด ๊ฒ์๋ฌผ ๋ฐ์ดํฐ๊ฐ JSON ํ์์ผ๋ก ์ญ ๋์จ๋ค.
ํ๋ก ํธ์๋์์๋ ์ด ๋ฐ์ดํฐ๋ฅผ fetch ๊ฐ์ ๊ฑธ๋ก ๋ถ๋ฌ์ค๋ฉด ๋์ด๋ค.
์์ ๋ก ๋ง๋ค์ด๋ณธ ๊ฒ์๋ฌผ ๋ฆฌ์คํธ
์๋๋ ๊ฐ๋จํ๊ฒ ๋ง๋ HTML + JavaScript ์์ ๋ค.
์๋ํ๋ ์ค์์ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์์, ์ ๋ชฉ์ด๋ ์์ฝ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค์๋ค.
HTML (index.html)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>์๋ํ๋ ์ค ๊ฒ์๋ฌผ ๋ถ๋ฌ์ค๊ธฐ</title>
</head>
<body>
<h1>์ต์ ๊ฒ์๋ฌผ</h1>
<div id="post-container"></div>
<script src="main.js"></script>
</body>
</html>
JavaScript (main.js)
const apiURL = 'https://example.com/wp-json/wp/v2/posts';
fetch(apiURL)
.then(res => res.json())
.then(posts => {
const container = document.getElementById('post-container');
posts.forEach(post => {
const el = document.createElement('div');
el.innerHTML = `
<h2>${post.title.rendered}</h2>
<p>${post.excerpt.rendered}</p>
<a href="${post.link}" target="_blank">์๋ฌธ ๋ณด๊ธฐ</a>
<hr>
`;
container.appendChild(el);
});
})
.catch(err => {
console.error('์๋ฌ ๋ฐ์:', err);
});
์ฐธ๊ณ ๋ก ์๋ํ๋ ์ค๋ ์ ๋ชฉ์ด๋ ๋ด์ฉ ๊ฐ์ ํ
์คํธ๋ฅผ HTML๋ก ๊ฐ์ธ์ ์ฃผ๊ธฐ ๋๋ฌธ์, title.rendered, excerpt.rendered ๊ฐ์ ํ๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๊ฑธ ๊ทธ๋๋ก innerHTML์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์๋ํ๋ ์ค REST API์์ excerpt์ content ์ฐจ์ด
โ excerpt
- ์์ฝ๋ ๊ธ ๋ด์ฉ์ ์๋ฏธ.
- ์๋ํ๋ ์ค ํธ์ง๊ธฐ์์ ์์ฝ(Excerpt) ํ๋์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ ํ์.
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ์ง ์์๋ค๋ฉด, ๋ณธ๋ฌธ(content)์ ์๋ถ๋ถ์ ์๋์ผ๋ก ์๋ผ์ ์์ฑ.
- ๊ฐ๋จํ ์์ฝ ์ ๋ณด์ ์ ํฉ.
โ content
- ๊ธ์ ์ ์ฒด ๋ณธ๋ฌธ์ ์๋ฏธ.
- ์๋ํ๋ ์ค ํธ์ง๊ธฐ์์ ์์ฑํ ๋ชจ๋ ๋ด์ฉ์ ํฌํจ(์ด๋ฏธ์ง, ์คํ์ผ, HTML ํฌํจ).
๊ฒฐ๊ณผ๋ฌผ
์๋ํ๋ ์ค ๊ด๋ฆฌ์ ํ์ด์ง์์ ์์ฑํ ๊ฒ์๋ฌผ(์ข)์ ๋์ ์น(์ฐ)์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.