비개발자의 백엔드 배포
개발자의 배포 과정은 이 챕터에서 다루지 않습니다. AWS, GCP, Azure 등 클라우드 서비스에 배포하는 방법은 별도 학습을 권장합니다.
이 장에서는 개발 전문가가 아닌 분이 백엔드 서비스를 배포하는 방법을 다룹니다. Django 프로젝트를 Render라는 서비스에 올리는 실습을 통해 배포 과정을 이해합니다.
처음 웹 서비스를 만들고 배포해본 사람에게는 큰 재미와 동시에 막막함을 함께 느낍니다. 더 무엇을 공부해야 할지, 어디에 배포해야 할지, 모든게 다 어렵고 힘들게 느껴지기 때문이죠. 만약 처음 입문하신 분이라면 무작정 4 ~ 5번 반복을 해보시길 권해드립니다. 여기서 자연스럽게 습득이 되는 부분이 많기 때문입니다.
1. 무료 서비스가 없는 이유
5장에서 사용한 GitHub Pages는 정적 웹사이트를 무료로 배포할 수 있는 좋은 서비스입니다. 이런 좋은 서비스를 무료로 제공할 수 있는 이유는 '정적 웹 서비스'는 서버에서 복잡한 연산을 하지 않기 때문입니다. 단순히 HTML, CSS, JS 파일을 사용자에게 전달하는 역할만 수행합니다. 그렇기 때문에 자원이 거의 들어가지 않죠.
우리가 이 장에서 만든 프로젝트는 연산도 있고, DB도 있습니다. 이러한 '연산' 기능을 제공하는 서버는 24시간 켜져 있어야 하며, 정적 페이지 배포보다 많은 컴퓨팅 파워를 요구합니다. 따라서 기업 입장에서 무료로 제공할 수 있는 서비스가 아닙니다. 많은 기업들이 유료로 서버를 임대해주고 있습니다. 대표적인 서비스는 아래와 같습니다.
- AWS(Amazon Web Services): https://aws.amazon.com/
- GCP(Google Cloud Platform): https://cloud.google.com/
- Azure(Microsoft Azure): https://azure.microsoft.com/
한국에는 NHN에서 제공하는 서비스가 있습니다. NCP라고 합니다.
- NCP(NHN Cloud Platform): https://www.ncloud.com/
다만 무엇을 선택하더라도 무료도 아닐 뿐더러 학습해야 하는 곡선이 매우 가파릅니다. 비개발자가 쉽게 접근하기 어려운 것이 현실입니다. 다만 아래와 같은 서비스가 아주 적은 자원을 무료로 제공합니다. 배포도 쉽고요. Render라는 서비스입니다.
* 기간 제한 없음
* 월 750시간의 무료 인스턴스 시간 제공
* 15분간 트래픽이 없으면 서비스가 spin down되고, 다음 요청이 들어올 때 다시 시작됩니다. 이 과정에서 최대 1분 정도 지연이 발생
* RAM: 512MB, CPU: 0.1 vCPU
- Render: https://render.com/
2. 쉬운 배포가 없는 이유
다만 쉽다고 하더라도 여러분이 생각하는 것처럼 클릭 몇 번으로 배포가 끝나는 서비스는 아닙니다. 어느 정도 개발 지식이 필요합니다. 그러면 우리는 이렇게 반문해볼 수 있습니다. '블로그처럼 쉬운 백엔드 서비스 배포는 왜 없을까?'라는 것이죠. 이는 몇 가지 이유가 있습니다.
-
보안 문제: 배포된 서비스는 외부에 노출되기 때문에 보안이 매우 중요합니다. 비개발자가 쉽게 사용할 수 있는 배포 서비스는 보안 취약점이 발생할 가능성이 높습니다. 예를 들어, 여러분의 아이디와 패스워드가 노출되면 누군가 여러분 서버에서 비트코인 채굴을 하고 비용을 여러분이 부담해야 할 수도 있습니다. 이러한 보안 문제가 생겼을 때 대부분의 클라우드 서비스는 관대하지 않습니다.
-
복잡성 문제: 배포 과정은 단순히 코드를 올리는 것 이상으로, 서버 설정, 데이터베이스 연결, 보안 설정 등 다양한 요소를 포함합니다. 이러한 복잡성 때문에 비개발자가 쉽게 접근하기 어렵습니다.
물론 위 2가지 말고도 더 많은 이유가 있지만, 가장 큰 이유는 위 2가지입니다. 그럼에도 Render는 매우 빠르고 간단한 배포 경험을 제공합니다. 그리고 복잡한 부분은 대부분 Code 탭이 대신 준비해 줍니다.
3. 배포할 서비스 준비하기
배포 실습에는 미리 만들어 둔 서비스를 씁니다. 앞 절에서 만든 여러분의 프로젝트로 진행해도 되지만, 처음에는 같은 코드로 따라 하는 편이 막히는 곳을 찾기 쉽습니다. 아래 서비스는 아래 프롬프트로 개발되었습니다. 수업을 위해 간소화한 것이니 참고하세요.
나는 유튜브와 비슷한 동영상 스트리밍 서비스를 간단히 만들려고 해. 나는 코딩을 인생에 있어서 한 번도 해본 적이 없는 사람이라 사용 방법까지 정리해줘.
내가 필요한 요구사항은 아래와 같아.
- 유튜브와 비슷한 UI
- 클릭했을 때 영상 재생
- 로그인(로그인한 사용자가 영상을 올릴 수 있는 형태는 아니고, 비공개된 영상을 볼 수 있는 서비스야)
- 나는 admin 페이지에서 영상을 올려, 영상을 올릴 수 있는 사람은 나 혼자야.
- 배포는 render에서 할 거야. 그래서 requirements.txt 파일이 필요하다네! render 서비스에서 배포할 때 처음에 `gunicorn 프로젝트명.wsgi`으로 시작한데! 참고해줘.
위 링크에 들어가 초록색 Code 버튼을 누르고 Download ZIP을 선택하면 코드를 내려받을 수 있습니다. 압축을 풀어 바탕화면에 두고, Code 탭에서 그 폴더를 선택하세요. 그리고 아래처럼 요청합니다.
이 폴더의 프로젝트를 내 컴퓨터에서 실행해서 볼 수 있게 해줘.
Python이 설치되어 있지 않으면 어디서 어떻게 설치하는지 먼저 알려줘.
필요한 것을 설치하고 서버를 켠 다음, 브라우저에서 열 주소와 관리자 계정 만드는 방법을 알려줘.
Claude가 폴더 안의 사용법.md를 읽고 순서대로 진행합니다. Python이 없다면 아래 페이지에서 내려받아 설치하라고 안내할 것입니다. 카카오톡이나 크롬을 설치하듯 다음을 눌러 설치하면 됩니다. 설치 화면에 Add python.exe to PATH라는 체크 칸이 있으면 체크해 주세요.
설치가 끝나면 다시 "이제 서버를 켜줘"라고 말하면 됩니다. 서버가 켜지면 Claude가 아래와 같은 주소를 알려 줍니다. 브라우저에 붙여 넣어 접속합니다.
http://127.0.0.1:8000/
관리자 계정도 Claude에게 만들어 달라고 하면 됩니다. "관리자 계정을 만들어줘. 아이디는 admin, 비밀번호는 내가 정할게"라고 하면 비밀번호를 물어봅니다. 로그인이 완료되면 영상을 올려보도록 합니다. http://127.0.0.1:8000/admin 로 접속하여 Videos를 눌러 비디오를 올립니다. 새 게시물을 올렸다면 http://127.0.0.1:8000/ 페이지에 다시 접속을 해보면 올라온 영상을 볼 수 있습니다. 영상 재생도 잘 됩니다.
127.0.0.1은 '내 컴퓨터 자신'을 뜻하는 주소입니다. 이 주소는 여러분 컴퓨터에서만 열립니다. 친구에게 보내도 열리지 않습니다. 남들도 볼 수 있게 하는 것이 이 장에서 할 배포입니다. 그리고 서버는 Claude Desktop이 켜 둔 것이라, 앱을 끄면 서버도 꺼집니다. 다시 보려면 "서버를 다시 켜줘"라고 하면 됩니다.
4. 이미 개발된 서비스를 수정하기
이렇게 개발이 되어 있는 서비스를 바로 Render에 올릴 수도 있지만, 우리는 여기에 간단한 게시판을 한 번 추가해보도록 하겠습니다. Code 탭에게 다음과 같이 요청할 수 있습니다.
간단한 게시판을 하나 추가해줘.
이 한 줄로도 게시판이 생깁니다. 다만 앞 절에서 배운 브리프 방식으로 요청하면 Claude가 마음대로 정하는 부분이 줄어듭니다.
이 프로젝트에 간단한 공지 게시판을 추가해줘.
- 누가: 글은 관리자인 나만 써. 로그인한 사용자는 읽기만 해.
- 무엇을: 공지 목록을 보고, 제목을 누르면 본문을 봐.
- 저장할 것: 제목, 본문, 작성 시각.
- 안 해도 되는 것: 댓글, 첨부파일, 검색.
기존 코드의 방식과 디자인을 그대로 따라줘. 다 만들면 서버를 다시 켜고 확인할 주소를 알려줘.
만들어지면 주소를 열어 목록과 본문이 보이는지, 관리자 페이지에 공지 메뉴가 생겼는지 확인합니다. 마음에 안 드는 곳은 이어서 말합니다.
5. Render에 배포하기
아래 YouTube 영상에 상세히 녹화를 해두었습니다. 영상을 보시면서 따라해보세요.
텍스트로도 준비해두었습니다. Render는 내 폴더가 아니라 GitHub에 올라간 코드를 가져다 배포합니다. 그래서 먼저 코드를 GitHub에 올려야 합니다. 5장에서 한 대로 Code 탭에 시키면 됩니다.
이 프로젝트를 내 GitHub에 vibe-django-test라는 이름의 새 저장소로 올려줘.
venv 폴더, __pycache__, db.sqlite3, .env 파일은 올리지 말고 .gitignore에 넣어줘.
.gitignore는 GitHub에 올리지 말아야 할 파일 목록입니다. 가상환경 폴더는 용량이 크고 다시 만들 수 있어서, db.sqlite3는 개인 데이터가 들어 있어서, .env는 비밀번호 같은 것이 들어 있어서 뺍니다. Claude가 알아서 처리하지만, 무엇을 왜 빼는지는 알아 두면 좋습니다.
| 항목 | 설명 |
|---|---|
venv/ | 가상환경 폴더. 용량이 크고 다시 설치 가능 |
__pycache__/ | Python이 자동 생성하는 캐시 폴더 |
.env | 비밀키, API 키 등 민감한 정보가 담긴 파일 |
db.sqlite3 | 개발용 데이터베이스. 개인 데이터가 포함될 수 있음 |
GitHub에 올라갔다면 이제 Render입니다. 여기서부터는 웹사이트에서 클릭으로 진행합니다.
- render.com에 접속하여 회원가입을 합니다. GitHub 계정으로 가입하면 다음 단계의 연결이 편합니다.
- Dashboard로 이동하여
Add new>Web Service를 클릭합니다. Projects 탭에Deploy a Web Service버튼을 클릭해도 됩니다. 우리는Deploy a Web Service를 클릭하겠습니다.

- Connect 계정에서 GitHub를 선택합니다. 연결하는 과정에서 GitHub 계정 인증이 필요합니다.


- 가능하면 연동은 1개의 리포지토리만 선택하는 것을 권합니다. 방금 올린 저장소만 골라 주세요.

- GitHub 계정과 연동이 되면 Repository 목록이 나타납니다. 방금 올린 저장소를 선택합니다. 연동이 다 되면 아래와 같이 나타납니다.

- 다음으로 Render에서 서비스 세부 설정을 합니다. 아래와 같이 입력합니다. 여기서 주의하셔야 할 것이
Start Command칸에 들어가는gunicorn video_streaming.wsgi는 미리 준비된 코드에 맞춘 것입니다. 여러분이 만든 프로젝트라면 프로젝트 이름에 맞게 바뀝니다. 잘 모르겠다면 Code 탭에 아래와 같이 물어보세요. Claude가 폴더를 보고 정확한 값을 알려 줍니다.
이 프로젝트를 Render에 배포하려는데 Start Command를 `gunicorn 프로젝트명.wsgi` 형태로 적어야 한대. 내 프로젝트는 뭐라고 적어야 해? Build Command도 같이 알려줘.

- 모든 설정이 완료되었으면 위 이미지 마지막에
Deploy Web Service버튼을 클릭합니다. 배포되는 시간은 약 5분 정도 소요됩니다. 배포가 완료되면 아래와 같이 서비스 URL이 나타납니다. 클릭해서 접속해봅니다.

배포 화면에 빨간 글씨로 실패가 뜨면 당황하지 마세요. 화면에 나온 로그를 드래그해서 복사한 다음 Code 탭에 "Render 배포가 이 로그를 내면서 실패했어. 원인을 찾아 고치고 다시 GitHub에 올려줘"라고 붙여 넣으면 됩니다. Render는 GitHub의 코드가 바뀌면 자동으로 다시 배포합니다. 배포가 끝난 뒤에 무엇을 눌러 보고 확인할지는 10장에서 다룹니다.