"배포 입문 (1/7) — 배포는 왜 필요한가: 로컬 실행과 공개 서비스의 차이"
같은 코드를 가지고도 내 노트북에서는 돌아가고, 남의 브라우저에서는 깨질 수 있다. 배포는 그 차이를 줄이는 작업이다.
핵심 요약
- 배포는 코드를 인터넷에 올리는 행위가 아니라, 다른 사람도 같은 결과를 보게 만드는 운영 절차다.
- 로컬 실행은 개인 환경에 기대지만, 공개 서비스는 서버 환경·빌드 결과·환경 변수·도메인·가용성을 함께 다뤄야 한다.
- 배포가 필요한 이유는 접근성, 반복 가능성, 협업, 검증, 복구 가능성 때문이다.
- 이후 시리즈는
로컬 작업 -> Git -> GitHub -> 호스팅 플랫폼 -> 자동 배포 파이프라인흐름으로 이어진다.
1. 배포는 실제로 무엇을 하는가
배포를 가장 짧게 정의하면 이렇다. 내 컴퓨터 안의 작업물을, 남도 같은 방식으로 접근할 수 있는 서비스 상태로 바꾸는 것.
이때 바뀌는 것은 코드 한 파일만이 아니다. 보통 함께 결정해야 하는 것이 많다.
- 어떤 파일을 빌드 결과로 쓸지
- 어떤 서버나 플랫폼에서 실행할지
- 어떤 환경 변수와 비밀값을 넣을지
- 어떤 주소로 공개할지
- 실패했을 때 어떻게 되돌릴지
그래서 배포는 "마지막 버튼"이 아니라 개발과 운영이 만나는 경계면이다.
2. 왜 로컬 실행만으로는 충분하지 않을까
로컬 실행은 개인 실험에는 훌륭하다. 하지만 서비스 관점에서는 한계가 분명하다.
첫째, 환경이 다르다. 내 맥북의 Node 버전, Python 패키지, 운영체제 설정은 다른 사람과 같지 않다. 둘째, 접근 경로가 없다. 로컬의 localhost는 나만 볼 수 있다. 셋째, 반복성이 약하다. 오늘은 됐는데 내일은 안 되는 경우가 흔하다. 넷째, 복구 이력이 없다. 어떤 버전이 안정적이었는지 바로 알기 어렵다.
배포는 이런 문제를 줄인다. 같은 저장소, 같은 브랜치, 같은 빌드 규칙, 같은 공개 주소를 기준으로 삼기 때문이다.
3. 배포가 주는 진짜 이점
많은 초보자는 배포의 장점을 "URL이 생긴다" 정도로 이해한다. 하지만 더 중요한 것은 아래 다섯 가지다.
접근성
사용자, 팀원, 면접관, 고객이 내 컴퓨터에 접속하지 않아도 결과를 볼 수 있다.
반복 가능성
같은 브랜치를 같은 방식으로 빌드하면 같은 결과가 나와야 한다. 이것이 자동화의 출발점이다.
협업 가능성
배포 주소가 있으면 "코드를 설명"하는 대신 "실제로 열린 화면"을 함께 볼 수 있다.
검증 가능성
배포 전후 테스트, 미리보기 링크, 로그, 롤백 지점을 만들 수 있다.
복구 가능성
문제가 생겼을 때 "직전 안정 버전으로 되돌린다"는 선택지가 생긴다.
4. 배포에도 종류가 있다
배포는 한 가지가 아니다. 앱의 성격에 따라 필요한 방식이 달라진다.
| 유형 | 대표 예시 | 특징 |
|---|---|---|
| 정적 배포 | 문서 사이트, 포트폴리오, 블로그 | HTML/CSS/JS 결과물만 올리면 됨 |
| 앱 배포 | Next.js, React, Streamlit 앱 | 빌드 또는 앱 실행 환경이 필요 |
| 서비스 배포 | API 서버, 백엔드, 워커 | 항상 떠 있는 프로세스, 로그, 재시작 정책 필요 |
이 구분이 중요한 이유는 플랫폼 선택 기준이 달라지기 때문이다. GitHub Pages는 정적 사이트에 강하고, Vercel은 프론트엔드 배포 경험이 좋고, Streamlit Community Cloud는 Python 데이터 앱에 단순하며, Railway는 서버 프로세스가 필요한 앱에 맞는다.
5. 초보자가 가장 자주 오해하는 지점
첫 번째 오해는 "배포는 개발이 끝난 뒤 한 번만 한다"는 생각이다. 실제로는 정반대다. 배포는 반복되는 업데이트 흐름의 일부다.
두 번째 오해는 "배포가 되면 운영도 끝"이라는 생각이다. 공개 이후에는 오류 로그, 환경 변수, 빌드 실패, 롤백, 비용 같은 운영 문제가 시작된다.
세 번째 오해는 "일단 메인 브랜치에 올리고 보자"는 태도다. 이 습관이 쌓이면 배포 파이프라인보다 실수 파이프라인이 먼저 만들어진다.
6. 이번 시리즈에서 무엇을 배우게 되나
이 시리즈는 순서를 의도적으로 잡았다.
- 왜 배포가 필요한가
- Git이 왜 배포의 기반인가
- GitHub에서 repository, Pages, Actions가 어떻게 역할을 나누는가
- Vercel, Streamlit Community Cloud, Railway는 각각 무엇에 맞는가
- 마지막으로 PR, 테스트, preview, production이 이어지는 자동 배포 파이프라인은 어떻게 구성하는가
즉, 도구를 외우기 전에 흐름을 먼저 이해하는 학습 순서다.
참고 자료
- GitHub Docs, Understanding GitHub Actions — https://docs.github.com/en/actions/get-started/understand-github-actions
- GitHub Docs, Configuring a publishing source for your GitHub Pages site — https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site
- Vercel Docs, Deploying Git Repositories with Vercel — https://vercel.com/docs/git
- Streamlit Docs, Deploy your app on Community Cloud — https://docs.streamlit.io/deploy/streamlit-community-cloud/deploy-your-app/deploy
- Railway Docs, Controlling GitHub Autodeploys — https://docs.railway.com/deployments/github-autodeploys
이 글은 배포 입문 시리즈의 1/7 편입니다. 다음 편: Git 기초 — commit, branch, merge, push를 배포 관점에서 이해하기.
댓글
댓글 쓰기