과거와 현대의 차이: 과거에는 개발자가 직접 서버에 접속해 SSH로 파일을 복사하고 프로그램을 재시작하는 수동 방식이었으나, 현대 배포는 휴먼 에러를 방지하고 시스템 안정성을 위해 고도화된
자동화 파이프라인(CI/CD)을 거칩니다 1-3.
2. 프론트엔드 정적 사이트 배포 vs 백엔드 서버 배포
웹 서비스는 화면을 보여주는 프론트엔드와 비즈니스 로직을 연산하는 백엔드로 나뉘어 배포 전략이 다릅니다 1.
① 정적 사이트 배포 (프론트엔드)
개념 및 특징: React, Vue 등으로 빌드되어 완성된 HTML, CSS, JavaScript 정적 파일들을 브라우저에 제공하는 배포입니다 1.
배포 방식: 서버 측 연산이 필요 없으므로 AWS S3 같은 객체 스토리지에 올리고,
CDN(Content Delivery Network)이나 Vercel, Netlify 등의 클라우드 플랫폼을 활용해 전 세계 사용자에게 초고속으로 전송합니다 1, 4.
② 서버 배포 (백엔드)
개념 및 특징: Python(FastAPI, Django), Node.js, Java처럼 데이터베이스와 통신하고 실시간 비즈니스 로직을 연산하는 프로그램 배포입니다 1.
배포 방식: 코드가 실행될 런타임 환경(OS, 패키지, 메모리)이 24시간 항시 구동되어야 하므로 AWS EC2 같은 가상 서버나 Railway, 도커 컨테이너 환경이 필요합니다 1, 5.
도커(Docker)와 컨테이너: 서버 환경의 일관성 보장
어원 및 비유: Docker는 항구(Dock)의 부두 노동자에서 유래한 명칭이며, Container는 규격화된 수송용 철제 상자를 의미합니다 6.
문제점 해결: 과거에는 개발자 PC와 운영 서버의 OS 버전이나 설치 라이브러리가 달라 "내 컴퓨터에서는 되는데 서버에서는 안 된다"는 고질적인 환경 불일치 오류가 빈번했습니다 7-9.
도커의 역할: 코드와 함께 실행 환경(OS, 런타임, 의존성) 전체를 표준 컨테이너로 포장하여, 어느 서버에서 실행하든 100% 동일하게 동작하도록 환경을 통일합니다 7-9.
3대 구성 요소:
Dockerfile: 실행 환경 구축 순서를 적은 설계도 스크립트 8.
Image: 소스 코드와 환경을 완벽히 압축해 구워낸 불변의 파일 덩어리(밀키트) 8.
Container: 이미지를 메모리에 올리고 실제로 실행 중인 상태(완성된 요리) 8.
CI/CD: 지속적 통합 및 배포 자동화 파이프라인
개발자가 중앙 저장소(GitHub)에 코드를 올리는 순간부터 사용자에게 반영되기까지의 과정을 자동화한 시스템입니다 2, 7, 9.
CI (Continuous Integration, 지속적 통합):
개발자가 수정한 코드를 중앙 저장소에 통합할 때, 시스템이 자동으로 빌드하고 테스트 코드를 실행하여 버그나 충돌을 사전에 검증합니다 2, 7, 9.
CD (Continuous Deployment / Delivery, 지속적 배포):
CI 검증을 무사히 통과한 코드를 사람의 개입 없이 실제 운영 서버에 자동으로 업데이트하는 과정입니다 2, 7, 9.
대표 도구: GitHub Actions, Jenkins, GitLab CI 등을 활용합니다 3, 7, 9.
무중단 배포 3대 전략 (Zero-Downtime Deployment)
서비스 업데이트 시 서버 재시작으로 인한 접속 끊김(Downtime) 현상을 방지하기 위한 핵심 네트워크 전략입니다 10.
블루-그린 (Blue-Green) 배포
현재 가동 중인 환경(Blue)과 동일한 신규 서버 환경(Green)을 구성해 두고 새 코드를 올려놓습니다 10. 테스트 완료 후 로드밸런서 스위치를 Green으로 단숨에 전환하며, 문제가 생기면 Blue로 즉시 롤백합니다 10.
롤링 (Rolling) 배포
여러 대의 운영 서버를 한 번에 끄지 않고, 1~2대씩 순차적으로 새 버전으로 교체해 나가는 제어 방식입니다 10.
카나리 (Canary) 배포
광산의 유독가스 감지용 카나리아 새에서 유래한 기법으로, 새 버전을 5~10%의 소수 트래픽에만 먼저 노출시켜 모니터링한 뒤 이상이 없으면 전체로 확대합니다 10.
주요 배포 인프라 및 네트워크 요소
Nginx (엔진엑스): 비동기 이벤트 기반의 고성능 웹 서버이자 리버스 프록시(Reverse Proxy)로, 요청 라우팅, 로드 밸런싱(부하 분산), SSL/HTTPS 보안 처리, 내부 서버 격리를 담당합니다 4.
Vercel / Railway: 서버 인프라 직접 설정 없이 GitHub 연동만으로 프론트엔드 및 백엔드/DB를 초고속 배포할 수 있도록 돕는 PaaS 플랫폼입니다 4, 5.
도메인 (Domain): 복잡한 IP 주소를 사람이 읽기 쉬운 문자 주소로 변환하여, 서버 장비나 IP가 바뀌어도 사용자에게 고정된 서비스 진입점을 제공합니다 5.