본문 바로가기
프로그램 (PHP,Python)

API와 DB 구축에 복잡한 설정을 Supabase로 관리 최소화

by 날으는물고기 2023. 12. 28.

API와 DB 구축에 복잡한 설정을 Supabase로 관리 최소화

Hosting Supabase on DigitalOcean - DigitalOcean Documentation

Supabase는 데이터베이스와 인증, 리얼타임 기능을 포함한 서버리스 백엔드 서비스를 제공하는 오픈 소스 플랫폼입니다. Supabase는 PostgreSQL을 기반으로 하며, 프론트엔드와 통합하여 개발자가 빠르게 웹 애플리케이션을 개발할 수 있도록 도와줍니다. 또한 Supabase는 Elixir 언어로 작성된 Phoenix 웹 프레임워크를 기반으로 하고 있습니다.

 

Supabase의 핵심 기능은 다음과 같습니다.

  1. PostgreSQL 데이터베이스: Supabase는 강력하고 확장 가능한 PostgreSQL 데이터베이스를 기반으로 합니다.
  2. 실시간 데이터: Supabase는 실시간 데이터 동기화를 제공하여 데이터베이스의 변경 사항을 실시간으로 프론트엔드에 반영할 수 있습니다.
  3. 인증 및 사용자 관리: 사용자 인증 및 관리를 간편하게 처리할 수 있습니다.

이제 Supabase를 사용하여 기반을 구축하는 방법을 설명하겠습니다.

Supabase 프로젝트 설정

  1. Supabase 계정 만들기
    Supabase 웹사이트에 가서 계정을 만들고, 대시보드에서 "Create a new project" 버튼을 클릭하여 새 프로젝트를 생성하세요.
  2. Supabase 프로젝트 API키 가져오기
    생성한 프로젝트의 설정에서 API URL과 키를 가져옵니다. 이 정보는 나중에 Phoenix 애플리케이션에서 Supabase와 통신하기 위해 사용됩니다.

Phoenix 프로젝트 설정

  1. Phoenix 프로젝트 생성
    터미널에서 아래 명령어를 사용하여 Phoenix 프로젝트를 생성하세요.
    mix phx.new my_supabase_project
  2. Supabase Elixir 라이브러리 추가
    Phoenix 애플리케이션의 mix.exs 파일에 Supabase Elixir 클라이언트 라이브러리를 추가합니다.
    {:supabase, "~> 1.0"}
  3. 환경 변수 설정
    Phoenix 프로젝트의 루트 디렉토리에 있는 .env 파일에 Supabase의 API URL과 키를 저장합니다.
    SUPABASE_API_URL=your_api_url
    SUPABASE_API_KEY=your_api_key
  4. 환경 변수 로딩
    config/config.exs 파일에서 System.fetch_env!/1 함수를 사용하여 환경 변수를 로드합니다.
    config :my_supabase_project, MySupabaseProject.Repo,
      url: System.fetch_env!("DATABASE_URL"),
      ...
  5. Supabase 클라이언트 초기화
    Phoenix 애플리케이션의 어떤 모듈에서든 Supabase 클라이언트를 초기화합니다.
    {:ok, supabase} = Supabase.init(api_url: System.get_env("SUPABASE_API_URL"), api_key: System.get_env("SUPABASE_API_KEY"))
  6. Supabase를 통한 데이터 작업
    Supabase 클라이언트를 사용하여 데이터베이스 쿼리 및 실시간 업데이트를 처리합니다.
    {:ok, response} = Supabase.query(supabase, "SELECT * FROM my_table")
  7. 웹 소켓 연결
    Phoenix에서 Supabase의 실시간 기능을 사용하려면 웹 소켓을 설정하고 이벤트를 처리해야 합니다. lib/my_supabase_project_web/channels/user_socket.ex 파일을 열어서 설정하세요.
  8. 프론트엔드 연동
    Phoenix 프로젝트의 assets/js 디렉토리에 있는 JavaScript 파일을 수정하여 Supabase 클라이언트를 사용하여 데이터를 구독하고 업데이트를 처리합니다.

이러한 단계를 따르면 Supabase와 Phoenix를 결합하여 강력하고 확장 가능한 웹 애플리케이션을 구축할 수 있습니다. 초보자에게는 각 단계에서 발생하는 어려움에 대비하여 관련 문서 및 자료를 찾아보시는 것도 좋습니다.

 

SendGrid, Packer, Terraform을 함께 사용하여 웹 애플리케이션을 구성하는 방법에 대해 간략히 설명하겠습니다. 이 프로세스는 이메일 서비스로 SendGrid를 사용하고, Packer로 서버 이미지를 빌드하며, Terraform으로 클라우드 인프라를 프로비저닝하는 과정을 다룹니다.

1. SendGrid 설정

  1. SendGrid 계정 만들기
    SendGrid 웹사이트에서 계정을 만들고 API 키를 생성합니다.
  2. API 키 저장
    SendGrid API 키를 안전한 곳에 저장하고 나중에 사용할 수 있도록 합니다.

2. Packer를 사용하여 서버 이미지 빌드

  1. Packer 설치
    Packer 다운로드 페이지에서 Packer를 다운로드하고 설치합니다.
  2. Packer 템플릿 작성
    프로젝트 루트 디렉토리에 packer.json 파일을 생성하고, 서버 이미지 빌드에 필요한 정보를 기술합니다.
    {
      "variables": {
        "sendgrid_api_key": ""
      },
      "builders": [
        {
          "type": "amazon-ebs",
          "access_key": "{{user `aws_access_key`}}",
          "secret_key": "{{user `aws_secret_key`}}",
          "region": "us-west-2",
          "source_ami_filter": {
            "filters": {
              "virtualization-type": "hvm",
              "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
              "root-device-type": "ebs"
            },
            "owners": ["099720109477"],
            "most_recent": true
          },
          "instance_type": "t2.micro",
          "ssh_username": "ubuntu",
          "ami_name": "packer-example {{timestamp}}"
        }
      ],
      "provisioners": [
        {
          "type": "shell",
          "inline": [
            "sudo apt-get update",
            "sudo apt-get install -y apache2"
          ]
        }
      ]
    }
  3. Packer 빌드
    터미널에서 아래 명령어로 Packer를 실행하여 서버 이미지를 빌드합니다.
    packer build -var 'sendgrid_api_key=<YOUR_SENDGRID_API_KEY>' packer.json

3. Terraform을 사용하여 클라우드 인프라 프로비저닝

  1. Terraform 설치
    Terraform 다운로드 페이지에서 Terraform을 다운로드하고 설치합니다.
  2. Terraform 설정 파일 작성
    프로젝트 루트 디렉토리에 main.tf 파일을 생성하고, 필요한 클라우드 프로바이더 및 리소스를 정의합니다.
    provider "aws" {
      region = "us-west-2"
    }
    
    resource "aws_instance" "example" {
      ami           = "<AMI_ID_FROM_PACKER>"
      instance_type = "t2.micro"
    
      user_data = <<-EOF
                  #!/bin/bash
                  echo "sendgrid_api_key=<YOUR_SENDGRID_API_KEY>" >> /etc/environment
                  systemctl restart apache2
                  EOF
    }
  3. Terraform 초기화 및 실행
    터미널에서 아래 명령어로 Terraform을 초기화하고 실행합니다.Terraform이 실행되면 AWS 인스턴스가 생성되고, 사용자 데이터 스크립트가 실행되어 SendGrid API 키를 환경 변수에 추가하고 Apache 서버를 재시작합니다.
    terraform init
    terraform apply

요약

  1. SendGrid 설정
    • SendGrid 계정 생성 및 API 키 획득.
  2. Packer를 사용하여 서버 이미지 빌드
    • Packer를 설치하고 서버 이미지 빌드를 위한 템플릿을 작성하고 실행.
  3. Terraform을 사용하여 클라우드 인프라 프로비저닝
    • Terraform을 설치하고 AWS 인스턴스 및 기타 리소스를 프로비저닝.

이러한 과정을 따르면 SendGrid를 이용하여 이메일 서비스를 구성하고, Packer와 Terraform을 통해 서버 이미지를 빌드하고 클라우드 인프라를 프로비저닝할 수 있습니다. 개발 및 운영 과정에서 보다 복잡한 시나리오에 따라 각 도구의 활용법을 익히는 것이 중요합니다.

728x90

댓글