웹사이트 검색

의 앱 플랫폼에서 CI/CD를 통해 배포 간소화


오늘날 빠르게 변화하는 디지털 세계에서는 인간의 노력을 줄이는 것이 핵심입니다. 개발 및 배포를 간소화하려는 노력은 어느 곳에서나 가장 중요해졌습니다. 이러한 속도에 맞춰 CI/CD가 무엇인지, 클라우드 배포 애플리케이션에서 CI/CD를 구성하는 방법을 자세히 살펴보겠습니다.

지속적인 통합과 지속적인 배포 이해

일반적으로 CI/CD로 알려진 지속적인 통합 및 지속적인 배포는 배포 프로세스를 자동화하는 일반적인 방법입니다. CI는 코드 변경 사항을 공유 저장소에 통합하여 코드가 통합 문제 없이 유지되도록 하는 반면, CD는 이러한 통합 변경 사항을 스테이징 또는 프로덕션 환경에 자동으로 배포함으로써 한 단계 더 나아갑니다.

이러한 프로세스를 통해 모든 코드 변경 사항이 사용자에게 효율적이고 안정적으로 전달됩니다.

애플리케이션이 동적으로 호스팅되고 확장되는 클라우드 컴퓨팅 영역에서는 CI/CD의 필요성이 매우 중요합니다. 클라우드 환경은 민첩성, 확장성, 빠른 반복을 강조합니다. CI/CD는 개발자가 클라우드 기반 환경에서 기대되는 품질과 안정성을 유지하면서 지속적으로 변화하는 코드를 사용자에게 제공할 수 있도록 함으로써 이러한 원칙과 완벽하게 일치합니다.

DigitalOcean의 앱 플랫폼 개요

DigitalOcean의 앱 플랫폼은 개발자가 인프라 관리의 복잡성에 빠지지 않고도 애플리케이션을 구축, 배포 및 확장할 수 있도록 하는 PaaS(Platform-as-a-Service) 제품입니다. App Platform은 주로 배포 프로세스를 단순화하는 것으로 알려져 있지만 CI/CD 파이프라인으로 구성할 수도 있습니다.

이 문서는 원활하고 걱정 없는 배포를 위해 App Platform에서 CI/CD 파이프라인을 구성하는 방법에 대한 단계별 가이드입니다.

전제 조건

앱 플랫폼에서 CI/CD 파이프라인을 설정하기 전에 다음 필수 구성 요소가 있는지 확인하는 것이 중요합니다.

  • DigitalOcean 계정: 구성 프로세스를 시작하기 전에 유효한 DigitalOcean 계정이 있어야 합니다. 자세한 연습은 DigitalOcean 시작하기 설명서를 참조하세요.

  • 버전 제어 계정: 애플리케이션의 소스 코드에 액세스하려면 GitHub, GitLab 또는 DockerHub와 같은 플랫폼에 계정이 필요합니다.

  • 추가 보안을 위한 Snyk 계정: 이 튜토리얼에서 Snyk 계정을 만드는 것은 필수 단계는 아니지만 Snyk가 파이프라인에 추가 보안을 제공하므로 권장되는 접근 방식입니다.

이 튜토리얼에서는 GitHub에 배포된 Node.js 애플리케이션을 보여줍니다. 이 가이드를 단계별로 따르려면 다음이 추가로 필요합니다.

  • Node.js 설치: 시스템에 Node.js 14.x 이상 버전이 설치되어 있는지 확인하세요. 또한 계속 진행하기 전에 npm --version을 확인하세요.

1단계: 새 애플리케이션 생성

메모: 이미 신청서가 있는 경우 다음 단계로 건너뛸 수 있습니다.

시작하려면 잘 작동하고 앱 플랫폼에서 CI/CD 파이프라인용으로 설정할 수 있는 애플리케이션이 필요합니다.

Node.js를 처음 사용하는 경우 이 가이드를 참조하여 그것이 무엇인지 배우고 끝까지 기본 앱을 준비할 수 있습니다. 그렇지 않으면 원하는 언어로 앱을 만들 수 있습니다.

코드가 준비되면 다음 파일이 있는지 확인해야 합니다.

  • App.js - 빌드 코드가 포함되어 있습니다.

    var express = require('express');
    var path = require('path');
    var logger = require('morgan');
    
    var indexRouter = require('./routes/index');
    var app = express();
    
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'pug');
    
    app.use(logger('dev'));
    app.use(express.json());
    app.use('/', indexRouter);
    
    // error handler
    app.use(function(err, req, res, next) { ...
    });
    
    module.exports = app;
    
  • Test.js - 테스트 사례가 포함되어 있습니다.

    const assert = require('assert');
    const request = require('supertest');
    const app = require('../app');
    
    describe('Express App', function () {
    it('responds to GET / with status code 200', function (done) {
        request(app)
        .get('/')
        .expect(200)
        .end(function (err, res) {
            if (err) return done(err);
            done();
        });
    });
    });
    
  • Package.json - 성공적인 빌드를 위해 코드에 필요한 모든 내부 및 외부 종속성과 스크립트가 포함되어 있습니다.

    {
    "name": "app",
    "version": "0.0.0",
    "private": true,
    "scripts": {
        "start": "node ./bin",
        "test": "mocha"
    },
    "dependencies": {
        // Dependencies here..
    },
    "devDependencies": {
        // Dev dependencies here..
    }
    }
    
  • Package-lock.json - 코드에 설치된 모든 종속성에 대한 기록을 보유합니다.

    {
    "name": "app",
    "version": "0.0.0",
    "lockfileVersion": 3,
    "requires": true,
    "packages": {
        "": {
        "name": "app",
        "version": "0.0.0",
        "devDependencies": {
            // Dev dependencies here..
        }
        },
        "node_modules/xyz": {
            // Modules here..
        },
    }
    }
    

이 파일은 npm 설치 시 자동으로 생성되므로, 이 파일이 보이지 않으면 앱의 메인 디렉터리에서 npm install을 실행해 보세요.

팁: GitHub 또는 유사한 플랫폼에 이 앱을 배포하기 전에 앱을 로컬로 실행하여 성공적으로 빌드되었는지 확인하세요.

2단계: GitHub에 애플리케이션 배포

애플리케이션이 준비되면 GitHub에 배포할 차례입니다. GitHub를 처음 사용하는 경우 이 가이드는 계정 생성을 시작하는 데 도움이 될 것입니다.

  • GitHub 계정에 로그인하세요.
  • 새 저장소를 생성하고 이를 애플리케이션이 있는 경로에 연결합니다.
  • 이러한 변경 사항을 커밋합니다.

3단계: GitHub 작업 만들기

GitHub Actions는 코드 빌드, 테스트, 배포와 같은 다양한 작업을 자동화하기 위해 저장소에서 구성할 수 있는 자동화된 워크플로입니다. 코드가 변경될 때마다 GitHub Actions는 저장소에 해당 변경 사항이 자동으로 반영되도록 합니다.

GitHub 작업을 사용하여 App Platform의 애플리케이션에 대한 Ci/CD 파이프라인을 구성하겠습니다.

이것은 전체 과정에서 가장 중요한 단계입니다. 저장소에 GitHub Actions를 빠르게 설정하려면 다음 단계를 따르세요.

  • 애플리케이션 코드가 포함된 저장소를 열고 탐색 메뉴에서 작업을 클릭하세요.

  • GitHub에서 제공하는 여러 샘플 워크플로를 찾을 수 있는 워크플로 선택 페이지로 리디렉션됩니다. 애플리케이션에 따라 이러한 옵션 중에서 선택하거나 고유한 작업 흐름을 작성할 수도 있습니다.

이 튜토리얼에서는 간단한 Node.js 애플리케이션을 시연하므로 GitHub의 미리 작성된 Node.js 워크플로를 사용하면 작업이 완료됩니다. 코드를 나타내는지 확인하려면 YAML 파일을 약간 편집해야 할 수도 있습니다.

  • 워크플로 YAML에 문제가 없으면 오른쪽 상단에 있는 변경 사항 커밋 버튼을 클릭하기만 하면 됩니다.

GitHub는 코드가 할당된 워크플로에서 작동하는지 확인하기 위해 몇 가지 검사를 실행합니다.

이 구성을 사용하면 신속한 개발과 오류 없는 배포가 가능하지만 GitHub Actions를 활용하여 배포 파이프라인의 보안도 강화할 수 있습니다.

4단계: 개발 파이프라인에 보안 검사 통합

자동화 워크플로에 보안 검사를 구축하는 것은 코드베이스의 취약점이 프로덕션에 적용되기 전에 이를 식별하고 해결할 수 있는 좋은 방법입니다. GitHub Actions는 개발 파이프라인에 쉽게 통합할 수 있는 다양한 사전 구축된 보안 관련 워크플로를 제공합니다.

이러한 워크플로우 중 하나는 모든 코드베이스 취약점을 자동으로 감지하고 수정하는 Snyk GitHub Actions 통합입니다.

애플리케이션 위에 이를 구성하는 방법은 다음과 같습니다.

  • Snyk 계정에 로그인/가입하세요.

  • 애플리케이션 저장소를 Snyk와 연결하세요.

  • 다음 명령을 실행하여 애플리케이션에 Snyk 종속성을 추가합니다.

    npm install snyk
    
  • 이러한 변경 사항을 커밋합니다.

워크플로를 설정하기 전에 Snyk 보안 워크플로가 워크플로가 실행될 때마다 자동으로 계정을 인증할 수 있도록 Snyk의 API 토큰을 GitHub 작업과 연결해야 합니다.

  • Snyk의 대시보드로 이동하여 API 토큰을 복사하세요.
  • GitHub 저장소로 이동합니다.
  • 설정 > 비밀 > 새 저장소 비밀번호를 클릭하고 여기에 토큰을 붙여넣습니다. “SNYK_AUTH_TOKEN”과 같은 의미 있는 이름으로 이 변경 사항을 저장합니다.

Snyk의 GitHub 워크플로를 설정하려면 다음을 수행하세요.

  • 애플리케이션이 포함된 GitHub 저장소로 이동합니다.

  • 작업 탭으로 이동하여 새 워크플로를 클릭합니다.

  • 직접 워크플로 설정을 클릭하여 YAML 파일을 수동으로 만들거나 GitHub 마켓플레이스에서 사용할 수 있는 Snyk의 GitHub Action을 구성하여 이 단계를 건너뛸 수 있습니다.

워크플로를 직접 설정하려는 경우 다음 YAML 파일을 참조로 사용할 수 있습니다.

name: Snyk Security Check

on: push
jobs:
snyk-security-check:
    name: Snyk Security Check
    runs-on: windows-latest

    steps:
    - name: Checkout Repository
        uses: actions/checkout@master

    - name: Set Up Node.js
        uses: actions/setup-node@master
        with:
        node-version: '18'

    - name: Install Dependencies
        run: npm install

    - name: Snyk Auth
        run: npx snyk auth ${{ secrets.SNYK_AUTH_TOKEN }}

    - name: Run Snyk Security Check
        run: npx snyk test

이 워크플로는 프로젝트가 변경될 때마다 Snyk를 통해 보안 검사를 트리거합니다.

  • 이러한 변경 사항을 저장소에 커밋합니다.

Snyk 워크플로를 확인하려면 등록된 파일을 변경하세요. app.js를 편집하고 변경 사항을 커밋해 보겠습니다. Snyk 취약성 워크플로가 자동으로 실행되어 프로젝트 보안 상태를 업데이트합니다.

다음 단계를 수행하면 지정된 파일이 변경될 때마다 애플리케이션의 취약점을 자동으로 확인하도록 Snyk GitHub Actions를 설정하게 됩니다. 이 접근 방식은 프로젝트의 보안을 유지하고 취약점이 즉시 해결되도록 하는 데 도움이 될 수 있습니다.

5단계: 앱 플랫폼에서 애플리케이션 생성

이 애플리케이션을 앱 플랫폼에 배포하려면 다음 단계를 따르세요.

  • DigitalOcean의 제어판에서 만들기로 이동하여 앱을 선택합니다.

  • 소스 코드에서 리소스 만들기에서 애플리케이션 코드를 가져올 소스를 선택합니다.

코드가 없으면 기타: 샘플 앱 선택 옵션을 선택하여 DigitalOcean의 샘플 앱 중 하나를 사용할 수 있습니다.

  • 소스 코드 경로를 입력하고 다음 버튼을 클릭하세요. 여기에서 추가 리소스를 입력하고, 선택한 계획을 편집하고, 데이터베이스를 관리하는 등의 작업을 수행할 수 있습니다. 자세한 단계는 앱 만들기 설명서를 참조하세요. 앱 구성에 만족하면 검토 페이지에서 리소스 만들기 버튼을 클릭하세요. 그러면 앱 플랫폼에 소스 코드가 배포됩니다.

6단계: CI/CD 파이프라인 확인

이제 저장소의 변경 사항이 App Platform에 배포된 앱에 반영되는지 확인할 시간입니다.

app.js 파일을 직접 약간만 변경하고 저장소에 커밋해 보겠습니다.

{{< 이미지 “/developer-center/cicd-on-app-platform/test-code-in-appjs.png” >}}

이제 DigitalOcean 제어판의 앱으로 이동하세요. 콘솔로 이동하여 앱을 시작하여 'Hello, Sea World! "라는 메시지가 화면에 인쇄됩니다.

이것이 DigitalOcean 클라우드에 배포하려는 애플리케이션에 대한 CI/CD 파이프라인을 구성하는 것이 얼마나 쉬운지입니다.

DigitalOcean 커뮤니티 저장소에서 이 튜토리얼의 모든 파일을 검토할 수 있습니다.

결론

CI/CD는 간소화된 개발 및 배포를 위한 길을 열어줍니다. 이 강력한 개념과 DigitalOcean 클라우드가 제공하는 용이성을 결합하는 것은 민첩성과 효율성을 기념하는 여정입니다. 이는 좋은 클라우드 기반 배포가 갖추어야 할 요구 사항입니다. 앞으로 시간이 지나면서 이 융합은 점점 더 좋아질 것입니다. 계속 지켜봐 주시기 바랍니다!

앱 플랫폼을 중심으로 한 더 많은 튜토리얼을 보려면 DigitalOcean의 개발자 센터를 참조하세요. App Platform 사용 방법에 대한 간략한 개요를 보려면 이 기술 강연을 참조하세요.

관련기사: