Files
ruby-examples/docs/11_애플리케이션 배포와 운영.md

6.0 KiB

Ruby 애플리케이션 배포와 운영

Ruby 애플리케이션을 개발한 후에는 배포운영이 중요하다. 배포 환경을 잘 설정하고 운영을 효율적으로 관리하면 애플리케이션의 성능과 안정성이 보장된다.

이 글에서는 Ruby 애플리케이션 배포 방법, 운영 중 고려해야 할 요소, 자동화 및 모니터링 전략 등을 설명한다.


1. 배포란 무엇인가?

배포(Deployment)는 개발된 애플리케이션을 서버에 올려 실제 사용자들이 사용할 수 있도록 하는 과정이다. 배포 환경에 따라 성능과 유지보수의 편의성이 달라질 수 있다.

배포 방식에는 여러 가지가 있다.

배포 방식 설명
PaaS 배포 Heroku, Render 같은 클라우드 서비스를 활용한 간편 배포
VPS 배포 AWS, Linode, DigitalOcean 같은 서버에 직접 배포
Docker 배포 컨테이너 기술을 활용한 배포
Kubernetes 배포 대규모 애플리케이션을 위한 컨테이너 오케스트레이션

2. Ruby 애플리케이션 배포 방법

2.1. Heroku를 이용한 간단한 배포

Heroku는 Ruby 애플리케이션을 빠르게 배포할 수 있는 PaaS 플랫폼이다.

(1) Heroku CLI 설치 및 로그인

heroku login

(2) Git 저장소 초기화 및 커밋

git init
git add .
git commit -m "Initial commit"

(3) Heroku 애플리케이션 생성

heroku create my-ruby-app

(4) 배포 실행

git push heroku main
heroku open

이제 Heroku에서 애플리케이션을 실행할 수 있다.


2.2. VPS에 배포 (예: AWS, DigitalOcean)

VPS(가상 사설 서버)에서 Ruby 애플리케이션을 배포하려면 Linux 서버 환경 설정이 필요하다.

(1) 서버 접속

ssh user@your-server-ip

(2) 필수 패키지 설치

sudo apt update
sudo apt install -y ruby ruby-dev build-essential
sudo apt install -y nginx

(3) 애플리케이션 배포 및 실행

git clone https://github.com/your-repo.git
cd your-repo
bundle install
rails db:migrate
rails server -d

(4) Nginx 설정 (Reverse Proxy 설정)

/etc/nginx/sites-available/default 파일을 열고 다음 내용을 추가한다.

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

(5) Nginx 재시작

sudo systemctl restart nginx

이제 브라우저에서 http://your-domain.com으로 접속하면 애플리케이션이 실행된다.


2.3. Docker를 활용한 배포

Docker를 사용하면 Ruby 애플리케이션을 컨테이너로 감싸 어디서든 실행할 수 있다.

(1) Dockerfile 생성

FROM ruby:3.2
WORKDIR /app
COPY . .
RUN bundle install
CMD ["rails", "server", "-b", "0.0.0.0"]

(2) Docker 이미지 빌드 및 실행

docker build -t my-ruby-app .
docker run -p 3000:3000 my-ruby-app

이제 http://localhost:3000에서 애플리케이션을 확인할 수 있다.


3. 운영 및 유지보수 전략

배포한 애플리케이션이 안정적으로 동작하려면 운영 및 유지보수가 중요하다.

3.1. 애플리케이션 모니터링

서버 상태를 모니터링하고 성능 문제를 파악하기 위해 다음과 같은 도구를 사용할 수 있다.

도구 설명
New Relic 성능 모니터링 및 에러 추적
Datadog 서버 및 애플리케이션 모니터링
Prometheus + Grafana 메트릭 수집 및 시각화
Logstash + Kibana 로그 분석 및 검색

예를 들어, top 명령어로 서버 상태를 확인할 수 있다.

top

로그 파일을 확인하여 오류를 분석할 수도 있다.

tail -f log/production.log

3.2. 자동화 배포 (CI/CD 적용)

CI/CD(Continuous Integration/Continuous Deployment)를 설정하면 배포 자동화가 가능하다.

GitHub Actions를 사용한 예제:

.github/workflows/deploy.yml

name: Deploy Ruby App
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install Ruby and Bundler
        run: |
          sudo apt-get install -y ruby bundler
      - name: Install dependencies
        run: bundle install
      - name: Deploy to Server
        run: |
          ssh user@your-server-ip "cd /app && git pull && bundle install && rails db:migrate && sudo systemctl restart your-app"

이제 git push 하면 자동으로 배포가 이루어진다.


3.3. 보안 및 유지보수

운영 중인 애플리케이션은 보안에도 신경 써야 한다.

(1) SSL 인증서 적용 (Let's Encrypt)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

(2) 정기적인 업데이트

Ruby와 라이브러리는 보안 패치를 적용해야 한다.

gem update --system
bundle update

(3) 백업 전략

데이터 손실을 방지하기 위해 정기적인 백업이 필요하다.

pg_dump -U postgres -h localhost mydatabase > backup.sql

4. 결론

Ruby 애플리케이션을 배포하고 운영하는 과정은 서버 설정, 성능 모니터링, 자동화, 보안 관리 등 여러 요소를 포함한다.

주제 핵심 내용
배포 방법 Heroku, VPS, Docker를 활용한 배포
운영 전략 모니터링, 자동화 배포 (CI/CD)
보안 관리 SSL 적용, 업데이트, 백업

효율적인 배포 및 운영 전략을 수립하면 Ruby 애플리케이션을 안정적으로 서비스할 수 있다.