SEB에서 진행한 클론 코딩에서 배포까지 완성하지 못한 프론트 동료들의 아쉬움으로 함께 파이널 프로젝트를 끝낸 후 모이게 되었다.
백엔드 동료분들에게 상의 해 보았을 때 더이상 진행이 어려울 것 같다고 하였고, 백엔드 api 완성이 되지 않은 상태라 프론트 측에서 진행이 어려운 상태였다.
해서 백엔드 api를 처음부터 작성해서 진행을 하는 걸 고려하다 멘토님을 통해 Strapi(스트라피)에 대해 알게 되었다.
스트라피는 Node.js 웹 프레임워크 중 하나인 Koa를 기반으로 구현되었으며, 풀 커스터마이징이 가능한 개발자 우선(Developer-first) 오픈소스 Headless CMS 이다.
스트라피를 가볍게 사용해보니 내가 하루종일 해야하는 일을 1시간 안에 완성 시켜주는 느낌을 받았다..
스트라피는
- 빠른 개발환경 구축이 가능하다.
- 확장성이 높고, 오픈 소스 생태계가 활발하다.
- GraphQL을 지원한다.
테이블의 관계성과 수정도 자유롭고, 구현해내고 뿌듯해 하던 Oauth도 모두 (15개 정도) 지원하더라...
또 기본 설정들로 내가 놓칠 수 있는 부분(예들면 유효성)들이 잡혀있다는 것도 새싹 개발자인 나에게 찰떡같았다.
또 필요한 로직이 있다면 custom이 자유로운 부분도 좋았다.
다만 custom을 사용하였을 때 GraphQL을 사용하는 방법을 아직 이해하지 못하였다.
미디어 업데이트도 지원을 하지만, 서버가 재배포되면 DB에 저장되는 데이터와는 달리 미디어는 지워진다고 한다.
스트라피 공식 사이트에서 AWS의 S3등 다른 저장방법을 많이 소개하고 있어 큰 문제가 되는 부분은 아니었다.
스트라피를 공부하다보니 나에게 조금 생소한 단어들이 있어 정리해보았다.
Headless CMS 란?
CMS는 Content Management System의 약자이다.
전통적인 CMS와는 다르게 Headless CMS는 오로지 컨텐츠 관리만을 위한 서비스라고 한다.
기존 CMS는 뷰와 컨텐츠가 결합되어 있던 반면, Headless CMS는 REST API, GraphQL 등을 사용해서 컨텐츠 데이터를 제공한다.
내가 원하는 기술 스택 (ex : 컨텐츠 관리는 Strapi, 뷰는 React) 으로 사이트를 구성할 수 있다는 장점이 있다.
GraphQL이란?
GraphQL은 API를 위한 쿼리 언어(Query Language : 정보를 얻기 위해 보내는 질의문을 만들기 위해 사용되는 컴퓨터 언어. SQL등)이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다.
특정한 데이터베이스나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체된다.
SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
GraphQL vs REST
- GraphQL은 (보통) 하나의 엔드포인트를 가진다.
- GraphQL은 요청할 때 사용하는 쿼리에 따라 다른 응답을 받을 수 있다.
- GraphQL은 원하는 데이터(response)만 받을 수 있다.
GraphQL의 장점
- HTTP 요청 횟수를 줄일 수 있다.
- HTTP 응답 사이즈를 줄일 수 있다.
- 개발자의 부담을 덜 수 있다.
GraphQL의 단점
- 고정된 요청과 응답만 필요할 때에는 query로 인해 요청의 크기가 Restful보다 커질 수 있다.
- 캐싱이 REST보다 복잡하다.
- 파일 업로드 구현 방법이 정해져있지 않아 직접 구현해야 한다.
참고사이트 : https://medium.com/pinkfong/strapi-1년이면-풀스택을-읊는다-part-1-2-5641f5651097
'TIL & WIL > 오늘의 공부.js' 카테고리의 다른 글
PostgreSQL에 대해 알아보자 (0) | 2023.10.12 |
---|---|
클린코드와 리팩토링 (1) | 2023.10.04 |
혼자 공부하는 자바 스크립트 9-1 확인문제 (0) | 2022.12.08 |
express.js의 라우터와 미들웨어 (0) | 2022.12.08 |
Sequlize같은 ORM과 MySQL같은 데이터베이스의 차이가 무엇인가요? (0) | 2022.12.08 |