sori.studio

์›Œ๋“œํ”„๋ ˆ์Šค์—์„œ 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 ํฌํ•จ).

 

 

๊ฒฐ๊ณผ๋ฌผ

์›Œ๋“œํ”„๋ ˆ์Šค ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ(์ขŒ)์„ ๋‚˜์˜ ์›น(์šฐ)์— ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.