본문 바로가기
Dart/Dart Server

[고급] Dart 서버 서버 배포 및 운영 / CI/CD 파이프라인 설정과 자동화 배포

by Maccrey Coding 2024. 9. 17.
반응형

 

CI/CD(지속적 통합 및 지속적 배포)는 소프트웨어 개발 프로세스를 효율적으로 관리하는 중요한 방법론입니다.

이를 통해 개발자들은 코드 변경 사항을 자동으로 테스트하고 배포할 수 있으며, 안정적이고 신속한 배포가 가능합니다.

이번 블로그에서는 Dart 서버 애플리케이션을 위한 CI/CD 파이프라인 설정과 자동화 배포를 초보자가 이해할 수 있도록 단계별로 설명하겠습니다.

1. CI/CD 개요

CI (지속적 통합): 개발자가 코드 변경 사항을 중앙 저장소에 통합할 때마다 자동으로 빌드하고 테스트하는 프로세스입니다. 이 과정을 통해 버그를 조기에 발견하고, 코드 품질을 유지할 수 있습니다.

 

CD (지속적 배포): CI 과정에서 테스트가 통과한 코드를 자동으로 프로덕션 환경에 배포하는 프로세스입니다. 이 과정을 통해 새로운 기능이나 버그 수정을 사용자에게 빠르게 제공할 수 있습니다.

2. Dart 서버 애플리케이션 준비하기

먼저, Dart 서버 애플리케이션을 준비합니다. 아래는 간단한 Dart HTTP 서버 애플리케이션 코드입니다.

Dart 서버 애플리케이션 코드

import 'dart:io';

void main() {
  final server = HttpServer.bind(InternetAddress.anyIPv4, 8080);
  server.then((HttpServer httpServer) {
    print('서버가 ${httpServer.address.address}:${httpServer.port}에서 실행 중입니다.');

    httpServer.listen((HttpRequest request) {
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    print('서버 실행 오류: $e');
  });
}

이 코드는 HTTP 서버를 8080 포트에서 실행하고, 모든 요청에 대해 "안녕하세요! Dart 서버입니다."라는 응답을 반환합니다.

3. GitHub Actions를 이용한 CI/CD 파이프라인 설정하기

GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 코드 변경 시 자동으로 빌드, 테스트, 배포를 수행할 수 있습니다.

GitHub Actions를 사용하여 Dart 서버 애플리케이션의 CI/CD 파이프라인을 설정하는 방법을 알아보겠습니다.

GitHub Actions 소개

GitHub Actions는 다양한 작업을 정의하여 GitHub 저장소에서 직접 CI/CD 파이프라인을 구축할 수 있게 해주는 도구입니다. 워크플로우 파일을 통해 자동화 작업을 설정할 수 있습니다.

GitHub Actions 워크플로우 설정

1. 저장소 준비하기

GitHub에서 새로운 저장소를 생성하거나 기존 저장소를 사용합니다. Dart 애플리케이션의 소스 코드가 저장소에 포함되어 있어야 합니다.

 

2. 워크플로우 파일 작성하기

.github/workflows 디렉토리에 CI/CD 파이프라인을 정의하는 YAML 파일을 작성합니다. 아래는 Dart 서버 애플리케이션을 위한 예제 워크플로우 파일(ci-cd.yml)입니다.

name: Dart CI/CD Pipeline

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Dart
        uses: dart-lang/setup-dart@v1
        with:
          sdk: stable

      - name: Install dependencies
        run: dart pub get

      - name: Run tests
        run: dart test

      - name: Build server
        run: dart compile exe bin/server.dart -o bin/server
        
      - name: Deploy to AWS
        if: github.event_name == 'push'
        run: |
          aws s3 cp bin/server s3://your-bucket-name/bin/server

설명

  • on: 워크플로우가 실행되는 조건을 설정합니다. 예를 들어, push나 pull_request가 발생할 때마다 실행됩니다.
  • jobs: 여러 작업을 정의할 수 있습니다. build 작업을 정의하여 Dart 애플리케이션을 빌드하고 테스트합니다.
  • steps: 각 작업의 단계들을 정의합니다. 코드 체크아웃, Dart SDK 설정, 의존성 설치, 테스트 실행, 빌드 및 배포가 포함됩니다.

4. 배포 자동화

CI/CD 파이프라인을 설정한 후, 자동으로 배포하는 방법을 설명합니다. 아래는 AWS EC2와 Google Cloud Compute Engine으로의 자동화 배포 방법입니다.

AWS EC2로의 자동화 배포

1. S3에 빌드된 서버 업로드하기

GitHub Actions 워크플로우에서 이미 설정한 것처럼, 빌드된 서버 파일을 AWS S3에 업로드합니다. 이후 EC2 인스턴스에서 이 파일을 다운로드하고 실행할 수 있습니다.

 

2. EC2 인스턴스에서 배포 스크립트 실행하기

EC2 인스턴스에서 파일을 다운로드하고 서버를 실행하는 스크립트를 작성합니다. 예를 들어, deploy.sh 파일을 작성하여 EC2 인스턴스에 배포 스크립트를 추가할 수 있습니다.

#!/bin/bash
aws s3 cp s3://your-bucket-name/bin/server /home/ubuntu/bin/server
chmod +x /home/ubuntu/bin/server
nohup /home/ubuntu/bin/server > /var/log/server.log 2>&1 &

이 스크립트는 S3에서 파일을 다운로드하고 실행합니다.

 

3. EC2 인스턴스에 배포 스크립트 자동 실행 설정하기

GitHub Actions에서 EC2 인스턴스에 SSH로 접속하여 배포 스크립트를 실행하도록 설정합니다.

- name: Deploy to EC2
  run: |
    ssh -i "your-key.pem" ubuntu@your-ec2-public-dns 'bash -s' < deploy.sh

Google Cloud Compute Engine으로의 자동화 배포

1. Cloud Storage에 빌드된 서버 업로드하기

GitHub Actions 워크플로우에서 빌드된 서버 파일을 Google Cloud Storage에 업로드합니다.

 

2. Compute Engine에서 배포 스크립트 실행하기

Google Cloud Compute Engine에서 Cloud Storage에서 파일을 다운로드하고 실행하는 스크립트를 작성합니다. 예를 들어, deploy.sh 파일을 작성할 수 있습니다.

#!/bin/bash
gsutil cp gs://your-bucket-name/bin/server /home/your-user/bin/server
chmod +x /home/your-user/bin/server
nohup /home/your-user/bin/server > /var/log/server.log 2>&1 &

 

3. Compute Engine에 배포 스크립트 자동 실행 설정하기

GitHub Actions에서 Compute Engine에 SSH로 접속하여 배포 스크립트를 실행하도록 설정합니다.

- name: Deploy to Google Cloud
  run: |
    gcloud compute ssh your-instance-name --zone your-zone --command "bash -s" < deploy.sh

 

CI/CD 파이프라인을 설정하면 Dart 서버 애플리케이션의 배포를 자동화하고, 코드 변경 시 신속하게 테스트하고 배포할 수 있습니다. GitHub Actions를 활용하여 CI/CD 파이프라인을 설정하고, AWS와 Google Cloud에서 자동으로 배포하는 방법을 배웠습니다.

  • CI (지속적 통합): 코드 변경 시 자동으로 빌드하고 테스트합니다.
  • CD (지속적 배포): 코드가 통과하면 자동으로 프로덕션 환경에 배포합니다.

이제 여러분도 CI/CD 파이프라인을 설정하여 Dart 서버 애플리케이션의 배포를 자동화해 보세요!

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형