웹서비스를 배포하는 방법은 무엇인가요?

How to Deploy a Web Service_
How to Deploy a Web Service_

이 문서에서는 웹서비스와 웹서비스의 장점, 웹서비스 배포 옵션, 웹서비스가 API와 비교되는 방식에 대해 설명합니다.

또한 사용자 지정 코드를 작성하지 않고도 이커머스 웹 서비스를 클라우드에 배포하는 방법을 배웁니다!

주요 내용

  • 웹 서비스의 역할 이해하기: 웹 서비스는 최신 디지털 인프라의 핵심 구성 요소로 상호 운용성, 플랫폼 독립성, 확장성 및 보안과 같은 상당한 이점을 제공합니다.
  • 배포 옵션 살펴보기: 웹 서비스 배포는 기존 호스팅, 서비스형 플랫폼(PaaS), 서비스형 컨테이너(CaaS), 서비스형 백엔드(BaaS) 등 여러 가지 방법으로 접근할 수 있습니다.
  • 클라우드에 웹 서비스 배포에 대한 가이드입니다: 이 문서에서는 코드가 필요 없는 BaaS 플랫폼을 사용하여 전자상거래 웹 서비스를 배포하는 방법에 대한 포괄적인 가이드를 제공합니다.

웹 서비스란 무엇인가요?

웹 서비스란 일반적으로 하이퍼텍스트 전송 프로토콜(HTTP)을 통해 인터넷을 통해 제공되는 소프트웨어입니다. 웹 서비스에서 제공하는 데이터는 XML, JSON, SOAP 또는 YAML과 같은 표준화된 형식입니다.

웹 서비스는 최종 고객이 직접 소비하는 것이 아니라 기계 간 통신에 사용됩니다.

예를 들어, 모바일 디바이스는 날씨 웹 서비스를 사용하여 날씨 정보를 가져온 다음 멋진 형식으로 표시합니다.

REST(표현 상태 전송), GraphQL, gRPC 등 여러 유형의 웹 서비스가 있습니다.

일반적인 웹 서비스 라이프사이클은 다음과 같습니다:

  1. 웹 서비스는 특정 포트의 일부 서버에서 수신 대기합니다.
  2. 클라이언트는 해당 포트에서 웹 서비스에 요청을 보냅니다.
  3. 웹 서비스는 요청을 수행하고 응답을 반환합니다. 응답을 처리하기 전에 서버는 요청을 인증하고 권한을 부여할 수도 있습니다.
  4. 클라이언트가 응답을 처리합니다.

웹 서비스는 플랫폼과 언어의 독립성, 재사용성, 확장성, 유연성, 느슨하게 결합되는 특성으로 잘 알려져 있습니다. 오늘날에는 거의 모든 IT 회사에서 웹 서비스를 사용하고 있습니다.

웹 서비스 대 API

웹 서비스와 API는 비슷한 용어이지만 같은 의미로 사용해서는 안 됩니다.

간단히 말해서 웹 서비스란 인터넷을 통해서만 사용할 수 있는 API를 말합니다. 즉, 모든 웹 서비스가 API이지만 모든 API가 웹 서비스인 것은 아닙니다.

웹 서비스 대 애플리케이션 프로그래밍 인터페이스(API)

API는 웹 서비스 외에도 다른 작업을 수행할 수 있습니다. 예를 들어 운영 체제 상호 작용, 로컬 애플리케이션 통신, 애플리케이션 통합 등이 있습니다.

비웹 서비스 API의 두 가지 예는 Python 파일 시스템 API와 JavaScript DOM API입니다.

웹 서비스의 장점

웹 서비스는 최신 디지털 인프라의 기본 요소로, 다양한 이점을 제공합니다. 이에 대해 이야기해 보겠습니다!

상호 운용성

웹 서비스의 주요 장점 중 하나는 서로 다른 시스템과 애플리케이션 간의 상호 운용성을 촉진할 수 있다는 점입니다.

웹 서비스는 HTTP 및 XML과 같은 표준화된 프로토콜을 준수함으로써 기본 기술 스택에 관계없이 서로 다른 소프트웨어 구성 요소 간의 원활한 통신을 가능하게 합니다.

플랫폼 독립성

웹 서비스의 또 다른 장점은 플랫폼에 완전히 독립적이라는 점입니다. 모든 프로그래밍 언어로 구현할 수 있으며 Windows, Linux, MacOS를 비롯한 모든 운영 체제에서 실행할 수 있습니다.

이전 섹션에서 언급했듯이 모든 플랫폼에서 사용할 수 있습니다.

간편하고 효율적

웹 서비스는 이해하고 구현하기 쉽습니다. 대부분의 경우 자체 상태도 갖지 않습니다. 대신 데이터베이스를 사용하거나 다른 소프트웨어 구성 요소를 활용합니다.

네트워크를 통해 기능에 액세스하는 간단한 접근 방식을 제공합니다. 이러한 단순성은 상호 작용의 일관성을 유지하여 다양한 플랫폼과 기술에서 서비스를 더 쉽게 이해하고 사용할 수 있도록 도와줍니다.

확장성

웹 서비스는 확장성이 뛰어납니다. 서버 노드에 리소스를 추가하는 수직 확장 또는 서버 노드를 추가로 생성하는 수평 확장을 통해 모든 트래픽을 수용할 수 있습니다.

이렇게 하면 컴퓨팅 리소스가 낭비되지 않도록 하여 비용을 크게 절감할 수 있습니다.

재사용 가능성

웹 서비스의 가장 큰 장점은 재사용성이 높다는 점입니다. 동일한 코드를 여러 애플리케이션에 통합하는 대신 웹 서비스의 단일 인스턴스를 모두 활용할 수 있습니다.

재사용이 가능하면 코드베이스가 더 작고 유지 관리가 쉬워지고 중앙 집중화가 개선되며 리소스를 절약할 수 있습니다.

보안

웹 서비스는 인증, 권한 부여, 암호화 및 기타 보안 조치를 활용할 수 있습니다. 대부분의 웹 서비스는 SSL/TSL 암호화를 사용하여 보호됩니다.

이 모든 것이 기밀성(발신자와 수신자만 메시지를 읽을 수 있도록 함)과 무결성(전송 중에 메시지가 수정되지 않도록 함)을 보장합니다.

웹 서비스 배포 옵션

웹 서비스는 자체 호스팅하거나 클라우드에 배포할 수 있습니다. 웹 서비스 배포에 가장 많이 사용되는 클라우드 옵션은 다음과 같습니다:

  • 서비스형 플랫폼(PaaS)
  • 서비스형 컨테이너(CaaS)
  • 서비스형 백엔드(BaaS)

각 클라우드 모델에는 프로젝트를 배포할 때 고려해야 할 장단점이 있습니다. 고려해야 할 가장 중요한 요소는 사용 편의성, 예산, 성능 및 기능입니다.

웹 서비스 호스팅 피라미드

기존 호스팅

기존 호스팅은 웹사이트와 애플리케이션을 호스팅하는 전통적인 방식입니다. 서버는 자체 호스팅하거나 호스팅 회사에서 제공할 수 있습니다.

기존 호스팅에서는 일반적으로 월별 또는 연간 단위로 서버 공간을 임대합니다.

기존 호스팅의 주요 기능은 다음과 같습니다:

  • 서버 공간 – 애플리케이션 요구 사항에 따른 다양한 서버 공간 요금제
  • 웹사이트 관리 도구 – 웹사이트 관리를 위한 사용자 친화적인 도구(예: cPanel)
  • 이메일 호스팅 — 도메인을 연결할 수 있는 이메일 호스팅 서비스
  • FTP 액세스 – FTP 또는 보안 FTP(SFTP)를 통해 서버 파일에 액세스할 수 있습니다.

기존 호스팅의 주요 장점 중 하나는 특히 소규모 웹사이트와 비즈니스에 적합한 경제적인 가격입니다.

하지만 클라우드 기반 솔루션에 비해 확장성과 유연성이 부족합니다. 또한 기존 호스팅은 설정하기가 더 어렵습니다.

서비스형 플랫폼(PaaS)

서비스형 플랫폼(PaaS)을 통해 고객은 클라우드 환경에서 애플리케이션을 생성, 관리 및 배포할 수 있습니다.

또한 PaaS 회사는 애플리케이션 생성, 사용자 지정 및 테스트를 위한 다양한 사전 구축 도구를 제공합니다.

PaaS는 IaaS에 비해 사용이 더 간단하고 시스템 관리 경험이 덜 필요합니다.

또한 로드 밸런서, 관리형 데이터베이스, 자동 백업의 이점을 누릴 수 있습니다. IaaS에 비해 PaaS는 자유도와 통제력이 떨어지고 벤더 종속의 위험이 높습니다.

서비스형 컨테이너(CaaS)

서비스형 컨테이너(CaaS)는 또 다른 인기 있는 클라우드 컴퓨팅 모델입니다. CaaS는 컨테이너화된 소프트웨어를 간단하게 개발, 실행, 배포 및 유지 관리할 수 있게 해줍니다. 이는 종종 Docker 및 Docker Compose와 결합됩니다.

대부분의 CaaS 플랫폼이 제공합니다:

  • 도커 엔진
  • 컨테이너 레지스트리
  • 확장 기능

컨테이너화된 소프트웨어의 가장 큰 장점은 어디에나 배포할 수 있다는 점입니다. 공급업체에 종속되지 않으므로 클라우드 공급업체를 자유롭게 전환할 수 있습니다. 이는 특히 웹 서비스에 유용합니다.

서비스형 백엔드(BaaS)

서비스형 백엔드(BaaS)는 인프라를 관리하고 개발의 백엔드 부분을 자동화하는 클라우드 컴퓨팅 모델입니다.

또한 실시간 데이터베이스, 파일 저장소, 소셜 미디어 통합, 이메일 및 푸시 알림 등의 기능을 제공합니다.

따라서 개발자는 인프라와 백엔드에 대한 걱정 없이 프런트엔드 제작에만 집중할 수 있습니다.

프론트엔드는 종종 BaaS 공급업체의 독점 API 및 SDK를 사용하여 구축됩니다. BaaS를 활용하면 코드베이스를 간소화하고 유지 관리의 용이성을 높일 수 있습니다.

BaaS는 백엔드 추상화 계층을 제공하면서 IaaS와 PaaS의 모든 장점을 제공합니다. BaaS를 사용하면 팀은 시장 출시 시간을 단축하고 엔지니어링 및 인력 비용을 절감할 수 있습니다.

웹 서비스를 배포하는 방법은 무엇인가요?

이 문서 섹션에서는 Back4app 플랫폼에 웹 서비스를 배포하는 방법에 대한 단계별 가이드를 제공합니다. 여기서는 Back4app의 노코드 BaaS 솔루션을 사용합니다.

사용자 지정 코드 솔루션에 관심이 있다면 다음 글을 확인하세요:

  1. Back4app 컨테이너에 Flask 웹 서비스 배포하기
  2. Back4app 컨테이너에 Node.js 웹 서비스 배포하기
  3. Back4app 컨테이너에 PHP 웹 서비스 배포하기
  4. Back4app 컨테이너에 FastAPI 웹 서비스 배포하기

Back4app이란 무엇인가요?

Back4app은 가장 인기 있는 서비스형 백엔드(BaaS) 솔루션 중 하나입니다.

이를 사용하면 개발 프로세스를 크게 가속화하고 비즈니스 로직과 프론트엔드 등 앱의 기본 요소에 집중할 수 있으며, 나머지는 Back4app이 처리합니다.

Back4app은 노코드 및 사용자 지정 코드 배포를 제공합니다. 사용이 간단하고 학습 곡선이 거의 없습니다. 초보자뿐만 아니라 숙련된 개발자에게도 적합합니다.

Back4app의 가장 큰 장점은 데이터베이스 클래스를 기반으로 RESTful 및 GraphQL API를 자동으로 생성한다는 점입니다.

또한 React, Android, iOS 등 거의 모든 인기 프로그래밍 언어 또는 프레임워크에 대한 SDK를 제공합니다!

Back4app 핵심 기능

  • 스프레드시트와 유사한 데이터베이스
  • 사용자 관리 및 인증
  • 자동 API 생성
  • Cloud Code 기능 및 일정
  • 실시간 데이터

이 글을 따라가려면 무료 Back4app 계정이 필요합니다. 계정이 없는 경우 계정을 만들 수 있습니다.

프로젝트 소개

이 글에서는 간단한 이커머스 웹 API를 구축해 보겠습니다.

API는 제품, 제품 카테고리, 구매 관리 기능을 제공합니다. 이를 통해 각 데이터베이스 클래스에 대해 생성, 읽기, 업데이트, 삭제(CRUD) 작업을 수행할 수 있습니다.

또한 클라우드 코드를 사용하여 총 판매량, 가장 인기 있는 제품 등 전자상거래 통계를 계산하는 사용자 지정 기능을 구현할 것입니다.

마지막으로 기본 제공되는 Back4app REST 및 GraphQL 콘솔을 사용하여 API를 테스트해 보겠습니다.

앱 만들기

Back4app으로 작업하려면 먼저 앱을 만들어야 합니다. 그러려면 Back4app 계정을 사용하여 인증하고 앱 대시보드에서 ‘새 앱 만들기’를 클릭합니다.

Back4app 앱 만들기

Back4app 플랫폼에서는 두 가지 유형의 앱을 배포할 수 있습니다:

  1. 서비스형 백엔드(BaaS)
  2. 서비스형 컨테이너(CaaS)

두 클라우드 컴퓨팅 모델 모두 웹 서비스를 배포할 수 있습니다.

가장 큰 차이점은 BaaS는 완전한 백엔드인 반면, CaaS는 컨테이너화된 웹 서비스를 배포할 수 있다는 점입니다.

즉, BaaS는 대부분 코드가 필요 없는 솔루션인 반면, CaaS는 사용자 지정 코드 솔루션입니다.

서비스형 백엔드(BaaS)를 사용하겠습니다.

Back4app 서비스형 백엔드(BaaS)

Back4app 애플리케이션을 만들 때 NoSQL 또는 SQL 데이터베이스 중에서 선택할 수 있습니다. 이 사용 사례에서는 중요하지 않으므로 NoSQL을 사용하겠습니다.

앱에 좋은 이름을 지정하고 “만들기”를 클릭합니다.

Back4app 앱 구성

데이터베이스, 애플리케이션 레이어, 확장, 사용자 관리 설정 등을 포함한 모든 작업을 Back4app이 처리할 때까지 기다리세요. 약 2분 정도 소요됩니다.

완료되면 데이터베이스 보기로 리디렉션됩니다.

Back4app 데이터베이스 보기

데이터베이스 디자인

이제 데이터베이스를 관리해 보겠습니다.

기본적으로 Back4app 앱에는 _Role_User 데이터베이스 클래스가 제공됩니다. 이 두 클래스는 사용자 관리 및 인증에 사용됩니다.

이러한 주제는 이 튜토리얼의 범위를 벗어난 것이지만, 다른 글에서 해당 주제에 대해 알아볼 수 있습니다.

전자상거래 웹 API를 생성하기 위해 다음과 같은 데이터베이스 구조를 만들겠습니다:

전자 상거래 데이터베이스 ER 다이어그램

먼저 ProductCategory 클래스를 생성해 보겠습니다.

사이드바에서 “클래스 추가”를 클릭하여 새 데이터베이스 클래스를 만듭니다. 이름을 “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  | true          | yes      |
+-----------------------------+-------------+---------------+----------+
| Number                      | price       | 0.0           | yes      |
+-----------------------------+-------------+---------------+----------+
| Boolean                     | inStock     | true          | yes      |
+-----------------------------+-------------+---------------+----------+

마지막으로 구매 클래스를 관리합니다:

+-----------------------------+-------------+---------------+----------+
| Type                        | Name        | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| Pointer -> Product          | product     | <leave blank> | yes      |
+-----------------------------+-------------+---------------+----------+
| Number                      | quantity    | 1             | yes      |
+-----------------------------+-------------+---------------+----------+

훌륭합니다. 데이터베이스 구조를 성공적으로 만들었습니다.

보시다시피 포인터 데이터 유형은 1:n (일대다) 관계를 처리하고, 관계 데이터 유형은 n:m (다대다) 관계를 처리합니다.

마지막으로 해야 할 일은 몇 가지 제품 카테고리, 제품 및 구매로 데이터베이스를 채우는 것입니다. 이렇게 하면 나중에 웹 서비스를 테스트하여 모든 것이 예상대로 작동하는지 확인할 수 있습니다.

데이터베이스를 채우려면 다음 두 가지 방법을 사용할 수 있습니다:

  1. 몇 가지 제품 카테고리, 제품 및 구매를 직접 생성합니다.
  2. GitHub에서 이러한 데이터베이스 내보내기를 가져옵니다(“자세히 > 가져오기 > 클래스 데이터”).

웹 서비스 사용량

웹 서비스에 연결하기 위해 Back4app은 다양한 접근 방식을 허용합니다:

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

각각을 살펴봅시다!

REST API

REST(표현 상태 전송)는 OPTIONS, GET, POST, DELETE 등과 같은 HTTP 메서드를 활용하는 HTTP 기반 프로토콜입니다.

요즘 상호작용하는 대부분의 API는 REST 기반입니다. 여러 데이터 형식을 지원하지만 가장 일반적으로 사용되는 형식은 JSON입니다.

REST는 효과적이고 확장성이 뛰어나며 플랫폼에 독립적인 프로토콜입니다. 모든 프로그래밍 언어 또는 프레임워크와 함께 사용할 수 있습니다.

주요 단점은 데이터 과다 가져오기 또는 과소 가져오기, 실시간 구독 없음, API 버전 관리 시스템이 없다는 점입니다.

REST API를 테스트하려면 “API > 콘솔 > REST”를 선택하고 다음 쿼리를 수행합니다:

Back4app REST 콘솔

이 쿼리는 다음과 같은 응답을 반환합니다:

자세한 내용은 REST API는 어떻게 구축하나요?

GraphQL API

GraphQL은 애플리케이션 프로그래밍 인터페이스(API)를 만드는 데 사용되는 서버 측 런타임 및 쿼리 언어입니다.

GraphQL을 사용하면 클라이언트가 백엔드에 의존하여 미리 정해진 데이터 집합을 제공하는 대신 API에서 특정 데이터를 요청할 수 있습니다.

유연성, 유지보수성, GraphQL 확장이라는 장점이 있습니다. 반면에 단점으로는 복잡성, 가파른 학습 곡선, 표준화 부족 등이 있습니다.

GraphQL API를 테스트하려면 “API > 콘솔 > GraphQL”을 선택하고 다음 쿼리를 수행합니다:

Back4app GraphQL 콘솔

자세한 내용은 GraphQL API는 어떻게 구축하나요?

파싱 SDK

프런트엔드가 Parse SDK가 기본적으로 지원하는 프로그래밍 언어 또는 프레임워크로 구축된 경우 Parse SDK가 권장되는 접근 방식입니다.

여기에는 리액트 네이티브, 플러터, 안드로이드, iOS, 자바스크립트, 아이오닉, 자마린이 포함됩니다.

Back4app API 연결

Parse 소프트웨어 개발 키트(SDK)는 데이터 검색, 조작, 사용자 인증, 실시간 데이터, 클라우드 코드 기능 등을 위한 클래스와 함수를 제공합니다.

JavaScript의 데이터 검색 코드 예시는 다음과 같습니다:

API 문서

Back4app의 또 다른 장점은 모든 데이터베이스 클래스에 대한 문서를 자동으로 생성한다는 점입니다.

이 문서에는 모델 설명, 실제 예제, 오류 처리 방법 등이 포함되어 있습니다.

문서를 보려면 사이드바에서 ‘API > API 참조’를 선택합니다.

Back4app 자동 문서화

클라우드 코드

자동 생성된 API는 훌륭하지만 모든 것을 할 수는 없습니다. 예를 들어 복잡한 쿼리를 수행하거나 데이터를 집계하거나 사용자 지정 코드를 실행하려면 클라우드 코드 기능을 활용해야 합니다.

클라우드 코드 함수는 Back4app의 서비스형 함수(FaaS) 제품입니다. 이를 통해 사용자 정의 JavaScript 함수를 정의할 수 있으며, API를 통해 트리거하거나 일정 시간 단위로 예약할 수 있습니다.

클라우드 코드 함수 생성

이커머스 통계를 계산하기 위한 두 가지 클라우드 코드 함수를 만들어 보겠습니다:

  1. totalRevenue() 는 구매를 집계하여 총 수익을 계산합니다.
  2. topTenPopularProducts() 는 구매를 기준으로 가장 인기 있는 제품을 반환합니다.

먼저 사이드바에서 ‘클라우드 코드 > 기능 및 웹 호스팅’으로 이동합니다.

화면이 두 개의 패널로 나뉘어 있는 것을 볼 수 있습니다. 왼쪽에는 디렉토리 구조가 있고 오른쪽에는 코드를 입력할 수 있습니다.

기본 디렉터리는 다음과 같습니다:

  1. 클라우드 코드 함수 및 기타 코드에 사용되는클라우드
  2. 백4앱이 자동으로 제공하는공개 디렉토리(정적 자산, CSS, HTML)

main.js로 이동합니다.

Back4app 클라우드 코드

그런 다음 다음 코드를 안에 넣습니다:

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

위의 코드는 개발자용 자동GPT인 Back4app 에이전트를 사용하여 생성되었습니다. 이 에이전트는 Back4app 및 Back4app 컨테이너와 긴밀하게 통합되어 있습니다. 이를 통해 앱을 만들고, 앱 설정을 수정하고, 사용자 지정 코드를 생성하는 등의 작업을 수행할 수 있습니다.

클라우드 코드 기능 테스트

이 마지막 섹션에서는 방금 구현한 클라우드 코드 기능을 테스트해 보겠습니다.

먼저 사이드바에서 ‘API > 콘솔 > 자바스크립트’를 선택한 다음 다음 코드를 붙여넣습니다:

실행하려면 화면 오른쪽 상단의 ‘실행’을 클릭합니다.

다음과 같은 응답을 받을 수 있습니다:

// `totalRevenue` output

{
  "result": 9385.389999999994
}

다른 함수를 실행하려면 totalRevenue를 topTenPopularProducts로 바꿉니다.

// `topTenPopularProducts` output

{
  "result": [
    {"objectId": "SA5mUfq9Ll", "name": "Science Fiction Novel", "count": 3},
    {"objectId": "fV0DFPFlnz", "name": "Yoga Mat", "count": 3},
    {"objectId": "gA4zn19Udo", "name": "Smartphone", "count": 2},
    {"objectId": "UKeOHJkJ7l", "name": "Winter Jacket", "count": 2},
    {"objectId": "8PodlEps2R", "name": "Espresso Machine", "count": 2},
    {"objectId": "S15WrDgrpk", "name": "Hair Dryer", "count": 2},
    {"objectId": "8O2D1egX51", "name": "4K Television", "count": 1},
    {"objectId": "RriSWMDg48", "name": "Face Cream", "count": 1},
    {"objectId": "Cq3Hqww69Q", "name": "Blender", "count": 1}
  ]
}

결론

결론적으로 웹 서비스, 웹 서비스의 장점, 배포 옵션, API와 비교하는 방법에 대해 알아보았습니다. 이제 Back4app BaaS에 자체 웹 서비스를 배포할 수 있을 것입니다.

추가 문서 리소스는 back4app-웹서비스 리포지토리에서 확인하세요.


Leave a reply

Your email address will not be published.