오늘은 Dart 서버 애플리케이션의 CI/CD(지속적 통합/지속적 배포) 파이프라인을 최적화하는 방법에 대해 알아보겠습니다.
CI/CD는 소프트웨어 개발의 핵심 부분으로, 자동화된 빌드 및 테스트 과정을 통해 배포의 효율성을 높이는 역할을 합니다.
이 글에서는 Dart 서버 애플리케이션의 자동화된 빌드 및 테스트 파이프라인 구축과 GitHub Actions, GitLab CI/CD와 같은 도구를 활용한 CI/CD 구현 방법을 설명할게요.
1. Dart 서버 애플리케이션의 자동화된 빌드 및 테스트 파이프라인 구축
자동화된 빌드 및 테스트 파이프라인은 코드가 변경될 때마다 자동으로 빌드하고 테스트를 수행하여, 오류를 조기에 발견하고 배포를 원활하게 합니다.
1.1 Dart 애플리케이션 구조 설정하기
Dart 애플리케이션을 시작하기 위해 간단한 서버를 만들어보겠습니다.
Dart의 shelf 패키지를 사용하여 HTTP 서버를 설정할 수 있습니다. pubspec.yaml 파일에 다음 내용을 추가하세요.
dependencies:
shelf: ^1.2.0
이제 간단한 HTTP 서버를 만들어 보겠습니다.
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/http.dart' as shelf_http;
void main() async {
final handler = const Pipeline()
.addMiddleware(logRequests())
.addHandler(_echoRequest);
final server = await shelf_http.serve(handler, 'localhost', 8080);
print('서버가 시작되었습니다: http://${server.address.host}:${server.port}');
}
Response _echoRequest(Request request) {
return Response.ok('요청 URL: ${request.url}');
}
- logRequests(): 요청 로그를 출력하는 미들웨어입니다.
- _echoRequest: 클라이언트의 요청을 받아서 응답하는 함수입니다.
1.2 테스트 코드 작성하기
테스트 코드를 작성하여 서버의 동작을 확인할 수 있습니다. Dart에서는 test 패키지를 사용하여 단위 테스트를 작성할 수 있습니다. pubspec.yaml에 다음을 추가하세요.
dev_dependencies:
test: ^1.16.0
테스트 코드는 다음과 같이 작성할 수 있습니다.
import 'package:test/test.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/http.dart' as shelf_http;
void main() {
test('응답이 정상적으로 돌아오는지 확인', () async {
final handler = const Pipeline().addHandler(_echoRequest);
final request = Request('GET', Uri.parse('http://localhost:8080'));
final response = await handler(request);
expect(response.statusCode, 200);
expect(await response.readAsString(), '요청 URL: /');
});
}
Response _echoRequest(Request request) {
return Response.ok('요청 URL: ${request.url}');
}
- test('응답이 정상적으로 돌아오는지 확인'): 테스트 케이스를 정의합니다.
- expect: 테스트 결과를 검증합니다. 응답 상태 코드가 200인지 확인하고, 응답 내용이 '요청 URL: /'인지 검증합니다.
2. GitHub Actions, GitLab CI/CD와 같은 도구를 활용한 CI/CD 구현
CI/CD 도구를 사용하면 빌드 및 테스트 과정을 자동화할 수 있습니다. 이 섹션에서는 GitHub Actions를 사용하여 CI/CD 파이프라인을 구축하는 방법을 살펴보겠습니다.
2.1 GitHub Actions 설정하기
GitHub Actions를 사용하여 자동으로 Dart 애플리케이션을 빌드하고 테스트하려면, 프로젝트 루트에 .github/workflows 폴더를 만들고, 그 안에 ci.yml 파일을 생성합니다.
ci.yml 파일에 다음 내용을 추가하세요.
name: Dart CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v2
- name: Dart 설치
uses: subosito/flutter-action@v2
with:
flutter-version: '3.0.0' # 설치할 Flutter 버전
- name: 의존성 설치
run: dart pub get
- name: 테스트 실행
run: dart test
- name: 워크플로우의 이름을 설정합니다.
- on: 특정 이벤트(예: push, pull_request) 발생 시 워크플로우를 실행합니다.
- jobs: 작업을 정의합니다.
- build: 빌드 작업을 설정합니다.
- steps: 각 단계에서 수행할 작업을 정의합니다.
- 코드 체크아웃: 리포지토리의 코드를 가져옵니다.
- Dart 설치: Dart SDK를 설치합니다.
- 의존성 설치: dart pub get 명령어로 의존성을 설치합니다.
- 테스트 실행: dart test 명령어로 테스트를 실행합니다.
2.2 GitLab CI/CD 설정하기
GitLab CI/CD를 사용하려면, 프로젝트 루트에 .gitlab-ci.yml 파일을 생성합니다.
gitlab-ci.yml 파일에 다음 내용을 추가하세요.
stages:
- build
- test
build:
image: dart:stable
stage: build
script:
- dart pub get
test:
image: dart:stable
stage: test
script:
- dart test
- stages: CI/CD의 각 단계를 정의합니다. 이 예제에서는 build와 test 두 단계를 설정했습니다.
- build: 빌드 단계에서 Dart SDK를 사용하여 의존성을 설치합니다.
- test: 테스트 단계에서 dart test 명령어를 사용하여 테스트를 실행합니다.
Dart 서버 애플리케이션의 CI/CD 파이프라인을 구축하면 자동화된 빌드 및 테스트 프로세스를 통해 배포의 신뢰성을 높일 수 있습니다. GitHub Actions와 GitLab CI/CD와 같은 도구를 활용하여 이를 쉽게 구현할 수 있습니다.
여러분의 프로젝트에 이러한 자동화 프로세스를 적용해 보세요!
구독!! 공감과 댓글,
광고 클릭은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Server' 카테고리의 다른 글
[추가학습] Dart 서버/ DevOps와 자동화된 서버 관리 / 지속적인 모니터링 및 알림 (2) | 2024.10.07 |
---|---|
[추가학습] Dart 서버/ DevOps와 자동화된 서버 관리 / 인프라 자동화 (5) | 2024.10.07 |
[추가학습] Dart 서버/ 서버 애플리케이션 보안 심화 / 서버 침투 테스트 (1) | 2024.10.07 |
[추가학습] Dart 서버/ 서버 애플리케이션 보안 심화 / 데이터 암호화 및 보안 (1) | 2024.10.07 |
[추가학습] Dart 서버/ 서버 애플리케이션 보안 심화 / 고급 인증 및 권한 관리 (0) | 2024.10.07 |