본문 바로가기
CMS

str api 에 대하여 (2)

by NOMADFISH 2020. 12. 26.

strapi 모토

  • strapi에 대하여 간단하게 설명한 글이 가장 많이 찾아 보는 것 같아, 좀 더 자세한 사항에 대하여 설명하는 내용을 작성한다.
  • 만약 이글이 처음 보는 strapi에 대한 것이라면 아래 글을 먼저 읽어 보고 오길 바란다. 
 

Headless cms

CMS(Contents management system)는 개발자뿐 아니라 비개발자들도 한번은 들어봤을 법한 Word Press나 Wix등과 같은 기본적인 Back-end Server, Web-server, Front End 를 직접 코드개발없이 다양한 설정과 템플..

madfishdev.tistory.com

strapi 의 모토

  • 위 이미지에서도 볼 수 있는 것과 같이 기본적으로 strapi는 빠르게 API(RestAPIs)를 디자인하고, 컨텐츠를 쉽게 관리하기 위한 back-end 생성 관리용 툴이라고 할 수 있다.
  • 보통 개발자들이 TODO list를 제공하는 서비스 Back-end를 개발하기 위한 기본적인 과정을 생각해보자.
    1. 먼저 어떤 서비스 인지 대략적인 정의를 한다.
    2. 서비스에서 필요한 기능들을 정의한다.
      • 로그인
      • TODO list 보기
      • TODO list 자세히 보기
      • TODO 추가 하기
      • TODO 삭제 하기
      • TODO 수정하기
      • TODO 검색하기
    3. 이제 TODO 데이터의 형태를 결정한다.
      • TODO 이름
      • TODO 생성 날짜
      • TODO 수정 날짜
      • TODO 내용
    4. 이제 DB 구조와 테이블을 설계 하고 생성한다.
      • Data 라는 DB를 생성하고
      • TODO라는 table를 생성하고
      • TODO 테이블에 위에 정의한 데이터 형태를 각각의 컬럼으로 생성한다.
    5. 이제 부터 백엔드 코드 개발을 시작한다. python, node, java, c#을 선택한다.
      • DB connector등으로 DB와 연결하는 코딩
      • '서비스에 필요한 기능'마다 필요한 API 설계 정의
      • DB 쿼리를 정의
      • API 마다 각 정의된 쿼리를 사용하여 API 생성
        • API Method정의
        • API Parameter정의
      • DB에서 얻은 데이터를 API response 타입으로 만든다.
      • 응답을 client로 전송한다.
  • 과정이나 코딩양을 생각해보면, 큰 기능은 아니지만 단순히 백엔드에만 들어가는 노력이 만만치 않다는걸 알 수 있다.
  • 위 기능도 기능 자체를 하나 하나 펼쳐 놓아서 그렇지, 아주 기본적인 기능은 DB의 CRUD(TODO생성, TODO읽기, 검색, TODO 수정, TODO 삭제)<->API간의 적절한 매핑이라는 사실을 알 수 있다.
  • strapi는 위 과정 중 직접 코드로 만들어 내거나, DB를 직접 정의하고 조작해야 하는 단계인 4,5 번을 직접 코딩하지 않고 strapi가 제공해주는 web cms console ui만으로 할수 있다.
  • 개발자가 정의한 구조대로 DB와 Table이 생성되며, 각 Table의 기본적인 CRUD기능이 RestAPI로 자동생성 된다. 

TODO를 예로 보면

  • 앞의 강좌들을 보면 collection이라는 게 DB 이다.
  • strapi에서 todo 라는 collection을 만들게 되면, 자동으로 /todos, /todo/[id] 에 대한 API가 GET, POST, DELETE, PUT이 각각 CRUD에 맞춰서 생성된다.
  • 직접 쿼리를 생성하고, code를 만들어서 쿼리문을 실행 시키고, 이에대한 rest api 함수를 코딩하고, json으로 바꾸고 이걸 reponse로 다시 client에 내려주는 일련의 과정이 단지 collection을 생성하고, collection에 컬럼(strapi에서는 field)만 정의하면, 생성되기 때문에, 시간과 노력이 엄청나게 줄어듬을 알 수 있다.

하지만 단점

  • 일단 직접 DB를 조작하는 것이 쉽지 않다. DB생성이나 Table조작 자체를 strapi가 전부 전담하고 있기 때문에 직접 개발자가 조작하기 어렵다. 조작이 불가능 한것은 아닌데 잘못 조작하면, 바로 에러를 발새시키고 strapi가 정상 동작 하지 않을 수도 있다.
  • DB를 열어 보면 알 수 있겠지만 외래키등을 사용해서 table간에 relation을 생성하지 않는다. 중간에 relation table을 생성해서 relation을 잡기 때문에 단순한 DB relation이라도 쓸데없은 table이 생성된다. 또한 이 중간 relation table과 다른 table등을 어떻게 쿼리 하는지 직접 볼수는 없어서, 쿼리 자체 튜닝도 조금은 어렵다
  • API에 created_at, updated_at, update_by등 필요하지 않을 수도 있는 필드가 들어가 있다. 물론 이건 소스자체를 좀 고치면 삭제가 가능은 하다.
  • 당연히 nodejs 로 직접 쿼리하여 api로 내려주는 것보다 약간은 느릴 수 있다.
  • 문서가 잘되있기는 한데, 소스를 직접 고쳐서 api나 로그인등을 튜닝하기 것이 쉽지 않다.
 

Custom admin

The headless CMS developers love.

strapi.io

 

그럼에도 불구하고

  • 장점이너무 크다, 기본으로 코딩은 거의 하지않고 CRUD기본 기능을 굉장히 매끄럽게, 쉬운 ui를 통해서 조작이 가능하다. 개발 테스트 속도는 너무나 매혹적이다.
    • 실제로 todo기능에 대한 백엔드 개발을 하려면 아무리 대충 만든다고 해도, 2~3 시간은 걸기기 마련인데, strapi는 strapi세팅 시간을 더 한다 해도 반도 걸리지 않을 정도로 빠르게 백엔드 구성이 가능하다.
  • 속도... 속도가 2~3배 느린것도 아니고, 필요에 따라 머신을 조금 늘리는 정도로 커버 가능할 것으로 생각되며, 이게 느리다고 못쓸 정도면 nodejs, strapi말고 다른 옵션(GO, C, C#,.... 등등)을 생각해 보는게 좋을 수 있다.
  • 너무 복잡한 프로젝트에 맞지는 않을 수 있지만, 마이크로 서비스가 대세인 요즘 작은 단위 프로젝로 백엔드를 쪼개고 이를 strapi여러개로 묶는다면 충분히 사용할만은 하다고 생각된다.

'CMS' 카테고리의 다른 글

strapi API Customizing  (0) 2020.12.15
strapi relation type 생성과 사용  (1) 2020.12.04
strapi Collection 생성과 사용  (0) 2020.12.03
strapi collection type 상세  (2) 2020.10.17
strapi collection type추가  (0) 2020.10.12