๐ Strapi = ์คํ์์ค Headless CMS
๋ง์ด ์ฐธ ์ด๋ ต๋ค... strapi๊ฐ ๋ญ๊น? ์ ํ์ํจ?
์ ์ฌ 9๊ฐ์ ์ฐจ์ ์ ์ด๋ค์ด๊ฐ๋๋ฐ, ๋ฆฌ์กํธ / ๋ฅ์คํธ js ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ ๋ฟ๋ ค์ฃผ๊ณ , ์ด๊ฒ ์ ๊ฒ ํ ์คํธ ํ๊ณ ์ถ์ด์ง๋๊ฒ ๋ง์์ง๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ ํ์ ์ ์ด๊ณ , ํ ์คํธ ํ๊ธฐ์๋ ๋ถ์กฑํ๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ๋ง๋ค์๋ ๊ณต๋ถํด์ผ ํ๋ ๊ฒ๋ค์ด ๋๋ฏ๋๋ฏ ๋~~~๋ฌด ๋ง๋ค. ์ฅ๊ณ , ๋ชฝ๊ณ DB, Node.js ์๋ฒํ๊ฒฝ ๊ตฌ์ถ.. ๋ฆฌ์กํธ์ ํ์ ์คํฌ๋ฆฝํธ, ๋ฅ์คํธ, ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋์ณ๋๊ณ ๊ณต๋ถํด์ผ ํ๋ ๊ฒ๋ค์ด ํ์ฐ๊ฐ์ ์ํฉ์์... ๊ทธ๊ฒ ๊น์ง ๊ณต๋ถํ๊ธฐ ๋ฒ ์ฐธ... (ํ๊ธฐ์์ก..๐)
๊ทธ๋์ api๋ง ์ด๋ป๊ฒ ์์ ๋นผ๋ด์ ์ธ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น.. ์๊ฐํ๊ณ ์์ ๋ strapi๊ฐ ๋ํ๋จ..
๐ ๋ ์๋ผ Strapi
๐ Strapi๋?
Bootstrap + API๋ฅผ ์ค์ฌ์ Strapi๋ผ๊ณ ํ๋ค. Strapi๋ Node.js ์น ํ๋ ์์ํฌ ์ค ํ๋์ธ Koa ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์์ผ๋ฉฐ, ํ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ ๊ฐ๋ฐ์ ์ฐ์ (Developer-first) ์คํ์์ค Headless CMS์ด๋ค.
โ Headless CMS๋?
Bootstrap + API๋ฅผ ์ค์ฌ์ Strapi๋ผ๊ณ ํ๋ค. Strapi๋ Node.js ์น ํ๋ ์์ํฌ ์ค ํ๋์ธ Koa ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์์ผ๋ฉฐ, ํ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ ๊ฐ๋ฐ์ ์ฐ์ (Developer-first) ์คํ์์ค Headless CMS์ด๋ค.
๋ง์ด ์ฐธ ์ด๋ ต๋ค. CMS๋ Content Management System์ ์ฝ์๋ก, ์ฝํ
์ธ ๊ด๋ฆฌ๋ง์ ์ํ ์๋น์ค์ด๋ค. ๊ธฐ์กด CMS๋ ๋ทฐ์ ์ฝํ
์ธ ๊ฐ ๊ฒฐํฉ๋์ด ์์ง๋ง Headless CMS
๋ ๋ด๊ฐ ์ํ๋ ๊ธฐ์ ์คํ
์ ์ฌ์ดํธ๋ก ๊ตฌ์ฑ ํ ์ ์๋ค.
โ Strapi ์ฅ์
- ๋น ๋ฅธ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถ
- ๋์ ํ์ฅ์ฑ, ์คํ์์ค ์ํ๊ณ๊ฐ ํ๋ฐ
- ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๋ฑ 15๊ฐ์ ์ธ์ฆ Provider
๋ฑ๋ฑ ๋ค๋ฅธ๊ฒ๋ค์ ์ด๋ ค์ด ๋ง๋ค์ด ๋ง์.. ๋์ค์ ๊ณต๋ถํด๋ณผ๊ป...ใ ใ
๐ Strapi install
npx create-strapi-app@latest direactory-name --quickstart yarn create strapi-app direactory-name --quickstart
์คํํ ๋๋
yarn run develop
๐ Strapi ์ฌ์ฉ๋ฐฉ๋ฒ
์ค์นํ๋ฉด http://localhost:1337/admin
์ผ๋ก ๋ค์ด๊ฐ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋ธ.
๋ค์ด๊ฐ๋ฉด ์ด๋ฐ ํ์ด์ง๊ฐ ๋ณด์.
- Content Manager : ์ด๋ค ๋ฐ์ดํฐ ์นดํ ๊ณ ๋ฆฌ๊ฐ ์๋์ง ๋ณด์ฌ์ง.
- Content-Type Builder : ๋ฐ์ดํฐ ์ง์ ์ฝ์ ํ๋ ์นดํ ๊ณ ๋ฆฌ
- Media Libarary : ์ด๋ฏธ์ง ์ ๋ก๋ ๋ชฉ๋ก
๐ Strapi + Cloudnary
ํ strapi ๋ฒ์ ์ด ๋ฐ๊ปด์ ํ๋์ ์ค์ ์ด ์์ฌ๋ผ์์ ์ ๋จน์..
https://strapi.io/blog/add-cloudinary-support-to-your-strapi-application ์๊ธฐ๋ณด๊ณ ๋ฐ๋ผํ๋ฉด๋จ,
โ ๋ฐ์ดํฐ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
์ฌ๊ธฐ์ http://localhost:1337/api/events
๋ก ๋ถ๋ฌ์ค๋ฉด
์ด๋ฐ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด์จ๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌํด์ ์์๊ฒ ๊ฐ๊ณตํด์ ์จ์ผํ๋ค. ๋ฐ๋ฐ์ดํฐ ๊ฐ๊ณต์ฒ๋ฆฌ ํ๋ ๋ฐฉ๋ฒ์
- ํ๋์ฝ๋ฉ์ผ๋ก ์ง์ ๋นผ๋ด์
page
์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ.axios
๋ก ์์ฒญ ํ interceptors๋ก ๊ฐ๋ก์ฑ์ ํ์ด์ง์ ์ ๋ฌํด ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ http://localhost:1337/api/events
๋ก ์์ฒญํ๋ฉด, ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ํฌ๋งท ์ ๋ณด๊ฐ ๋ค์ด์ ์์ง ์๋๋ค.,, ใ
ใ
๊ทธ๋์ ์ฐพ์๋ณด๋ ์ฟผ๋ฆฌ ํ๋๋ฅผ ์ถ๊ฐํด์ ๋ณด๋ด์ผ ํ๋ค.
`http://localhost:1337/api/events?populate=*`
์ด๋ ๊ฒ ์์ฒญํด์ผ ๋ชจ๋ ์ ๋ณด๊ฐ ์ ๋ค์ด์ ์๋ค! ๊ฐ์ ๋ค์ ๋ ๋ฒ์ ์ด๋, ์ง๊ธ ๋ง์ด ๋ฐ๋์ด์ 3 ๋ฌ ์ ์ฏค ๋ค์ ๋๋ ์ ๋จน์์๋๋ฐ 2์๋ฌ์ strapi ์ฌ์ดํธ์ ์ ๋์ด๋์ ํ๊ฒฐ ์์ํจ ใ ใ ใ
โ ํํฐ๋ง ๋ฐ์ดํฐ ์์ฒญ
์๊ฒ๋ ๋ฒ์ ๋ฐ๋๋ฉด์ ๋ฐ๋!
๊ณตํ์์
const qs = require('qs'); const query = qs.stringify({ filters: { username: { $eq: 'John', }, }, }, { encodeValuesOnly: true, }); await request(`/api/users?${query}`); // GET /api/users?filters[username][$eq]=John
๋ง์ฝ Throwback Thursdays with DJ Manny Duke
๋ค์์ ๊ฐ๊ณ ์๋ ์ ๋ณด๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด,
http://localhost:1337/api/events?filters[name][$eq]=Throwback Thursdays with DJ Manny Duke
์ด๋ ๊ฒ ์์ฒญํด์ผ ํ๋ค.
์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์(์์ฃผ ์ฌ์ฉ)
$eq
: ๊ฐ์$contains
: ํฌํจ$notContains
: ํฌํจํ์ง ์์$startsWith
: ์์$endWith
: -๋ก ๋๋จ
์์ธํ ์ ๋ณด => strapi filter ์ฌ์ดํธ
์ ๊ทผ๋ฐ ๋ ์ ๊ฐํธํ๊ฑฐ๊ฐ์.
์ถ์ฒ : ๋ํํฌํ์ปดํผ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ - strapi 1๋
์ด๋ฉด ํ์คํ
์ ์๋๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ Strapi = ์คํ์์ค Headless CMS), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@holicholicpop/Strapi-์คํ์์ค-Headless-CMS์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค