IT1004

인프라 담당 없이 배포하는 현실적인 방법

개발 실무 IT1004

처음부터 복잡한 인프라를 구성할 필요가 없습니다. 서버 한 대와 프로세스 관리자면 상당한 규모까지 버팁니다.

최소 구성

SSL은 자동 갱신을 걸어두세요

무료 인증서는 유효기간이 짧습니다. 자동 갱신이 걸려 있지 않으면 어느 날 갑자기 접속이 안 됩니다.

갱신 실패 알림까지 설정해 두는 것이 안전합니다.

배포는 되돌릴 수 있어야 합니다

새 버전이 문제를 일으켰을 때 몇 분 안에 되돌릴 수 있는지가 중요합니다. 이전 버전을 남겨두는 것만으로도 충분한 경우가 많습니다.

데이터베이스 변경은 되돌리기 어려우므로 따로 관리해야 합니다.

배포 전 구문 검사만 돌려도 사고의 상당수가 걸러집니다. 서버에 올리기 전에 확인하는 습관이 중요합니다.

한 대에 여러 서비스를 올릴 때

포트를 나누고 리버스 프록시에서 도메인·경로로 분기하면 한 대에 여러 서비스를 올릴 수 있습니다. 비용이 크게 절약됩니다.

다만 한 서비스의 장애가 전체에 영향을 줄 수 있으므로 자원 제한을 걸어두는 편이 좋습니다.

서버 한 대의 최소 구성표

구성 요소역할빠뜨리면
리버스 프록시도메인 분기, SSL 종료, 압축HTTPS·다중 서비스 불가
프로세스 관리자재시작, 로그, 클러스터죽으면 그대로 멈춤
방화벽포트 차단DB가 외부에 노출
자동 SSL 갱신인증서 유지어느 날 접속 불가
로그 회전디스크 관리디스크 가득 참
원격 백업복구서버와 함께 소실

방화벽을 빠뜨리는 경우가 많습니다. 데이터베이스 포트가 외부에 열려 있으면 스캔 봇이 바로 찾아냅니다.

배포 절차를 문서로 남기세요

혼자 하더라도 순서를 적어두면 실수가 줄어듭니다. 그리고 급할 때 특히 효과가 큽니다.

  1. 로컬에서 구문 검사
  2. 테스트 실행
  3. 서버에 이전 버전 백업
  4. 새 버전 업로드
  5. 설정 문법 검사 (nginx -t 등)
  6. 재시작
  7. 동작 확인 — 헬스체크와 핵심 화면
  8. 로그 확인
3번을 건너뛰면 되돌릴 수 없습니다. 백업이 롤백입니다.

무중단이 필요한 시점

초기에는 몇 초 끊겨도 괜찮습니다. 사용자가 적을 때 무중단 배포를 구성하는 것은 과한 투자입니다.

다만 결제가 진행 중일 수 있으므로, 재시작 시 진행 중 요청을 정상 종료시키는 설정은 해두는 편이 좋습니다.

한 대에 여러 서비스를 올릴 때 주의

한 서비스의 메모리 누수가 서버 전체를 멈추게 하는 사고가 흔합니다. 프로세스 관리자에서 메모리 한도를 설정하고 초과 시 재시작하도록 걸어두세요.

서버를 옮겨야 할 때 대비

언젠가는 서버를 옮기게 됩니다. 그때를 위해 설정을 코드로 남겨두면 며칠이 몇 시간으로 줄어듭니다.

완전한 자동화가 아니어도 됩니다. 설치한 것과 설정 파일 목록만 문서로 있어도 충분히 도움이 됩니다.

로그 시각이 9시간 어긋날 때

UTC와 한국 시간, epoch를 한 화면에서 바꿔볼 수 있습니다.

UTC · 한국시간 변환기 →

자주 묻는 질문

컨테이너를 꼭 써야 하나요?
필수는 아닙니다. 서비스가 하나라면 없이도 충분합니다. 여러 개가 되고 환경이 엉키기 시작하면 그때 고려해도 됩니다.
서버 사양은 어느 정도로 시작하나요?
초기에는 가장 작은 사양으로 충분한 경우가 많습니다. 부족해지면 올리면 됩니다. 처음부터 크게 잡으면 비용만 나갑니다.
국내와 해외 중 어디에 두나요?
주 사용자 위치에 맞추는 것이 기본입니다. 국내 사용자면 국내가 응답이 빠릅니다.

같이 보면 좋은 글

개발 실무 전체 글

개발 실무 목록 보기 →