YUDA't

팀 프로젝트를 시작한 지 5주 정도 되었을 때, 가끔 만나 조언을 해주시던 팀장님이 일단 배포를 해보라 하셨다.

아직 개발은 진행중인데 벌써? 라고 생각했지만, 사실 배포에 대한 부담감이 커서 미리 해치워버리고 싶기도 했다.

얼마나 걸릴까 걱정하기보단 그냥 해보자 싶어서 주말에 어느 정도 공부한 뒤 바로 진행했다.

 

프론트엔드 배포에는 정적 사이트 배포 서비스인 Netlify를 사용했다. 마지막으로 다닌 회사에서 알게 된 서비스인데 무지하게 편하다.

백엔드 배포 역시 전 회사에서 눈여겨봤던 Elastic Beanstalk으로. 예전에 튜토리얼만 한 번 따라해본 적 있는데 직접 사용하는 걸 보고나니괜찮겠다 싶었다.

 

이번 글은 지식 공유보다는...나중에 내가 다시 보기 위해 적어둔다.

 


 

프론트엔드 배포

 

처음엔 AWS S3로 배포하려 했으나, Netlify를 알게 됐으니 이걸 쓰지 않을 이유가 없어 Netlify로 결정했다.

 

엄청 간단하다. GitHub 계정을 연결하고, 리퍼지토리를 선택한 뒤 브랜치만 연결해주면 즉시 사이트가 배포된다.

친절한 캡처가 포함된 튜토리얼을 보고 싶다면 이 블로그 참고

 

커스텀 도메인도 적용할 수 있는데, 그건 여기를 참고했다.

참고로 커스텀 도메인을 적용하면 자동으로 Let’s Encrypt 인증서를 발급해준다! 따로 마련한 인증서를 적용할 수도 있다.

 


 

백엔드 배포

AWS Elastic Beankstalk으로 배포했다.

Jenkins도 연결할까 했는데 익숙지 않아 보류.

 

- 루트 경로에 .ebextensions 라는 폴더를 만든 , 아래 django.config 파일을 생성해 wsgi.py 경로를 명시해준다.(루트 폴더명 제외)

- 혹 Authorization 헤더를 사용한다면 'echo "WSGIPassAuthorization On" >> ../wsgi.conf' 이 커맨드도 함께 입력해주어야 한다.

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: xxx/wsgi.py
container_commands:
  01_wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

 

- 배포할 때 migrate도 하고 싶다면 다음 파일을 .ebextensions 아래 추가한다. 이름은 뭐든 상관 없으나 알파벳 순으로 실행되니 순서가 중요하다면 신경 써서 지어야 할지어다.👴🏻

DJANGO_SETTINGS_MODULE 에는 DB 정보가 담긴 setting 파일을 명시해준다.

container_commands:
  01_migrate:
    command: "python manage.py migrate"
    leader_only: true
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: config.settings

 

---

 

원래 여기까지만 하고 EB 도메인을 그대로 웹에서 api url로 사용하려 했는데, EB 도메인은 http라서 mixed content 문제가 있었다.

그래서 따로 EB에도 개인 도메인을 적용키로 결정.

 

- elastic beanstalk 개인 도메인을 적용하고 싶다면,

DNS 레코드를 추가하여 CNAME EB 도메인을 입력하고, EB Load Balaner 443 포트 리스너를 추가한다. (AWS 튜토리얼 참고)

(리스터 프로토콜은 https, 인스턴트 프로토콜은 http이다.)