소개
시도하고자 했던 것
지피터스 1인 풀스택 3주차에서 배운 Kamal 배포를 실제 프로젝트에 적용해보았습니다.
한바둑 명리학 시스템(Rails 8.1.1 + Dify AI)을 DigitalOcean 서버에 배포하여 실제 서비스로 운영할 수 있는 환경을 구축했습니다.
그 이유
GitHub Codespaces 로컬 개발 환경에서 실제 서비스로 전환 필요
월 $6(약 8,000원)의 저렴한 비용으로 서버 운영 가능
Rails 8에 내장된 Kamal로 복잡한 서버 설정 없이 배포 가능
명리학 AI 상담 서비스를 누구나 접속 가능하게 공개
진행 방법
사용 도구
도구용도비용Docker Hub이미지 저장소무료DigitalOcean Droplet서버 호스팅$6/월Kamal자동 배포 도구무료 (Rails 8 내장)GitHub Codespaces개발 환경무료Step 1: Docker Hub 가입 및 PAT 토큰 발급
Docker Hub(https://hub.docker.com) 가입 후 Personal Access Token 발급:
Account Settings → Security → Personal Access Tokens → Generate New Token
권한: Read & Write 선택
토큰 예시: dckr_pat_xxxxxxxxxxxxxxxxxxxxxxStep 2: DigitalOcean Droplet 생성
DigitalOcean(https://cloud.digitalocean.com) 가입 후 Droplet 생성:
Region: Singapore (한국과 가까움)
OS: Ubuntu 24.04 LTS
Size: $6/월 (1GB RAM, 1 CPU, 25GB SSD)
Authentication: Password 설정
Step 3: SSH 키 설정 (비밀번호 없이 접속)
bash
# Codespaces에서 SSH 키 생성
ssh-keygen -t ed25519 -C "hanbadook-deploy"
# 서버에 공개키 복사
ssh-copy-id [email protected]
# 비밀번호 없이 접속 테스트
ssh [email protected]Step 4: deploy.yml 설정
yaml
# config/deploy.yml
service: hanbadook-rails
image: hmhan2016/hanbadook-rails
servers:
web:
- 159.223.87.254
proxy:
ssl: false
host: 159.223.87.254
registry:
username: hmhan2016
password:
- KAMAL_REGISTRY_PASSWORD
env:
secret:
- RAILS_MASTER_KEY
clear:
SOLID_QUEUE_IN_PUMA: true
volumes:
- "hanbadook_rails_storage:/rails/storage"
builder:
arch: amd64Step 5: secrets 파일 설정
bash
# .kamal/secrets
KAMAL_REGISTRY_PASSWORD=dckr_pat_xxxxxxxxxxxxxxxxxxxxxx
RAILS_MASTER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxStep 6: Kamal 배포 실행
kamal setup
```
### 사용한 프롬프트 (Claude AI)
```
지피터스에서 배운 배포를 배울 겸해서 오늘 오후에 추가 공부하게요.
Kamal 배포 개념 정리해줘.
한바둑 명리학 시스템에 간단히 적용해 보기란 주제로 실습하게 해줘.
```
---
## 4. 결과와 배운 점
### 배운 점
1. **Kamal은 생각보다 간단하다**
- Rails 8에 기본 내장되어 별도 설치 불필요
- `deploy.yml` 하나로 모든 설정 관리
- `kamal setup` 한 줄로 서버 구성부터 배포까지 자동화
2. **SSH 키 설정이 핵심**
- 비밀번호 없이 서버 접속하려면 SSH 키 필수
- `ssh-copy-id` 명령어로 간단하게 등록 가능
3. **월 $6으로 실서비스 운영 가능**
- DigitalOcean 기본 Droplet로 충분
- 도메인 연결하면 완전한 서비스
### 나만의 꿀팁
```
💡 secrets 파일은 절대 GitHub에 올리지 마세요!
.gitignore에 .kamal/secrets 추가 필수
💡 SSH 키는 한 번 설정하면 계속 사용 가능
여러 서버에 같은 공개키 등록 가능
💡 Codespaces에서 붙여넣기가 안 될 때
Ctrl + Shift + V 또는 우클릭 → Paste
```
### 시행착오
1. **Docker Hub 유료 플랜 실수 가입**
- 해결: 무료 Personal 플랜으로 다운그레이드
2. **Codespaces 새로 열 때마다 Ruby 재설치**
- 해결: `rbenv install 3.4.1` 매번 실행 필요
3. **deploy.yml 붙여넣기 오류**
- 해결: VS Code 편집기에서 직접 수정
---
## 5. 앞으로의 계획
1. **도메인 연결**: Cloudflare에서 도메인 구매 후 SSL 설정
2. **Dify Knowledge Base**: 명리학 자료 업로드하여 AI 상담 품질 향상
3. **백만건 데이터 생성**: 1,123,200건 사주 조합 데이터베이스 구축
4. **모니터링 설정**: 서버 상태 및 에러 알림 구성
### 최종 목표 아키텍처
```
사용자 → hanbadook.com (도메인)
↓
DigitalOcean Droplet ($6/월)
├── Rails 8.1.1 (웹 서버)
├── PostgreSQL (데이터베이스)
└── Dify AI (명리학 상담)도움 받은 글 (옵션)
지피터스 1인 풀스택 3주차 - Kamal 배포 강의
Kamal 공식 문서: https://kamal-deploy.org
DigitalOcean 가이드: https://docs.digitalocean.com