이미지 파일 및 설정 파일 삭제, 새로운 CLI 및 문서 추가
This commit is contained in:
224
docs/11_애플리케이션 배포와 운영.md
Normal file
224
docs/11_애플리케이션 배포와 운영.md
Normal 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 애플리케이션을 안정적으로 서비스할 수 있다.
|
||||
Reference in New Issue
Block a user