본문 바로가기
-----ETC-----/C++ 네트워크 프로그래밍 시리즈

[C++ 네트워크 프로그래밍] Day 30: 프로젝트: 배포 및 유지보수

by cogito21_cpp 2024. 8. 1.
반응형

배포 및 유지보수

실시간 채팅 애플리케이션을 개발한 후, 이를 실제 환경에 배포하고 지속적으로 유지보수하는 단계가 필요합니다. 이 단계에서는 애플리케이션을 배포하고, 유지보수하는 방법에 대해 다루겠습니다.

배포 전략

  1. 빌드 및 패키징
    • CMake와 같은 빌드 시스템을 사용하여 프로젝트를 빌드하고, 필요한 모든 파일을 포함한 패키지를 생성합니다.
  2. 배포 환경 준비
    • 배포 환경(서버)에 필요한 소프트웨어를 설치합니다. 예를 들어, Boost, OpenSSL 등의 라이브러리와 함께 애플리케이션을 실행하기 위한 의존성을 설치합니다.
  3. 자동화 도구 사용
    • Docker와 같은 컨테이너화 도구를 사용하여 애플리케이션을 배포합니다. 이를 통해 일관된 배포 환경을 유지할 수 있습니다.
  4. CI/CD 파이프라인
    • Jenkins, GitHub Actions와 같은 CI/CD 도구를 사용하여 자동화된 배포 파이프라인을 구축합니다. 이를 통해 코드가 변경될 때마다 자동으로 빌드, 테스트, 배포가 이루어지도록 합니다.

유지보수 전략

  1. 로그 관리
    • spdlog와 같은 로깅 라이브러리를 사용하여 애플리케이션의 로그를 관리합니다. 로그를 통해 애플리케이션의 동작을 추적하고, 문제 발생 시 원인을 파악할 수 있습니다.
  2. 모니터링
    • Prometheus, Grafana와 같은 모니터링 도구를 사용하여 애플리케이션의 성능, 상태를 실시간으로 모니터링합니다.
  3. 업데이트 및 패치
    • 애플리케이션에 새로운 기능을 추가하거나, 버그를 수정하는 업데이트를 정기적으로 배포합니다.
  4. 백업 및 복구
    • 데이터베이스와 중요한 데이터를 정기적으로 백업하고, 필요 시 복구할 수 있도록 합니다.

실제 예제: Docker를 이용한 배포

Dockerfile

# 베이스 이미지 설정
FROM ubuntu:20.04

# 필수 패키지 설치
RUN apt-get update && apt-get install -y \
    g++ \
    cmake \
    libboost-all-dev \
    libssl-dev \
    spdlog \
    && apt-get clean

# 작업 디렉토리 설정
WORKDIR /app

# 소스 코드 복사
COPY . /app

# 빌드
RUN cmake . && make

# 포트 설정
EXPOSE 12345

# 애플리케이션 실행
CMD ["./ChatServer"]

 

Docker Compose 파일

version: '3.8'

services:
  chatserver:
    build: .
    ports:
      - "12345:12345"
    volumes:
      - ./logs:/app/logs

 

CI/CD 설정 예제 (GitHub Actions)

.github/workflows/cicd.yml

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

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

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Cache Docker layers
      uses: actions/cache@v2
      with:
        path: /tmp/.buildx-cache
        key: ${{ runner.os }}-buildx-${{ github.sha }}
        restore-keys: |
          ${{ runner.os }}-buildx-

    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        push: true
        tags: user/chatserver:latest

  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: SSH into server and deploy
      uses: appleboy/ssh-action@v0.1.1
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        key: ${{ secrets.SERVER_SSH_KEY }}
        script: |
          docker pull user/chatserver:latest
          docker-compose down
          docker-compose up -d

 

코드 설명

  • Dockerfile: 애플리케이션을 빌드하고 실행할 Docker 이미지를 정의합니다.
    • 베이스 이미지로 ubuntu:20.04를 사용합니다.
    • 필수 패키지와 라이브러리를 설치합니다.
    • 애플리케이션 소스 코드를 복사하고, 빌드합니다.
    • 포트를 노출하고, 애플리케이션을 실행합니다.
  • Docker Compose 파일: 여러 컨테이너를 정의하고 관리하는 파일입니다.
    • chatserver 서비스는 Dockerfile을 사용하여 빌드됩니다.
    • 호스트의 포트 12345를 컨테이너의 포트 12345에 매핑합니다.
    • 로그 디렉토리를 호스트와 컨테이너 간에 공유합니다.
  • GitHub Actions CI/CD 설정 파일: 코드 변경 시 자동으로 빌드, 테스트, 배포를 수행하는 파이프라인을 정의합니다.
    • build 작업은 Docker 이미지를 빌드하고, Docker Hub에 푸시합니다.
    • deploy 작업은 SSH를 통해 서버에 접속하여 Docker 이미지를 업데이트하고, 애플리케이션을 재시작합니다.

 

이제 서른 번째 날의 학습을 마쳤습니다. 실시간 채팅 애플리케이션을 실제 환경에 배포하고, 유지보수하는 방법을 학습했습니다.

질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. C++ 네트워크 프로그래밍 시리즈의 모든 과정을 완료하셨습니다! 축하드립니다! 🎉

반응형