인프라 담당 없이 배포하는 현실적인 방법
처음부터 복잡한 인프라를 구성할 필요가 없습니다. 서버 한 대와 프로세스 관리자면 상당한 규모까지 버팁니다.
인프라 담당 없이 배포하려면 어떻게 하나요?
서버 한 대에 프로세스 매니저와 리버스 프록시만 두는 구성으로 충분합니다. 쿠버네티스 같은 도구는 혼자 쓰면 배보다 배꼽이 큽니다. 배포는 스크립트 한 줄로 만들고, 되돌리는 방법을 먼저 준비하세요.
최소 구성
- 리버스 프록시 — 도메인과 SSL 처리
- 프로세스 관리자 — 죽으면 다시 띄우기
- 데이터베이스 — 같은 서버 또는 관리형
- 백업 — 자동, 서버 밖으로
- 로그 — 회전 설정 포함
SSL은 자동 갱신을 걸어두세요
무료 인증서는 유효기간이 짧습니다. 자동 갱신이 걸려 있지 않으면 어느 날 갑자기 접속이 안 됩니다.
갱신 실패 알림까지 설정해 두는 것이 안전합니다.
배포는 되돌릴 수 있어야 합니다
새 버전이 문제를 일으켰을 때 몇 분 안에 되돌릴 수 있는지가 중요합니다. 이전 버전을 남겨두는 것만으로도 충분한 경우가 많습니다.
데이터베이스 변경은 되돌리기 어려우므로 따로 관리해야 합니다.
한 대에 여러 서비스를 올릴 때
포트를 나누고 리버스 프록시에서 도메인·경로로 분기하면 한 대에 여러 서비스를 올릴 수 있습니다. 비용이 크게 절약됩니다.
다만 한 서비스의 장애가 전체에 영향을 줄 수 있으므로 자원 제한을 걸어두는 편이 좋습니다.
서버 한 대의 최소 구성표
| 구성 요소 | 역할 | 빠뜨리면 |
|---|---|---|
| 리버스 프록시 | 도메인 분기, SSL 종료, 압축 | HTTPS·다중 서비스 불가 |
| 프로세스 관리자 | 재시작, 로그, 클러스터 | 죽으면 그대로 멈춤 |
| 방화벽 | 포트 차단 | DB가 외부에 노출 |
| 자동 SSL 갱신 | 인증서 유지 | 어느 날 접속 불가 |
| 로그 회전 | 디스크 관리 | 디스크 가득 참 |
| 원격 백업 | 복구 | 서버와 함께 소실 |
방화벽을 빠뜨리는 경우가 많습니다. 데이터베이스 포트가 외부에 열려 있으면 스캔 봇이 바로 찾아냅니다.
배포 절차를 문서로 남기세요
혼자 하더라도 순서를 적어두면 실수가 줄어듭니다. 그리고 급할 때 특히 효과가 큽니다.
- 로컬에서 구문 검사
- 테스트 실행
- 서버에 이전 버전 백업
- 새 버전 업로드
- 설정 문법 검사 (nginx -t 등)
- 재시작
- 동작 확인 — 헬스체크와 핵심 화면
- 로그 확인
무중단이 필요한 시점
초기에는 몇 초 끊겨도 괜찮습니다. 사용자가 적을 때 무중단 배포를 구성하는 것은 과한 투자입니다.
다만 결제가 진행 중일 수 있으므로, 재시작 시 진행 중 요청을 정상 종료시키는 설정은 해두는 편이 좋습니다.
한 대에 여러 서비스를 올릴 때 주의
- 메모리 상한을 서비스별로 걸어두기 — 하나가 다 먹으면 전부 죽습니다
- 포트를 문서화 — 나중에 충돌합니다
- 로그를 분리 — 섞이면 원인 파악이 어렵습니다
- 재시작 순서를 정해두기 — 의존 관계가 있으면
서버를 옮겨야 할 때 대비
언젠가는 서버를 옮기게 됩니다. 그때를 위해 설정을 코드로 남겨두면 며칠이 몇 시간으로 줄어듭니다.
완전한 자동화가 아니어도 됩니다. 설치한 것과 설정 파일 목록만 문서로 있어도 충분히 도움이 됩니다.
UTC와 한국 시간, epoch를 한 화면에서 바꿔볼 수 있습니다.
UTC · 한국시간 변환기 →