이미지 파일 및 설정 파일 삭제, 새로운 CLI 및 문서 추가

This commit is contained in:
2025-03-04 12:19:53 +09:00
parent fb66b69644
commit 2c0a2d738c
33 changed files with 3149 additions and 54 deletions

View File

@@ -0,0 +1,224 @@
# **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 설치 및 로그인**
```sh
heroku login
```
#### **(2) Git 저장소 초기화 및 커밋**
```sh
git init
git add .
git commit -m "Initial commit"
```
#### **(3) Heroku 애플리케이션 생성**
```sh
heroku create my-ruby-app
```
#### **(4) 배포 실행**
```sh
git push heroku main
heroku open
```
이제 Heroku에서 애플리케이션을 실행할 수 있다.
---
### **2.2. VPS에 배포 (예: AWS, DigitalOcean)**
VPS(가상 사설 서버)에서 Ruby 애플리케이션을 배포하려면 **Linux 서버 환경 설정**이 필요하다.
#### **(1) 서버 접속**
```sh
ssh user@your-server-ip
```
#### **(2) 필수 패키지 설치**
```sh
sudo apt update
sudo apt install -y ruby ruby-dev build-essential
sudo apt install -y nginx
```
#### **(3) 애플리케이션 배포 및 실행**
```sh
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` 파일을 열고 다음 내용을 추가한다.
```nginx
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 재시작**
```sh
sudo systemctl restart nginx
```
이제 브라우저에서 `http://your-domain.com`으로 접속하면 애플리케이션이 실행된다.
---
### **2.3. Docker를 활용한 배포**
Docker를 사용하면 Ruby 애플리케이션을 컨테이너로 감싸 어디서든 실행할 수 있다.
#### **(1) `Dockerfile` 생성**
```dockerfile
FROM ruby:3.2
WORKDIR /app
COPY . .
RUN bundle install
CMD ["rails", "server", "-b", "0.0.0.0"]
```
#### **(2) Docker 이미지 빌드 및 실행**
```sh
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` 명령어로 서버 상태를 확인할 수 있다.
```sh
top
```
로그 파일을 확인하여 오류를 분석할 수도 있다.
```sh
tail -f log/production.log
```
---
### **3.2. 자동화 배포 (CI/CD 적용)**
CI/CD(Continuous Integration/Continuous Deployment)를 설정하면 **배포 자동화**가 가능하다.
GitHub Actions를 사용한 예제:
`.github/workflows/deploy.yml`
```yaml
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)**
```sh
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
```
#### **(2) 정기적인 업데이트**
Ruby와 라이브러리는 보안 패치를 적용해야 한다.
```sh
gem update --system
bundle update
```
#### **(3) 백업 전략**
데이터 손실을 방지하기 위해 정기적인 백업이 필요하다.
```sh
pg_dump -U postgres -h localhost mydatabase > backup.sql
```
---
## **4. 결론**
Ruby 애플리케이션을 배포하고 운영하는 과정은 **서버 설정, 성능 모니터링, 자동화, 보안 관리** 등 여러 요소를 포함한다.
| 주제 | 핵심 내용 |
|------|---------------------------------|
| **배포 방법** | Heroku, VPS, Docker를 활용한 배포 |
| **운영 전략** | 모니터링, 자동화 배포 (CI/CD) |
| **보안 관리** | SSL 적용, 업데이트, 백업 |
효율적인 배포 및 운영 전략을 수립하면 Ruby 애플리케이션을 안정적으로 서비스할 수 있다.