
배포, 왜 이렇게 복잡한가?
개발자라면 누구나 한 번쯤 겪어봤을 상황이 있습니다. 코드는 완성했는데 배포하는 과정이 너무 복잡해서 막막한 순간 말이에요. 특히 개인 프로젝트나 소규모 팀에서 일할 때는 더욱 그렇습니다.
대형 CI/CD 도구들은 기능이 풍부하지만 설정이 복잡하고 무겁습니다. Jenkins는 설치부터 설정까지 상당한 시간이 걸리고, GitHub Actions는 private repository에서 사용하려면 비용이 발생합니다. GitLab CI는 좋지만 개인 프로젝트에는 과한 느낌이죠.
그렇다고 매번 수동으로 파일을 전송하고 서버에 접속해서 명령어를 실행하는 것도 비효율적입니다. 실수로 잘못된 명령어를 입력하거나 파일을 빼먹는 경우도 종종 발생하죠.
이런 고민 끝에 저는 Simploy라는 라이브러리를 만들게 되었습니다. "Simple Deploy"의 줄임말로, 이름 그대로 간단한 배포를 목표로 합니다.
Simploy란 무엇인가?
Simploy는 개인 프로젝트나 소규모 팀을 위한 초간단 CI/CD 배포 도구입니다. 복잡한 설정 없이 SSH를 통해 원격 서버에 파일을 전송하고 명령어를 실행할 수 있습니다. 환경 분리와 비밀 정보 관리도 지원하면서, 정말 필요한 기능만 담았습니다.
핵심 아이디어는 간단합니다. 설정 파일 하나로 파일을 서버에 전송하고 몇 개의 명령어를 실행하는 것. 복잡한 파이프라인이나 컨테이너 오케스트레이션 같은 고급 기능은 제외하고, 실제로 자주 사용하는 기본적인 배포 기능에만 집중했습니다.
Simploy의 주요 특징
1. 극도로 간단한 설정
Simploy의 가장 큰 특징은 설정의 단순함입니다. JSON 형태의 설정 파일을 사용해서 누구나 쉽게 이해할 수 있습니다. 복잡한 YAML 문법이나 특별한 DSL을 배울 필요가 없죠.
{
"environments": {
"dev": {
"servers": [
{
"name": "web",
"ssh": {
"host": "${DEV_WEB_HOST}",
"port": 22,
"user": "${DEV_WEB_USER}",
"password": "${DEV_WEB_PASSWORD}"
},
"localPath": ".",
"remotePath": "/home/ubuntu/app",
"transferIgnores": ["node_modules", ".git", ".env"],
"shell": [
"cd /home/ubuntu/app",
"npm ci",
"npm start"
]
}
]
}
}
}
이 설정만 봐도 무엇을 하는지 직관적으로 이해할 수 있습니다. 로컬의 현재 디렉터리를 서버의 특정 경로로 전송하고, 그 후에 필요한 명령어들을 실행하는 것입니다.
2. 환경 분리와 다중 서버 지원
실제 개발 환경에서는 개발, 스테이징, 프로덕션 환경을 분리해서 관리하는 것이 일반적입니다. Simploy는 이런 환경 분리를 자연스럽게 지원합니다.
{
"environments": {
"dev": {
"servers": [...]
},
"staging": {
"servers": [...]
},
"production": {
"servers": [...]
}
}
}
각 환경마다 여러 서버를 설정할 수 있어서, 로드 밸런싱을 위해 여러 대의 서버에 동시에 배포하는 것도 가능합니다. 예를 들어, 프로덕션 환경에서 웹 서버 여러 대에 순차적으로 배포할 수 있습니다.
3. 보안을 고려한 비밀 정보 관리
개발할 때 가장 신경 쓰이는 부분 중 하나가 비밀 정보 관리입니다. 서버 비밀번호, API 키, 데이터베이스 접속 정보 등을 코드에 하드코딩할 수는 없으니까요.
Simploy는 이 문제를 simploy.private.json 파일로 해결합니다. 이 파일에 모든 비밀 정보를 저장하면, 자동으로 .gitignore에 추가되어서 Git 저장소에 실수로 커밋되는 것을 방지합니다.
{
"DEV_WEB_HOST": "your.dev.server.com",
"DEV_WEB_USER": "ubuntu",
"DEV_WEB_PASSWORD": "your-secure-password",
"PROD_DB_PASSWORD": "super-secret-password"
}
설정 파일에서는 ${변수명} 형태로 변수를 참조할 수 있어서, 비밀 정보와 일반 설정을 깔끔하게 분리할 수 있습니다.
4. 즉시 사용 가능한 npx 지원
요즘 개발 트렌드를 보면 전역 설치를 피하고 npx를 사용하는 경우가 많습니다. Simploy도 이런 트렌드를 반영해서 npx를 통한 즉시 사용을 지원합니다.
# 전역 설치
pnpm add -g simploy
simploy init
simploy deploy --env dev
# 또는 npx로 바로 사용
npx simploy init
npx simploy deploy --env dev
전역 설치 없이도 바로 사용할 수 있어서, 새로운 프로젝트를 시작할 때 빠르게 배포 환경을 구축할 수 있습니다.
5. 스마트한 파일 전송
Simploy는 파일 전송 시 여러 최적화 기능을 제공합니다. transferIgnores 옵션으로 불필요한 파일들을 제외할 수 있고, remoteIgnoresWhenClean 옵션으로 서버에서 삭제하지 않을 파일들을 지정할 수 있습니다.
{
"transferIgnores": ["node_modules", ".git", ".env", "*.log"],
"remoteIgnoresWhenClean": [".env", "uploads/"]
}
이렇게 하면 필요한 파일만 전송해서 속도를 높이고, 서버의 중요한 파일들은 보호할 수 있습니다.
실제 사용 시나리오
개인 블로그나 포트폴리오 사이트
Next.js, Nuxt.js, React 등으로 개발한 개인 사이트를 VPS에 배포할 때 Simploy를 사용하면 매우 편리합니다. 빌드부터 배포까지 모든 과정을 자동화할 수 있고, 글 하나 수정할 때마다 간단한 명령어 하나로 배포할 수 있습니다.
프로토타입 개발
빠른 프로토타입 개발 시에는 복잡한 CI/CD 파이프라인을 구축할 시간이 없습니다. Simploy를 사용하면 몇 분 만에 배포 환경을 구축하고, 팀원들과 프로토타입을 공유할 수 있습니다.
클라이언트 프로젝트
프리랜서나 에이전시에서 클라이언트의 서버에 직접 배포해야 하는 경우가 많습니다. 클라이언트마다 서버 환경이 다르지만, Simploy의 설정 파일만 수정하면 쉽게 대응할 수 있습니다.
소규모 팀 프로젝트
스타트업이나 소규모 팀에서는 리소스가 제한적이라 복잡한 DevOps 도구를 도입하기 어렵습니다. Simploy는 최소한의 설정으로 팀 전체가 일관된 배포 프로세스를 사용할 수 있게 해줍니다.
사용법 가이드
1. 설치 및 초기화
# 전역 설치 (권장)
npm install -g simploy
# 프로젝트 초기화
simploy init
simploy init 명령어를 실행하면 두 개의 파일이 생성됩니다:
- simploy.json: 메인 설정 파일
- simploy.private.json: 비밀 정보 파일 (자동으로 .gitignore에 추가)
2. 설정 파일 편집
생성된 설정 파일들을 프로젝트에 맞게 수정합니다. 서버 정보, 배포 경로, 실행할 명령어 등을 설정하면 됩니다.
3. 배포 실행
# 개발 환경에 배포
simploy deploy --env dev
# 프로덕션 환경에 배포
simploy deploy --env production
배포 과정에서 진행 상황이 실시간으로 표시되고, 문제가 발생하면 어떤 단계에서 실패했는지 명확하게 알 수 있습니다.
다른 배포 도구와의 비교
vs GitHub Actions
- GitHub Actions: 강력한 워크플로우 엔진, 다양한 통합 지원, 하지만 private repo에서는 유료
- Simploy: 간단한 설정, 즉시 사용 가능, 완전 무료, 하지만 기능이 제한적
vs Jenkins
- Jenkins: 매우 강력하고 확장 가능, 하지만 설치/설정이 복잡하고 리소스 사용량이 많음
- Simploy: 설치 없이 바로 사용, 최소한의 설정, 하지만 고급 기능 부족
vs Docker + Docker Compose
- Docker: 환경 일관성, 확장성, 하지만 학습 곡선이 있고 설정이 복잡
- Simploy: 기존 서버 환경 그대로 사용, 즉시 적용 가능, 하지만 환경 일관성은 떨어짐
설치 및 사용
# 전역 설치
npm install -g simploy
# 또는 npx로 바로 사용
npx simploy init
npx simploy deploy --env dev
GitHub: https://github.com/JunDev76/simploy
npm: https://www.npmjs.com/package/simploy
여러분의 배포 과정이 조금이라도 편해졌으면 좋겠습니다. 사용해보시고 피드백이나 개선 아이디어가 있으시면 언제든 GitHub에서 공유해 주세요! 🚀
'devlog' 카테고리의 다른 글
| 학교 정부회장 토론회를 TV 방송처럼: 2주간의 준비 과정 (1) | 2025.07.11 |
|---|