클라우드 없이도 DevOps는 가능하다
1. 왜 온프레미스 자동배포가 필요한가?
많은 조직이 아직:
- IDC 서버
- 사내 Ubuntu 물리 서버
- 내부망 전용 WAS
- Public WEB / Private WAS 구조
를 사용하고 있습니다.
문제는 여전히 이겁니다:
코드 수정 → 서버 접속 → git pull → build → 재기동
수작업은 DevOps가 아닙니다.
DevOps의 핵심은 배포 자동화 + 재현성 + 롤백 가능성입니다.
온프레미스에서도 충분히 가능합니다.
2. 전체 구조 아키텍처



4
구성:
Developer Push
↓
GitHub Actions
↓
SSH or Self-Hosted Runner
↓
On-Premise Server (Docker / JVM)
↓
GitHub Actions
↓
SSH or Self-Hosted Runner
↓
On-Premise Server (Docker / JVM)
방법은 2가지입니다.
3. 방법 1️⃣ SSH 기반 배포 (가장 단순)
원리
GitHub Actions에서 SSH로 서버 접속 후 명령 실행
1단계: 서버에 SSH 키 등록
서버:
ssh-keygen
생성된 public key를 ~/.ssh/authorized_keys에 등록
2단계: GitHub Secret 등록
- SERVER_HOST
- SERVER_USER
- SSH_PRIVATE_KEY
3단계: workflow 예시
name: Deploy to On-Prem
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: SSH Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/app
git pull
./gradlew build
docker compose up -d --build
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: SSH Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/app
git pull
./gradlew build
docker compose up -d --build
이렇게 하면 Push 시 자동 배포됩니다.
4. 방법 2️⃣ Self-Hosted Runner (DevOps 정석)
SSH 방식은 단순하지만 보안/확장성에 한계가 있습니다.
권장 방식은:
서버에 GitHub Runner를 직접 설치하는 것
1단계: 서버에 Runner 설치
mkdir actions-runner && cd actions-runner
curl -o actions-runner.tar.gz ...
tar xzf ./actions-runner.tar.gz
./config.sh
./run.sh
curl -o actions-runner.tar.gz ...
tar xzf ./actions-runner.tar.gz
./config.sh
./run.sh
2단계: workflow 수정
jobs:
deploy:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Build
run: ./gradlew build
- name: Restart
run: docker compose up -d --build
deploy:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Build
run: ./gradlew build
- name: Restart
run: docker compose up -d --build
이제 GitHub가 서버 내부에서 직접 실행됩니다.
장점:
- SSH 필요 없음
- 네트워크 단순화
- 사내망 전용 서버 가능
5. Docker 기반 자동배포 구조 (권장)
온프레미스에서 가장 안정적인 방식은:
- Docker 이미지 빌드
- Registry Push
- 서버에서 pull
- 무중단 재기동
예시:
docker pull lemuel/app:latest
docker compose up -d
docker compose up -d
6. 무중단 배포 전략
온프레미스에서도 가능합니다.
- Blue/Green
- Nginx Reverse Proxy
- Docker Port Switching
- Canary Deployment
예시 구조:
app-blue : 8081
app-green: 8082
nginx → active target switching
app-green: 8082
nginx → active target switching
7. 보안 고려사항
- SSH 키 암호화
- 방화벽 제한
- GitHub Secret 사용
- Runner 권한 최소화
- Docker rootless 모드
DevOps는 자동화 + 보안이 동시에 가야 합니다.
8. DevOps 관점에서의 의미
온프레미스 자동배포는 단순 편의 기능이 아닙니다.
의미:
- 배포 리드타임 감소
- 휴먼에러 제거
- 야근 감소
- 장애 대응 속도 향상
- 재현 가능한 인프라
특히 SI 조직에서:
배포를 수작업으로 하는 팀과 자동화한 팀의 생산성 격차는 매우 큽니다.
9. 실무 적용 체크리스트
- Dockerfile 작성
- docker-compose 구성
- GitHub Actions CI 구축
- 서버 접근 권한 정리
- 롤백 전략 설계
- 로그 모니터링 연동
10. 결론
클라우드가 아니어도 DevOps는 가능합니다.
GitHub Actions + 온프레미스 서버만으로도:
- 완전 자동 배포
- 무중단 운영
- 재현 가능한 인프라
를 구현할 수 있습니다.
문제는 기술이 아니라 의지입니다.
LIST
'DevOps & Infra' 카테고리의 다른 글
| Claude Code + 온프레미스 서버에서 IaC 적용하는 법과 효율성 (0) | 2026.02.25 |
|---|---|
| GitHub Actions + Docker Registry 최적화 (0) | 2026.02.25 |
| Infrastructure as Code (IaC)란 무엇인가? (0) | 2026.02.25 |
| DevOps란 무엇인가? (0) | 2026.02.25 |
| 📦 Docker는 왜 쓰는가? (0) | 2026.02.24 |
