AWS 이용해 Django 서버 배포하기

Lee Chanjoo·2022년 1월 17일
0
post-thumbnail

개요

마켓컬리 클론코딩, 이커머스 사이트

마켓컬리 백엔드 클론코딩 프로젝트입니다. 이커머스 사이트의 필수 기능들을 구현했습니다. 개발된 API는 프론트엔드 서버와 연동되어 실제 운영중입니다.

개발 인원 및 기간

개발 기간 : 2021/12/27 ~ 2022/1/7 (2주간)
개발 인원 : 프론트엔드 3명, 백엔드 2명
깃허브 링크 :백엔드 github 링크

어떤 기술 스택을 썼는지?

Language : python3
Framework : Django
Database : MySQL
Infra : AWS (EC2, RDS)

어떻게 배포했는지

AWS 클라우드 가상 서버 EC2

EC2란? elastic compute cloud란 뜻의 가상 컴퓨터이다. 클라우드 환경에서 배포하기 위해서 아마존의 가상 컴퓨터 자원을 활용해 인스턴스를 생성함.
리전(region)은 실제 컴퓨터가 존재하는 데이터 센터를 의미하는데, 한 번 설정한 리전은 옮기기 어렵기 때문에 신중하게 선택해야한다.

gunicorn이란?

대표적인 파이썬 WSGI(Web Server Gateway Interface) 서버에는 두 가지가 종류가 있는데 uWSGIgunicorn이다. WSGI는 웹 서버와 어플리케이션 서버의 인터페이스 역할을 한다. 웹 서버로 부터 요청을 받아오면 우리가 실제로 작성한 파이썬 코드를 실행시켜준다.

python manage.py runserver 도 비슷한 역할을 하지만 실제 프로덕션 환경에는 적합하지 않다. WSGI는 멀티 스레드로 동작하기 때문에 요청이 많아 지더라도 유연하게 처리 가능하다.

데몬이란?

데몬이란? 백그라운드로 실행하고 세션을 종료해도 멈추지 않고 계속 작동하는 프로세스를 의미한다.
실제로 가상 컴퓨팅 환경에 서버를 띄우고 쉘을 닫으면 서버가 꺼진다. 하지만 우리가 실행한 서버를 위해 매번 컴퓨터를 켜놓을 수 없기 때문에 데몬을 사용하게 된다.
파이썬 프로그램을 데모나이즈 해주는 대표적인 supervisor 프로그램을 이용해보았다.

supervisor를 사용해 프로세스 데몬화

supervisor는 python 으로 만들어진 제품으로 프로세스를 모니터링/관리하며 데몬 형식으로 지속적으로 동작해야 하는 프로세스가 있을 경우 유용하게 사용할 수 있다.

nginx

gunicorn만으로도 실제 서비스를 제공할 수 있지만 Apache나 nginx 등의 웹 서버를 앞단에 두는 이유는 보안적인 이유가 가장 크다. 웹 서버는 정적 리소스 제공 이외에도 로드밸런싱 기능도 제공하고 잘못된 요청으로 부터 서버를 안전하게 유지할 수 있도록 다양한 기능들을 제공한다. 대표적으로 리버스 프록시가 있다.

리버스 프록시 적용하기

리버스 프록시는 유저로부터 서버의 IP를 감추는 역할을 한다. (<-> 이와 반대되는 개념으로는 포워드 프록시라는 개념도 존재한다. 말 그대로 유저가 서버에게 자신의 아이피를 가리는 것을 의미)

실제 어플리케이션 서버는 8000포트로만 열어두고, 80포트로 실제 유저가 프록시 서버로 요청을 하면 웹 서버가 잘못된 요청인지 검증 절차를 거쳐 실제 어플리케이션 서버로 들어오게 된다.

엔진엑스를 활용하게 되면 보안, 성능, 트랙픽 분산의 이점을 얻을 수 있다. 자주 이용되는 동일한 요청에 대해서 웹서버가 캐싱 기능을 활용해 실제 어플리케이션 서버를 호출하지 않고도 웹 서버가 대신 응답해준다.

다음 배포는,

도커를 이용

첫번째 프로젝트는 전통적인 방식으로 배포를 해보았는데, 다음 프로젝트에는 도커 컨테이너를 활용해 배포를 진행해보고 싶다.

CI/CD를 적용

깃헙 메인 브랜치에 머지 될 때마다 계속 재배포 하는 과정이 약간 번거롭다는 생각이 들었다. 다음번에는 젠킨스 등의 툴을 사용하여 자동으로 빌드하고 배포하는 CI/CD 지속적 통합, 제공을 방법을 활용해 보아야겠다.

profile
재밌는 개발이 하고싶은 사람

0개의 댓글