사이드 프로젝트로 기능 개발을 하면서 localhost:8000로 화면을 확인하고 동작을 확인해 왔지만 기능 개발이 어느정도 된 것 같아 배포를 해 보고자 했다.
가장 좋은 건 fastapi가 항상 구동되는 서버가 있을 때 해당 서버를 사용해서 배포하는 거지만 쉽지 않기 때문에 보통은 aws같은 도구를 사용한다. aws도 서버를 사용하려면 당연히 비용을 지불해야 하기 때문에 비용 부담을 덜고자 무료 툴을 알아봤다.
그러다가 알게 된 게 Render이다.
Render는 github 레포지토리와 연동해서 코드를 자동으로 빌드하고 배포해 주는 클라우드 플랫폼이다.
별도의 복잡한 서버 관리 없이 코드만 github에 push 하면 된다. 그러면 별도의 도커 설정 없이 python 환경을 사용해 fastapi를 배포할 수 있다.
이러한 장점으로 Render는 학습용 백엔드 배포 플랫폼으로 사용되고 있다.
Render 사용하기 전에 두가지를 먼저 해 줘야 한다.
1. github 원격 레포지토리에 코드 push 하기
- render는 github에서 코드를 가져오기 때문에 배포하고자 하는 소스 코드를 github에 push 해 줘야 한다.
2. requirements.txt 생성 후 소스코드가 저장되어 있는 동일 레포지토리에 push 하기
- render가 해당 파일을 읽어서 패키지를 설치하기 때문에 필요한 패키지를 모두 포함 시켜서 작성 및 저장, push 해 줘야 한다.
pip freeze > requirements.txt
위 명령어를 실행하면 pip로 설치된 모든 패키지 정보를 requirements.txt로 생성하게 된다.
3. render 가입하기
Render | The cloud for builders
Deploy and scale any app or agent from your first user to your billionth. Build faster on intuitive cloud infrastructure for the modern web.
render.com
위 링크에 접속해서 "Get Started for Free" 버튼을 클릭해서 github 계정으로 가입 해 주면 된다. github 연동을 허용 해 주면 별도의 인증 없이 대시보드에 접근할 수 있다

4. 서비스 생성
대시보드에서 Web Services → New Web Service 순으로 클릭하면 어디서 코드를 가져올지 선택할 수 있다.

github를 선택 해 주면 github에서 render를 설치하고 어떤 레포를 가져올지 선택할 수 있다.

모든 레포가 아닌 선택한 레포만 사용할 수 있도록 Only select repositories를 선택 해 주고 배포 레포를 선택 해 주면 된다.

설치 후 선택한 레포를 클릭 해 주면 fastapi 연결 설정을 할 수 있다.

source code가 선택한 레포가 맞는지 확인 해 준 후 서비스 이름을 Name에 작성 해 준다.
언어는 python3, region은 가장 가까운 싱가포르로 선택 해 주면 된다.
여기서 가장 주용한 건 build command와 start command인데
build command는 pip install -r requirements.txt 로 2번에서 생성 해 준 requirements.txt를 참고해서 패키지를 설치할 수 있도록 해 준다.
start command는 api 실행 커멘트로 uvicorn app.main:app --reload --host 0.0.0.0 --port 10000 으로 설정 해 주면 된다. port는 8000이 아니라 10000으로 해 주면 문제 없이 빌드가 된다.
그리고 instance type을 Free로 선택 해 주면 무료로도 render를 사용할 수 있다.
이렇게 설정 해 준 후 deploy web service를 클릭하면 render가 배포를 시작한다.
log 페이지를 가면 아래처럼 설치 및 배포 과정을 확인 할 수 있다.

빌드를 하다가 에러가 발생하면 아래처럼 에러 로그도 확인할 수 있다.

해당 에러 로그를 보고 코드를 수정하고 다시 push 해 주면 render가 변경 된 push를 자동으로 감지하고 재배포를 하게 된다.

render가 github 레포의 변경 된 push를 자동으로 감지하도록 하려면 Pull Request Previews에서 Off를 Automatic으로 설정 해 주면 된다.
수정 된 코드에서 에러가 해결이 됐다면 render가 배포에 성공하게 되고 이 모든 이력들은 events라는 탭에서 확인할 수 있다.

이렇게 배포가 성공적으로 끝나면 모자이크 처리 된 링크를 통해 외부에서도 접속이 가능 해 진다.
보통 https://Name.onrender.com 형태로 링크가 생성이 된다.
render를 무료 플랜으로 사용하게 되면 가장 큰 단점이 있는데 15분 동안 웹 사이트에서 아무런 반응이 없다면 인스턴스가 종료 된다. 생성된 링크로 초기 접속 또는 15분 뒤 재접속을 하게 되면 50초~60초 정도 대기 시간이 발생한다.

위 화면이 인스턴스 재시작 및 접속 대기 화면인데 해당 화면에서 이런 과정들을 간단하게 로그 형태로 확인할 수 있다.
이렇게 배포한 사이트가 아래 뉴스봇이다.
네이버 뉴스에서 카테고리 별 주요 뉴스 5개의 헤드라인을 크롤링 해 오고 기사의 원문 보기를 클릭하면 해당 기사로 연결되는 간단한 기능의 웹 사이트이다.
https://news-bot-wipz.onrender.com/

https://github.com/YOOHYOJEONG/News-Bot
GitHub - YOOHYOJEONG/News-Bot
Contribute to YOOHYOJEONG/News-Bot development by creating an account on GitHub.
github.com
현재는 금융, 부동산, 경제, 정치, 사회, IT/과학, 세계 카테고리에서 주요 뉴스의 헤드라인을 가져오고 있다.
또 다른 하나는 카카오톡 대화 분석 사이트이다.
오픈채팅방에서 운영진으로 활동하면서 회원들의 채팅수가 몇개인지 분석하면서 활동이 저조한 회원들은 정리하고 있는데 해당 기능의 어플은 유료이거나 특정 os만 지원하길래 웹사이트로 만들었다.



아직 아이폰에서 내보낸 txt 파일과 윈도우에서 낸 txt 파일만 분석이 되지만 추후 맥, 안드로이드에서 내보낸 txt 파일도 분석 되도록 기능을 추가할 예정이다.
https://github.com/YOOHYOJEONG/Talk-Report
GitHub - YOOHYOJEONG/Talk-Report
Contribute to YOOHYOJEONG/Talk-Report development by creating an account on GitHub.
github.com
해당 링크는 render에서 제공한 기본 도메인이 아닌데 이전에 cloudeflare에서 구매한 개인 도메인을 render에 연결했다.
https://iambeginnerdeveloper.tistory.com/341
Cloudflare | Cloudflare Personal Domain 구매하기, 클라우드플레어에서 개인 도메인 구매하기
최근에 사이드프로젝트를 진행하면서 내 pc를 서버로 해서 배포를 해 보려고 했는데 개인 pc ip 주소와 포트를 공개해야 한다는 부담이 있어서 방법을 찾던 중 cloudflare로 배포가 가능하다는 것을
iambeginnerdeveloper.tistory.com
위 포스팅 때 구매했던 도메인을 render에 연결하는 과정은 다음 포스팅에서 다룰 예정이다.