백엔드 인프라란 무엇인가요?

Back4app 백엔드 인프라 커버

백엔드를 설계할 때 적절한 백엔드 인프라를 선택하는 것은 매우 중요합니다. 백엔드의 성능, 유연성, 유지보수성 등에 영향을 미칠 수 있기 때문입니다.

이 글에서는 백엔드 인프라가 무엇인지 설명하고, 다양한 유형의 백엔드 인프라를 살펴보고, 결정을 내릴 때 기억해야 할 필수 요소에 대해 설명합니다.

또한 Back4app을 사용하여 백엔드 인프라를 만드는 방법도 살펴봅니다.

목표

이 글이 끝날 무렵에는 이렇게 할 수 있을 것입니다:

  • 백엔드 인프라가 무엇인지 설명하세요.
  • 다양한 유형의 백엔드 인프라(IaaS, PaaS, BaaS 포함)에 대해 논의하세요.
  • 프로젝트에 적합한 백엔드 인프라 선택
  • Back4app을 사용하여 자체 백엔드 구축

백엔드 인프라란 무엇인가요?

백엔드 인프라는 백엔드 시스템을 지원하는 소프트웨어와 하드웨어 구성 요소의 조합입니다. 여기에는 서버, 컨테이너, 네트워킹 구성 요소, 방화벽 및 기타 리소스가 포함됩니다.

백엔드 인프라는 고가용성, 확장, 로드 밸런싱, 보안, 라우팅 등을 담당합니다. 백엔드 인프라는 원활한 사용자 경험을 제공할 수 있도록 설계되어야 합니다.

백엔드 인프라를 선택할 때 고려해야 할 사항은 무엇인가요?

백엔드 인프라를 선택할 때 고려해야 할 필수 요소에 대해 논의해 보겠습니다.

속도

속도는 백엔드 인프라의 중요한 특성 중 하나입니다. 사용자는 앱이 가능한 한 원활하게 작동하기를 원합니다. 따라서 백엔드 통신을 위해 클라이언트 측을 최적화해야 합니다.

통신 지연에 대한 인식을 완화하기 위해 몇 가지 영리한 트릭을 사용할 수 있습니다. 예를 들어 사용자 인터페이스에 스켈레톤 화면, 로딩 바, 디스플레이 팁 및 요령을 구현할 수 있습니다.

속도 또한 SEO에서 가장 중요한 요소 중 하나입니다.

유연성

유연성이란 백엔드 인프라가 지원하는 프로그래밍 언어, 프레임워크 및 기타 기술(예: 데이터베이스)을 의미합니다. 백엔드 인프라를 선택할 때는 다양한 기술을 지원하는 것을 선택해야 합니다.

확장성

앱 제작을 시작하는 순간부터 확장성을 고려해야 합니다. 앱이 어떻게 사용될지 생각해 보세요. 사용자 수가 꾸준할까요, 아니면 가끔씩 사용자가 급증할까요?

백엔드 인프라는 극한의 워크로드를 수용할 수 있는 방식으로 구축되어야 합니다. 서버 비용을 최소화하려면 애플리케이션 인스턴스를 즉시 생성하고 삭제할 수 있어야 합니다.

유지 관리 가능성

앱을 개발하고 게시하는 것은 작업의 80%에 불과합니다. 그 이후에는 애플리케이션을 유지 관리하는 데 많은 시간을 투자해야 합니다. 서버 소프트웨어를 업데이트하고 보안 패치를 배포하는 것은 가능한 한 쉬워야 합니다.

CI/CD 시스템이 내장된 백엔드 인프라를 선택하거나 직접 구현하세요.

DevOps 요구 사항

일부 유형의 백엔드 인프라는 사용하기가 더 어렵습니다. 관리할 시간과 리소스가 있는 백엔드 인프라를 선택하세요. IaaS와 같은 낮은 수준의 백엔드 인프라를 사용하기로 결정했다면 이를 관리할 전문 DevOps 팀이 필요합니다.

보안

사용자의 데이터를 안전하게 보호할 책임은 전적으로 회원님에게 있습니다. 사이버 공격이 증가함에 따라 백엔드 인프라가 최신 보안 표준을 따르고 있는지 확인해야 합니다.

강력한 자동 생성 비밀번호를 사용하고, 방화벽을 설정하고, 서버에서 신뢰할 수 없는 소프트웨어를 실행하지 않으며, 정기적인 보안 검사를 수행하는 등의 조치를 취하세요.

백엔드 인프라 유형

서버(소위 기존 인프라)를 사용하거나 클라우드 인프라를 활용하여 백엔드를 배포할 수 있습니다.

지난 10년 동안 많은 기업이 클라우드 모델로 전환한 이유는 시간과 비용을 절약할 수 있기 때문입니다.

가장 인기 있는 몇 가지를 분석해 보겠습니다.

서비스형 인프라 또는 IaaS

서비스형 인프라(IaaS)는 가장 추상화된 클라우드 컴퓨팅 모델입니다. 이 모델에서는 클라우드 공급업체가 서버, 스토리지, OS 및 네트워킹 구성 요소와 같은 컴퓨팅 리소스를 가상화된 환경에서 제공합니다.

IaaS는 2010년부터 존재해 왔으며 여전히 가장 인기 있는 클라우드 컴퓨팅 모델입니다. 장점으로는 뛰어난 확장성, 높은 수준의 제어, 가격 효율성 등이 있습니다. 반대로 단점은 다른 클라우드 모델에 비해 관리가 복잡하고 유지보수 비용이 높다는 점입니다.

서비스형 플랫폼 또는 PaaS

서비스형 플랫폼(PaaS)은 사용자 친화적인 애플리케이션 개발, 관리 및 제공 환경을 제공하는 클라우드 컴퓨팅 모델입니다. 다양한 앱 개발 도구가 내장되어 있어 앱을 쉽게 시작하고 실행할 수 있습니다.

PaaS는 인프라 관리를 간소화하여 더 빠른 시장 진입, 보안 강화, 비용 절감, 확장성, 고가용성, 코딩 감소 등의 이점을 제공합니다. 반면에 공급업체의 기능에 종속되고, 공급업체 종속 위험이 있으며, 유연성과 제어가 제한될 수 있습니다.

서비스형 백엔드 또는 BaaS

서비스형 백엔드(BaaS)는 서버 측 개발과 클라우드 인프라 관리를 자동화합니다. 실시간 데이터베이스, 사용자 관리, 인증, 알림, 소셜 미디어 통합 등의 기능을 제공합니다.

BaaS는 개발자가 백엔드 걱정에서 벗어나 프론트엔드 및 핵심 비즈니스에 집중할 수 있도록 해줍니다. BaaS는 IaaS 및 PaaS의 장점과 백엔드 추상화를 결합하여 시장 출시 시간을 단축하고 비용을 절감합니다. 단점은 통제력이 부족하고 공급업체 종속의 위험이 있으며 상대적으로 비용이 많이 든다는 점입니다.

서비스형 컨테이너 또는 CaaS

서비스형 컨테이너(CaaS)는 컨테이너를 업로드, 빌드, 확장 및 관리하기 위한 클라우드 컴퓨팅 모델입니다. CaaS에는 일반적으로 컨테이너 런타임, 컨테이너 레지스트리, 자동 확장 기능, 빌트인 CI/CD 시스템, 로드 밸런싱 등이 포함됩니다!

CaaS는 컨테이너 처리를 간소화하여 기본 인프라에 대한 걱정을 덜어줍니다. 민첩한 개발을 장려하고 마이크로서비스 아키텍처를 촉진하며 확장성이 뛰어난 애플리케이션의 생성을 가속화합니다.

백엔드 인프라를 만드는 방법은 무엇인가요?

이 글의 이 부분에서는 Back4app을 사용하여 백엔드 인프라를 만들겠습니다.

Back4app이란 무엇인가요?

Back4app은 탁월한 서비스형 백엔드(BaaS) 플랫폼입니다. 이를 통해 웹 및 모바일 애플리케이션용 백엔드를 빠르게 구축할 수 있습니다.

이 플랫폼은 오픈 소스 기술을 사용하여 구축되었으며 많은 기능을 갖추고 있습니다. 스프레드시트와 같은 데이터베이스, 파일 저장소, 사용자 관리, 인증, 자동 생성 API, 알림 등의 기능을 제공합니다!

Back4app을 사용하면 출시 기간을 크게 단축할 수 있습니다. 이를 활용하면 백엔드나 기본 인프라에 대해 걱정하지 않고 비즈니스의 핵심에 집중할 수 있습니다.

전문 DevOps 엔지니어가 필요하지 않으며 유지 관리 비용도 절감됩니다.

Back4app의 가장 좋은 점은 무료 티어가 제공된다는 것입니다. 무료 티어는 플랫폼을 테스트하거나 펫 프로젝트를 호스팅하는 데 적합합니다. 앱이 성공하면 프리미엄 티어로 업그레이드할 수 있습니다.

백4앱에 대해 자세히 알아보려면 백4앱이란 무엇인가?

프로젝트 개요

백엔드를 만드는 방법을 보여드리기 위해 간단한 이커머스 백엔드 서비스를 구축해 보겠습니다. 백엔드를 통해 제품, 카테고리, 주문을 관리할 수 있습니다.

프로젝트의 ER 다이어그램은 다음과 같습니다:

Back4app 이커머스 ER 다이어그램

최소한의 코드로 백엔드를 만들고 이를 클라이언트 측에서 어떻게 사용할 수 있는지( SDK, REST API 및 GraphQL API를 통해) 시연해 보겠습니다.

앱 만들기

팔로우하려면 백4앱 계정이 필요합니다. 계정이 필요하신가요? 지금 바로 가입하세요!

Back4app 계정에 로그인하면 앱 목록이 표시됩니다. “앱 빌드” 버튼을 클릭하여 앱 빌드 프로세스를 시작합니다.

Back4app 앱 만들기

다음으로 백엔드를 설정하는 것이므로 ‘BaaS’를 선택합니다.

Back4app 서비스형 백엔드

앱 이름을 선택하고 “NoSQL”을 선택한 다음 앱을 만듭니다.

Back4app BaaS 구성

Back4app은 모든 것을 설정하는 데 시간이 좀 걸립니다. 애플리케이션 계층, 데이터베이스, 백업, 확장 등을 처리합니다.

앱이 빌드되면 앱의 실시간 데이터베이스로 이동합니다.

Back4app 데이터베이스 보기

데이터베이스 설정

이제 애플리케이션을 만들었으니 데이터베이스를 관리해 보겠습니다.

먼저 데이터베이스에 데이터를 저장할 클래스를 만들어야 합니다. 클래스는 테이블(SQL 용어) 또는 모델(ORM 용어)로 볼 수 있습니다. 각 클래스에는 기본적으로 다음 네 가지 필드가 있습니다:

+-------------+-------------+------------------------------------------+
| Type        | Name        | Description                              |
+-------------+-------------+------------------------------------------+
| String      | objectId    | Object's unique identifier               |
+-------------+-------------+------------------------------------------+
| Date        | updatedAt   | Date time of the last update             |
+-------------+-------------+------------------------------------------+
| Date        | createdAt   | Date time of creation                    |
+-------------+-------------+------------------------------------------+
| ACL         | ACL         | Access Control List                      |
+-------------+-------------+------------------------------------------+

프로젝트 개요에서 언급했듯이 프로젝트에는 세 개의 클래스가 있습니다. 사이드바에서 “클래스 만들기” 버튼을 클릭하여 첫 번째 클래스를 만듭니다. 이름을 ProductCategory로 지정합니다:

Back4app 데이터베이스 클래스 생성

다음 필드를 추가합니다:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String                      | name        | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| String                      | description | <leave blank> | no       |
+-----------------------------+-------------+---------------+----------+

제품 클래스에 대해 동일한 단계를 수행합니다:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String                      | name        | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| String                      | description | <leave blank> | no       |
+-----------------------------+-------------+---------------+----------+
| Relation -> ProductCategory | categories  | <leave blank> | no       |
+-----------------------------+-------------+---------------+----------+
| Number                      | price       | 0             | yes      |
+-----------------------------+-------------+---------------+----------+

다대다 관계를 처리하기 위해 Relation 데이터 유형을 사용했습니다.

마지막으로 Order 클래스를 생성합니다:

+-----------------------------+------------+---------------+----------+
| Data type                   | Name       | Default value | Required |
+-----------------------------+------------+---------------+----------+
| Pointer -> Product          | product    | <leave blank> | yes      |
+-----------------------------+------------+---------------+----------+
| String                      | cFirstName | <leave blank> | yes      |
+-----------------------------+------------+---------------+----------+
| String                      | cLastName  | <leave blank> | yes      |
+-----------------------------+------------+---------------+----------+
| String                      | cAddress   | <leave blank> | yes      |
+-----------------------------+------------+---------------+----------+
| Number                      | delivered  | false         | yes      |
+-----------------------------+------------+---------------+----------+

일대다 관계를 처리하기 위해 포인터 데이터형을 사용했습니다.

완료되면 사이드바에 클래스가 표시됩니다.

데이터베이스 채우기

이제 데이터베이스를 채워 보겠습니다.

먼저 몇 가지 제품 카테고리, 제품, 주문을 생성합니다(이 순서대로). 아이디어가 떠오르지 않는다면 이 고정 장치를 자유롭게 가져와도 됩니다.

JSON 파일을 가져오려면 “추가 옵션 > 가져오기 > 클래스 데이터 > 파일 선택”을 사용합니다. 다음 순서대로 JSON 파일을 가져와야 합니다:

  1. ProductCategory.json
  2. Product.json
  3. _Join꞉categories꞉Product.json
  4. Order.json
Back4app 클래스 데이터 가져오기

완료되면 데이터베이스에 몇 가지 제품, 카테고리 및 주문이 있어야 합니다. 이 단계는 이후 단계에서 백엔드를 테스트하기 위해 일부 데이터가 필요하기 때문에 필수입니다.

데이터베이스 보안

기본적으로 데이터베이스 클래스는 ‘보호 모드’로 생성됩니다. 보호 모드에서는 마스터 키를 사용해야만 개체를 상호 작용하고 관리할 수 있습니다. 이는 클라이언트 측에서 개체를 가져오거나 관리할 수 없기 때문에 최적이 아닙니다.

그러기 위해서는 몇 가지 제한을 완화해야 합니다. Back4app/Parse에는 두 가지 제한 메커니즘이 있습니다:

  1. 클래스 수준 권한(CLP)
  2. 액세스 수준 권한(ACL)

CLP를 사용하면 클래스 수준에서 제한을 적용할 수 있고, ACL을 사용하면 개체 수준에서 제한을 적용할 수 있습니다. 두 메커니즘 모두 클래스 또는 개체를 특정 역할 또는 사용자로 제한할 수 있습니다.

사이드바에서 제품 클래스를 선택하고 화면 상단의 ‘보호됨’ 텍스트를 클릭합니다. 그런 다음 CLP를 수정합니다:

Back4app 제품 카테고리 및 제품 CLP

제품 카테고리 모델에 대해 동일한 단계를 수행합니다.

그런 다음 주문 클래스에 대한 CLP를 업데이트합니다:

백4앱 주문 CLP

이미지에 주목하세요. 여기에서는 만들기 권한도 활성화되어 있습니다.

새 CLP에서는 인증되지 않은 사용자가 제품제품 카테고리를가져오고, 쿼리하고, 계산할 수 있지만 수정할 수는 없습니다. Order 클래스에도 동일하게 적용되지만 여기서는 사용자가 새 주문을 생성할 수도 있습니다.

자세한 내용은 서버 보안 분석 문서를 참조하세요.

관리자 앱

현재 데이터베이스에서 개체를 관리하는 유일한 방법은 데이터베이스 보기를 사용하는 것입니다. 이는 개발자에게는 효과적이지만 기술 전문가가 아닌 사용자에게는 직관적이지 않습니다. 게다가 사용자에게 너무 많은 제어 권한을 부여하고 인적 오류가 발생하기 쉽습니다.

다행히도 Back4app을 사용하면 “관리자 앱” 기능을 쉽게 활성화할 수 있습니다. 관리자 앱은 데이터베이스 클래스에 맞게 조정된 사용하기 쉬운 관리 패널입니다.

먼저 사이드바에서 ‘더보기 > 관리자 앱’으로 이동하여 활성화합니다. 그런 다음 “사용”을 클릭합니다:

Back4app 관리자 앱 활성화

Back4app에서 사용자 이름, 비밀번호, 하위 도메인을 선택하라는 메시지가 표시됩니다. 저는 다음과 같이 결정했습니다:

user:        root
pass:        complexpassword123
subdomain:   https://binfra.admin.back4app.com/

좋아요, 그거면 충분합니다.

“관리자 앱 URL”을 클릭하면 관리자 패널에 액세스할 수 있습니다. 클릭하면 새 브라우저 창이 열리고 관리자 자격 증명을 입력하라는 메시지가 표시됩니다. 로그인하면 개체를 만들고, 업데이트하고, 삭제할 수 있습니다.

대시보드에 익숙해지려면 대시보드를 사용해 보세요.

Back4app 관리자 앱 대시보드

클라우드 코드

Back4app을 사용하면 소위 클라우드 코드를 통해 사용자 정의 자바스크립트 코드를 실행할 수 있습니다. 클라우드 코드를 사용하면 파싱, HTTP 요청에 의해 트리거되거나 주기적으로 실행될 수 있는 함수를 정의할 수 있습니다. 또한 클라우드 코드는 Express를 사용하여 웹 애플리케이션을 빌드하는 데 사용할 수 있습니다.

클라우드 코드 기능

현재 매출을 계산하는 클라우드 코드 함수가 필요하다고 가정해 보겠습니다.

먼저 사이드바에서 ‘클라우드 코드 > 기능 및 웹 호스팅’으로 이동합니다. 클라우드 코드 보기가 두 부분으로 나뉘어 있는 것을 볼 수 있습니다. 왼쪽에는 디렉토리 구조가, 오른쪽에는 코드가 표시됩니다.

Back4app 클라우드 코드

다음으로 cloud/main.js를 열고 다음 코드를 붙여넣습니다:

// cloud/main.js

Parse.Cloud.define("calculateSales", async (request) => {
  const orderClass = Parse.Object.extend("Order");
  const orderQuery = new Parse.Query(orderClass);
  let sales = 0;

  try {
    const orders = await orderQuery.find();

    for (var i = 0; i < orders.length; i++) {
      let order = orders[i];
      let productId = order.get("product")["id"];

      const productClass = Parse.Object.extend("Product");
      const productQuery = new Parse.Query(productClass);
      const product = await productQuery.get(productId);

      sales += product.get("price");
    }
    return { 
      sales: sales,
    };
  } catch (error) {
    console.error("Error calculating the sales: " + error.message);
    return {
      sales: 0,
    }
  }
});

Parse.Cloud.job("printSales", async (request, status) => {
  try {
    const result = await Parse.Cloud.run("calculateSales");
    console.log("Sales: " + result.sales + "$");
  } catch (error) {
    console.error("Error calculating the sales: " + error.message);
  }
});
  1. 계산 판매()라는 클라우드 코드 함수를 정의했습니다. 이 함수는 모든 주문을 반복하여 해당 제품을 가져온 다음 가격을 합산합니다.
  2. 인쇄 판매()라는 클라우드 코드 작업을 정의하여 Parse 대시보드에서 함수를 실행하고 주기적으로 예약할 수 있도록 했습니다.

마지막으로 ‘배포’를 클릭하여 클라우드 코드를 배포합니다.

사이드바에서 “클라우드 코드 > 작업”으로 이동한 다음 printSales() 작업을 실행하여 작업이 작동하는지 확인합니다. 모든 것이 정상적으로 작동하면 로그를 확인할 때 Sales: 1440$와 같은 메시지가 표시됩니다.

클라우드 코드 스케줄링

작업을 예약하려면 사이드바에서 “앱 설정 > 서버 설정”으로 이동해야 합니다. “백그라운드 작업”까지 아래로 스크롤하여 “작업 예약”을 클릭한 다음 양식을 작성합니다.

Back4app 예약 작업

작동하는지 확인하려면 로그를 다시 한 번 확인하세요.

클라이언트 측

Back4app 기반 백엔드와 상호 작용하는 방법에는 여러 가지가 있습니다:

  1. 파싱 SDK
  2. RESTful API(자동 생성)
  3. GraphQL API(자동 생성)

일반적으로 플랫폼에서 사용할 수 있는 경우 항상 Parse SDK를 사용해야 합니다. 그렇지 않은 경우 RESTful API 또는 GraphQL API를 사용하세요. API 간의 선택은 데이터에 따라 달라집니다.

문서를 확인하여 다양한 프레임워크에서 Parse SDK를 사용하는 방법을 알아보세요.

하지만 기본 제공 REST 콘솔을 사용하여 백엔드를 테스트해 보겠습니다.

사이드바의 ‘API > REST’로 이동하여 양식을 작성하여 모든 제품을 쿼리해 보세요:

Back4app REST 콘솔

비슷한 답변을 받으실 수 있습니다:

{
    "results": [
        {
            "objectId": "4ZyHH3X0RQ",
            "name": "Fitness Tracker Watch",
            "description": "...",
            "price": 80,
            "createdAt": "2023-10-17T20:03:55.424Z",
            "updatedAt": "2023-10-17T20:24:12.322Z",
            "categories": {
                "__type": "Relation",
                "className": "ProductCategory"
            }
        },
        {
            "objectId": "cDqlGJzT5U",
            "name": "Organic Fruit Basket",
            "description": "...",
            "price": 40,
            "createdAt": "2023-10-17T20:04:10.063Z",
            "updatedAt": "2023-10-17T20:24:00.382Z",
            "categories": {
                "__type": "Relation",
                "className": "ProductCategory"
            }
        },
    // ...
}

다음 쿼리를 수행해 보세요:

  1. 50보다 비싼 모든 제품 가져오기
  2. 아직 배송되지 않은 모든 주문 가져오기
  3. 새 제품을 생성하고 카테고리를 추가합니다.
  4. 주문 삭제

결론

결론적으로 이제 백엔드 인프라가 무엇인지 알고, 다양한 유형의 백엔드 인프라에 익숙해졌으며, 프로젝트에 적합한 인프라를 선택하는 방법을 알게 되었습니다.

또한 Back4app에서 백엔드 인프라를 만드는 방법을 배웠습니다. 데이터베이스, 데이터베이스 보안, 사용자 지정 코드, 작업 스케줄링 및 API 테스트를 처리했습니다.

Back4app 기반 백엔드를 위한 클라이언트 측을 만드는 방법에 대한 지침은 다른 문서를 참조하세요:

  1. 프론트엔드 및 백엔드를 호스팅하는 방법은 무엇인가요?
  2. 소셜 미디어 앱을 개발하는 방법은 무엇인가요?
  3. React를 사용하여 챗봇을 구축하는 방법은 무엇인가요?

추가 문서 리소스는 GitHub 리포지토리에 오픈 소스되어 있습니다.


Leave a reply

Your email address will not be published.